<fix>[important]修复部分BUG,基本可用正式版

This commit is contained in:
葛林强 2024-08-15 13:13:38 +08:00
parent 33d1911609
commit 79fc895f4a
16 changed files with 255 additions and 33 deletions

View File

@ -45,6 +45,12 @@ public class ElTagTaskdata
/// <summary>
/// 任务号
/// </summary>
[JsonPropertyName("eTaskId")]
public string? ETaskId { get; set; }
/// <summary>
/// WMS任务号
/// </summary>
[JsonPropertyName("taskId")]
public string? TaskId { get; set; }

View File

@ -43,7 +43,8 @@ public class ElTagService(DataBaseData dataBaseData, AppElTagTaskDao elTagTaskDa
{
elTagTasks.Add(new AppElTagTask()
{
TaskId = string.IsNullOrEmpty(elTagTask.TaskId) ? dataBaseData.GetNewUUID() : elTagTask.TaskId,
TaskId = string.IsNullOrEmpty(elTagTask.ETaskId) ? dataBaseData.GetNewUUID() : elTagTask.ETaskId,
WmsTaskId = elTagTask.TaskId,
TaskGroup = request.TaskGroup,
TaskType = request.TaskType,
Location = elTagTask.Location,

View File

@ -14,7 +14,7 @@ public class DataClear(ClearData clearData)
/// 定时清理无用数据, ---- 每隔10分钟清理一次
/// </summary>
/// <returns></returns>
[CirculationTime(["14:34"], "数据清理")]
[CirculationTime(["03:00"], "数据清理")]
public void ClearDataCirculate()
{
try

View File

@ -14,7 +14,7 @@ namespace WcsMain.Business.CirculationTask.Convey;
[Circulation]
public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation conveyOperation, WmsWebApiPost wmsWebApiPost, AppConveyTaskDao conveyTaskDao)
public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation conveyOperation, WmsWebApiPost wmsWebApiPost, AppConveyTaskDao conveyTaskDao, AppElTagTaskDao elTagTaskDao)
{
private static List<AppConveyStand>? _pickStands; // 拣选站台
@ -42,10 +42,8 @@ public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation c
{
string code = conveyOperation.ReadStandCode(stand.StandId!);
code = Regex.Replace(code, "\\W", "");
if (string.IsNullOrEmpty(code))
{
return;
}
if (string.IsNullOrEmpty(code)) return;
elTagTaskDao.ClearNotCompleteTaskWithStand(stand.StandId); // 清理之前未完成的电子标签任务
ConsoleLog.Info($"【提示】料箱:{code} 已经到达拣选站台:{stand.StandId}");
conveyOperation.ClearStandCodeStatus(stand.StandId!);
@ -55,15 +53,15 @@ public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation c
VehicleNo = code,
TaskType = (int)ConveyTaskTypeEnum.pick,
Location = stand.StandId,
//TaskStatus = (int)ConveyTaskStatusEnum.moved
TaskStatus = (int)ConveyTaskStatusEnum.create
});
if (pickTasks == default || pickTasks.Count < 1)
{
ConsoleLog.Error($"【异常】拣选站台{stand.StandId} 料箱:{code} 找不到对应任务");
return;
}
else
{
var pickTask = pickTasks[0]; // 拣选任务
// 更新表内拣选时间和状态
conveyTaskDao.Update(new AppConveyTask()
{
TaskId = pickTask.TaskId,
@ -71,26 +69,26 @@ public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation c
ArriveLocation = stand.StandId,
CompleteTime = DateTime.Now,
Remark = "PLC上报料箱到达"
});
//return; // 测试
}); // 更新表内拣选时间和状态
}
// 发送wms料箱到达
UploadPickStandRequest request = new()
{
Location = stand.StandId,
VehicleNo = pickTask.VehicleNo,
Remark = ""
VehicleNo = code,
Remark = $"料箱:{code} 已经到达站台:{stand.StandId}"
};
var responseEntity = wmsWebApiPost.HttpPost<UploadPickStandRequest, WmsResponse>(request,
CommonData.AppApiBaseInfos.GetAddress("UploadBoxArrive") ?? "", 2000);
var responseEntity = wmsWebApiPost.HttpPost<UploadPickStandRequest, WmsResponse>(request, CommonData.AppApiBaseInfos.GetAddress("UploadBoxArrive") ?? "", 2000);
if (responseEntity.IsSend) // 发送失败不处理,下一次循环在发送
{
// 只要发送成功则不再发送
ConsoleLog.Info(
$"拣选站台{stand.Area} 获得对应料箱:{pickTask.VehicleNo} 上报成功WMS返回{responseEntity.ResponseMsg}");
var result = responseEntity.ResponseEntity;
ConsoleLog.Info($"拣选站台{stand.Area} 获得对应料箱:{code} 上报成功WMS返回{responseEntity.ResponseMsg}");
conveyOperation.ClearStandCodeStatus(stand.Area!);
//var result = responseEntity.ResponseEntity;
//if (result != null && result.Code == 0) // 上报成功
//{
// conveyOperation.ClearStandCodeStatus(stand.Area!);
//}
}
});
task.Start();

View File

@ -0,0 +1,71 @@
using CirculateTool.Attribute;
using WcsMain.ApiServe.Controllers.Dto.WcsDto.Stacker;
using WcsMain.ApiServe.Factory;
using WcsMain.Common;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.DataService;
using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
namespace WcsMain.Business.CirculationTask.Stacker;
/// <summary>
/// 本类主要用于采集堆垛机报警信息
/// </summary>
[Circulation]
public class RecordErr(StackerOperation stackerOperation, AppErrRecorDao errRecorDao, DataBaseData dataBaseData)
{
Dictionary<int, short> errData = []; // 用于存储故障
/// <summary>
/// 采集堆垛机报警信息
/// </summary>
/// <returns></returns>
[Circulation("采集堆垛机报警信息", 1000)]
public bool RecordErrMethod()
{
List<AppStacker> stackers = CommonData.AppStackers.Open();
if (stackers.Count < 1) return true;
foreach (AppStacker stacker in stackers)
{
/* 获取堆垛机状态 */
var (errMsg, stackerInfo) = stackerOperation.GetStackerInfo((int)stacker.StackerId!);
if (string.IsNullOrEmpty(errMsg) && stackerInfo != default)
{
short errCode = stackerInfo.ErrCode;
if (errCode != 0) // 有故障
{
bool isGet = errData.TryGetValue((int)stacker.StackerId, out short oldErrCode);
if(!isGet || oldErrCode != errCode) // 发生了一个新故障
{
AddStackerErr($"Stacker{stacker.StackerId}", errCode); // 添加故障
}
}
errData[(int)stacker.StackerId] = errCode; // 添加或者更新值
}
}
return true;
}
/// <summary>
/// 记录新故障
/// </summary>
/// <param name="equipmentId"></param>
/// <param name="errNo"></param>
private void AddStackerErr(string equipmentId, short errNo)
{
ConsoleLog.Error($"【报警】堆垛机设备:{equipmentId},发生新报警:{errNo}");
errRecorDao.Insert(new AppErrRecord
{
RecordId = dataBaseData.GetNewUUID2(),
Area = "S",
ErrNo = errNo,
EquipmentId = equipmentId,
CreateTime = DateTime.Now,
Remark = ""
});
}
}

View File

@ -34,7 +34,7 @@ public class ClearData(AppWmsTaskDao wmsTaskDao, AppWcsTaskDao wcsTaskDao, AppAp
var saveDays = clearTableAttribute.SaveDays; // 需要保存的天数
try
{
int deleteCount = CommonTool.DbServe.Deleteable<object>().AS($"{tableName}").Where($"{timeColumn} < '{DateTime.Now.AddDays(-saveDays)}'").ExecuteCommand(); // 删除超过一定天数的记录
int deleteCount = CommonTool.DbServe.Deleteable<object>().AS($"{tableName}").Where($"{timeColumn} < '{DateTime.Now.AddDays(-saveDays):yyyy-MM-dd HH:mm:ss}'").ExecuteCommand(); // 删除超过一定天数的记录
ConsoleLog.Info(deleteCount > 0, $"清除表:{tableName},保留:{saveDays} 天,清除记录数目:{deleteCount}");
}
catch(Exception e)

View File

@ -101,4 +101,6 @@ public class PickStandGetData(ConveyOperation conveyOperation, DataBaseData data
ConsoleLog.Warning($"【警告】拣选站台:{area} 箱码:{msg}写入PLC失败{plcTaskOk},信息:{errTextOk}");
return;
}
}

View File

@ -21,6 +21,7 @@ public class AppBaseErrDao
.WhereIF(appBaseErr.Area != default, w => w.Area == appBaseErr.Area)
.WhereIF(appBaseErr.ErrNo != default, w => w.ErrNo == appBaseErr.ErrNo)
.WhereIF(appBaseErr.ErrType != default, w => w.ErrType == appBaseErr.ErrType)
.WhereIF(appBaseErr.ErrLevel != default, w => w.ErrLevel == appBaseErr.ErrLevel)
.WhereIF(appBaseErr.ErrMsg != default, w => w.ErrMsg == appBaseErr.ErrMsg)
.WhereIF(appBaseErr.Suggest != default, w => w.Suggest == appBaseErr.Suggest)
.WhereIF(appBaseErr.Remark != default, w => w.Remark == appBaseErr.Remark)

View File

@ -21,6 +21,7 @@ public class AppElTagTaskDao
{
var sqlFuc = CommonTool.DbServe.Queryable<AppElTagTask>()
.WhereIF(queryData.TaskId != default, w => w.TaskId == queryData.TaskId)
.WhereIF(queryData.WmsTaskId != default, w => w.WmsTaskId == queryData.WmsTaskId)
.WhereIF(queryData.TaskGroup != default, w => w.TaskGroup == queryData.TaskGroup)
.WhereIF(queryData.Location != default, w => w.Location == queryData.Location)
.WhereIF(queryData.OrderId != default, w => w.OrderId == queryData.OrderId)
@ -104,6 +105,7 @@ public class AppElTagTaskDao
.WhereIF(!string.IsNullOrEmpty(request.SearchStr),
w => w.TaskId!.Contains(request.SearchStr!)
|| w.TaskGroup!.Contains(request.SearchStr!)
|| w.WmsTaskId!.Contains(request.SearchStr!)
|| w.Location!.Contains(request.SearchStr!)
|| w.VehicleNo!.Contains(request.SearchStr!)
|| w.GoodsId!.Contains(request.SearchStr!)
@ -156,6 +158,44 @@ public class AppElTagTaskDao
}
}
/// <summary>
/// 清除该载具没有完成的任务
/// </summary>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public int ClearNotCompleteTaskWithVehicleNo(string? vehicleNo)
{
if(string.IsNullOrEmpty(vehicleNo)) return 0;
try
{
var sqlFuc = CommonTool.DbServe.Updateable<AppElTagTask>()
.SetColumns(s => s.TaskStatus == (int)ElTagTaskStatusEnum.Error)
.SetColumns(s => s.Remark == "未执行")
.Where(w => w.VehicleNo == vehicleNo && (w.TaskStatus == (int)ElTagTaskStatusEnum.Lighting || w.TaskStatus == (int)ElTagTaskStatusEnum.NeedLight));
return sqlFuc.ExecuteCommand();
}
catch(Exception ex) { _ = ex; return 0; }
}
/// <summary>
/// 清除这个站台之前未完成的电子标签任务
/// </summary>
/// <param name="standId"></param>
/// <returns></returns>
public int ClearNotCompleteTaskWithStand(string? standId)
{
if (string.IsNullOrEmpty(standId) || standId.Length < 1) return 0;
try
{
var sqlFuc = CommonTool.DbServe.Updateable<AppElTagTask>()
.SetColumns(s => s.TaskStatus == (int)ElTagTaskStatusEnum.Error)
.SetColumns(s => s.Remark == "新箱子到,自动结束")
.Where(w => w.Location!.StartsWith(standId.Substring(standId.Length - 1)) && (w.TaskStatus == (int)ElTagTaskStatusEnum.Lighting || w.TaskStatus == (int)ElTagTaskStatusEnum.NeedLight));
return sqlFuc.ExecuteCommand();
}
catch (Exception ex) { _ = ex; return 0; }
}
/// <summary>
/// 清理多少天之前的数据

View File

@ -0,0 +1,31 @@
using WcsMain.Common;
using WcsMain.DataBase.TableEntity;
using WcsMain.WcsAttribute.AutoFacAttribute;
namespace WcsMain.DataBase.Dao;
[Component]
public class AppErrRecorDao
{
/// <summary>
/// 插入数据
/// </summary>
/// <param name="records"></param>
/// <returns></returns>
public int Insert(params AppErrRecord[] records)
{
try
{
var sqlFuc = CommonTool.DbServe.Insertable(records);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
}

View File

@ -28,7 +28,15 @@ public class AppBaseErr
/// </summary>
[SugarColumn(ColumnName = "err_type")]
[JsonPropertyName("errType")]
public int? ErrType { get; set; }
public string? ErrType { get; set; }
/// <summary>
/// 报警级别
/// </summary>
[SugarColumn(ColumnName = "err_level")]
[JsonPropertyName("errLevel")]
public int? ErrLevel { get; set; }
/// <summary>
/// 报警信息

View File

@ -15,6 +15,13 @@ public class AppElTagTask
[JsonPropertyName("taskId")]
public string? TaskId { get; set; }
/// <summary>
/// 任务号
/// </summary>
[SugarColumn(ColumnName = "wms_task_id")]
[JsonPropertyName("wmsTaskId")]
public string? WmsTaskId { get; set; }
/// <summary>
/// 任务组
/// </summary>

View File

@ -0,0 +1,56 @@
using SqlSugar;
using System.Text.Json.Serialization;
using WcsMain.WcsAttribute.Clear;
namespace WcsMain.DataBase.TableEntity;
/// <summary>
/// 报警记录表
/// </summary>
[SugarTable("tbl_app_err_record")]
[ClearTable("create_time", 180)]
public class AppErrRecord
{
/// <summary>
/// 记录号
/// </summary>
[SugarColumn(ColumnName = "record_id", IsPrimaryKey = true)]
[JsonPropertyName("recordId")]
public string? RecordId { get; set; }
/// <summary>
/// 区域
/// </summary>
[SugarColumn(ColumnName = "area")]
[JsonPropertyName("area")]
public string? Area { get; set; }
/// <summary>
/// 报警编号
/// </summary>
[SugarColumn(ColumnName = "err_no")]
[JsonPropertyName("errNo")]
public int? ErrNo { get; set; }
/// <summary>
/// 设备号
/// </summary>
[SugarColumn(ColumnName = "equipment_id")]
[JsonPropertyName("equipmentId")]
public string? EquipmentId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "create_time")]
[JsonPropertyName("createTime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnName = "remark")]
[JsonPropertyName("remark")]
public string? Remark { get; set; }
}

View File

@ -74,7 +74,7 @@ public class BaseOprDataHandler(AppElTagLocationDao tagBaseDao, AppElTagTaskDao
eltags = [.. eltags.OrderByDescending(el => el.LastLightTime)];
var eltag = eltags[0];
string? taskId = eltag.TaskId; // 获取任务号
if(string.IsNullOrEmpty(taskId) )
if(string.IsNullOrEmpty(taskId))
{
ConsoleLog.Warning($"【异常】电子标签确认按钮按下,该标签没有绑定的显示任务,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
return;
@ -106,7 +106,7 @@ public class BaseOprDataHandler(AppElTagLocationDao tagBaseDao, AppElTagTaskDao
TaskType = tagTask.TaskType,
VehicleNo = tagTask.VehicleNo,
OrderId = tagTask.OrderId,
TaskId = tagTask.TaskId,
TaskId = tagTask.WmsTaskId,
Location = tagTask.Location,
GoodsId = tagTask.GoodsId,
GoodsName = tagTask.GoodsName,

View File

@ -26,6 +26,7 @@ public class AtopOperation
{
col++;
if (col >= 5) col = 0;
CommonTool.OprTcpClient.Send(TagSendInfo.SetTagModel(Convert.ToByte(tagInfo.TagId), TagMode.Picking), tagInfo.ControllerDisplayName!);
CommonTool.OprTcpClient.Send(TagSendInfo.ShowTagId(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!);
CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagInfo.TagId), (LedColor)col), tagInfo.ControllerDisplayName!); // 显示颜色
CommonTool.OprTcpClient.Send(TagSendInfo.LedStatus(Convert.ToByte(tagInfo.TagId), LedStatus._0_25secblinking), tagInfo.ControllerDisplayName!); // 显示闪烁频率

View File

@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project>
<PropertyGroup>
<_PublishTargetUrl>F:\A开发项目\A菲达宝开项目\2024-05_苏州卡特\应用程序\WcsService\WcsMain\bin\Release\net8.0\publish\</_PublishTargetUrl>
<History>True|2024-08-07T02:16:37.1827604Z||;True|2024-03-29T15:42:25.2332590+08:00||;False|2024-03-29T15:41:29.1754215+08:00||;True|2024-03-29T15:21:55.1373612+08:00||;True|2024-03-28T09:54:32.8968372+08:00||;True|2024-01-28T15:05:36.1055501+08:00||;True|2024-01-28T15:02:06.6945727+08:00||;True|2024-01-28T14:56:23.0500171+08:00||;True|2024-01-20T20:29:00.5459863+08:00||;</History>
<History>True|2024-08-15T03:33:38.2722633Z||;True|2024-08-15T10:25:38.1970709+08:00||;True|2024-08-15T09:10:35.3249477+08:00||;True|2024-08-15T08:54:49.3636124+08:00||;True|2024-08-14T10:23:19.0348163+08:00||;True|2024-08-07T10:16:37.1827604+08:00||;True|2024-03-29T15:42:25.2332590+08:00||;False|2024-03-29T15:41:29.1754215+08:00||;True|2024-03-29T15:21:55.1373612+08:00||;True|2024-03-28T09:54:32.8968372+08:00||;True|2024-01-28T15:05:36.1055501+08:00||;True|2024-01-28T15:02:06.6945727+08:00||;True|2024-01-28T14:56:23.0500171+08:00||;True|2024-01-20T20:29:00.5459863+08:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>