肖洋
2024-11-23 79f9c5df2fa012b1586d5cf18481a11baa6e91be
一大堆更改
已删除1个文件
已修改7个文件
1525 ■■■■ 文件已修改
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/AgingOutputDto.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/CellState/TrayCellsStatusDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/ResponeAgingInputDto.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService - 复制.cs 1187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -156,7 +156,7 @@
                var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode);
                HandleTaskOut(conveyorLine, command, childDeviceCode, ProtocalDetailValue, task);
                if (task == null && command.Barcode != "NoRead")
                if (task == null && command.Barcode != "NoRead" && !command.Barcode.IsNotEmptyOrNull())
                {
                    HandleNewTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
                }
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs
@@ -125,6 +125,12 @@
        /// </summary>
        [Description("空托盘入库")]
        InTray = 204,
        /// <summary>
        /// NG入库
        /// </summary>
        [Description("NG入库")]
        InNG = 105,
    }
    public enum TaskOutboundTypeEnum
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/AgingOutputDto.cs
@@ -38,10 +38,10 @@
    /// <summary>
    /// å‚æ•°
    /// </summary>
    public List<ParameterInfo> ParameterInfo { get; set; }
    public List<ParameterInfoOutput> ParameterInfo { get; set; }
}
public class ParameterInfo
public class ParameterInfoOutput
{
    /// <summary>
    /// å‚数编码
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/CellState/TrayCellsStatusDto.cs
@@ -9,4 +9,9 @@
    /// æ‰˜ç›˜ç¼–号
    /// </summary>
    public string TrayBarcode { get; set; }
    /// <summary>
    /// ä¸Šä¼ ç±»åž‹
    /// </summary>
    public string SceneType { get; set; } = "4";
}
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MOM/ResponeAgingInputDto.cs
@@ -40,5 +40,55 @@
        /// å•位
        /// </summary>
        public string UomCode { get; set; }
        public List<ParameterInfo> ParameterInfos { get; set; }
    }
    public class ParameterInfo
    {
        /// <summary>
        /// å‚数类型属性,对应 "ParameterType"
        /// </summary>
        public string ParameterType { get; set; }
        /// <summary>
        /// ç›®æ ‡å€¼å±žæ€§ï¼Œå¯¹åº” "TargetValue"
        /// </summary>
        public string TargetValue { get; set; }
        /// <summary>
        /// å•位代码属性,对应 "UOMCode"
        /// </summary>
        public string UOMCode { get; set; }
        /// <summary>
        /// ä¸ŠæŽ§åˆ¶é™å±žæ€§ï¼Œå¯¹åº” "UpperControlLimit"
        /// </summary>
        public string UpperControlLimit { get; set; }
        /// <summary>
        /// ä¸‹æŽ§åˆ¶é™å±žæ€§ï¼Œå¯¹åº” "LowerControlLimit"
        /// </summary>
        public string LowerControlLimit { get; set; }
        /// <summary>
        /// ä¸Šè§„格限属性,对应 "UpperSpecificationsLimit"
        /// </summary>
        public string UpperSpecificationsLimit { get; set; }
        /// <summary>
        /// ä¸‹è§„格限属性,对应 "LowerSpecificationsLimit"
        /// </summary>
        public string LowerSpecificationsLimit { get; set; }
        /// <summary>
        /// è®¾å¤‡å¯ç”¨æ€§æ ‡å¿—属性,对应 "EquipmentAvailabilityFlag"
        /// </summary>
        public bool EquipmentAvailabilityFlag { get; set; }
        /// <summary>
        /// æè¿°å±žæ€§ï¼Œå¯¹åº” "Description"
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// å‚数版本属性,对应 "ParamVersion"
        /// </summary>
        public string ParamVersion { get; set; }
        /// <summary>
        /// å‚数代码属性,对应 "ParameterCode"
        /// </summary>
        public string ParameterCode { get; set; }
    }
}
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs
@@ -75,6 +75,18 @@
        public DateTime? OutboundTime { get; set; }
        /// <summary>
        /// å‚数信息
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "参数信息")]
        public string ParameterInfos {  get; set; }
        /// <summary>
        /// åº“存状态
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "库存状态")]
        public int StockStatus { get; set; }
        /// <summary>
        /// åº“存明细
        /// </summary>
        [SugarColumn(ColumnName = "StockInfoDetails")]
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService - ¸´ÖÆ.cs
ÎļþÒÑɾ³ý
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -2,6 +2,8 @@
using Mapster;
using Masuit.Tools;
using Masuit.Tools.Models;
using System.Linq;
using System.Threading.Tasks;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
using WIDESEA_IStorageBasicRepository;
@@ -131,6 +133,13 @@
        {
            throw new Exception("未找到对应的库区信息");
        }
        var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(stock.ParameterInfos).FirstOrDefault(y => y.Description.Contains("时间"));
        if (parameterInfo == null) throw new Exception("");
        var outHours = (DateTime.Now - stock.OutboundTime.Value).TotalHours;
        var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble();
        return new AgingOutputDto
        {
            OpFlag = 1,
@@ -142,18 +151,17 @@
                SlotNo = x.OrderNo.ToInt32(),
                SerialNo = x.SerialNumber,
                SerialNoResult = true,
                ParameterInfo = new List<ParameterInfo> { new ParameterInfo() { Value = (DateTime.Now - stock.CreateDate).TotalMinutes.ToString() } }
                //ParameterInfo = info.ParameterInfo.Select(y => new ParameterInfo()
                //{
                //    LowerLomit = y.LowerControlLimit,
                //    UpperLimit = y.UpperControlLimit,
                //    ParameterResult = y.EquipmentAvailabilityFlag,
                //    ParameterCode = y.ParameterCode,
                //    ParameterDesc = y.Description,
                //    TargetValue = y.TargetValue,
                //    Value = (DateTime.Parse(stock.LinedProcessFeedbackTime, null, System.Globalization.DateTimeStyles.RoundtripKind).ToLocalTime() - stock.CreateDate).TotalMinutes.ToString(),
                //    DefectCode = y.UOMCode
                //}).ToList()
                ParameterInfo = new List<ParameterInfoOutput> {
                    new ParameterInfoOutput() {
                        Value = outHours.ToString(),
                        ParameterCode =parameterInfo.ParameterCode,
                        ParameterDesc = parameterInfo.Description,
                        ParameterResult  = isNG.ToString(),
                        TargetValue = parameterInfo.TargetValue,
                        LowerLomit = parameterInfo.LowerSpecificationsLimit,
                        UpperLimit = parameterInfo.UpperSpecificationsLimit,
                    }
                }
            }).ToList()
        };
    }
@@ -266,6 +274,27 @@
        WebResponseContent content = new WebResponseContent();
        try
        {
            if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
            {
                task.TaskState = (int)TaskInStatusEnum.SC_InFinish;
                // åˆ›å»ºåŽ†å²ä»»åŠ¡å®žä¾‹æ¨¡åž‹
                var taskHtyNG = CreateHistoricalTask(task);
                // æ‰§è¡Œæ•°æ®åº“事务
                await _unitOfWorkManage.UseTranAsync(async () =>
                {
                    // æ·»åŠ åŽ†å²ä»»åŠ¡
                    var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHtyNG) > 0;
                    // åˆ é™¤ä»»åŠ¡æ•°æ®
                    var isTaskDelete = await Delete(task.TaskId);
                    if (!isTaskHtyAdd || !isTaskDelete)
                        throw new Exception("添加失败");
                });
                return content.OK("入库任务完成成功");
            }
            // èŽ·å–è£…ç®±ä¿¡æ¯å’Œç›®æ ‡ä½ç½®ä¿¡æ¯
            var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
            var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress);
@@ -371,6 +400,8 @@
        //2024å¹´11月16日:新增字段计算应出库时间
        stock.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration));
        stock.ProductionLine = respone.ProductionLine;
        stock.ParameterInfos = respone.ParameterInfos.ToJsonString();
        stock.StockStatus = 1;
        // è®°å½•日志
        LogFactory.GetLog("任务完成").InfoFormat(true, "入库任务完成", $"货位地址:{task.TargetAddress},修改后货位数据:{locationInf}");
@@ -463,6 +494,13 @@
                }
            }
            var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode && x.IsFull);
            if (stock != null)
            {
                // TODO质检回库
            }
            var area = await _areaInfoRepository.QueryFirstAsync(x => x.Spare1.Contains(input.Position));
            if (area == null)
                return content.Error("改点位不在区域列表中存在");
@@ -484,8 +522,25 @@
            // æ·»åŠ ç»„ç›˜ä¿¡æ¯
            // å°†content.Data转换为ResultTrayCellsStatus对象
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (result.SerialNos.Count <= 0)
            if (!result.Success)
                return content.Error(result.MOMMessage);
            // èŽ·å–å¼‚å¸¸ç”µèŠ¯
            var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1).ToList();
            if (serialNosError.Count > 0)
            {
                // TODO åˆ›å»ºä»»åŠ¡é€è‡³NG排出口
                List<string> NGStation = input.Position == "1088" ? new List<string>() { "1020" } : new List<string>() { "JZSC01" };
                content = await CreateNewTask(input, NGStation, 2);
                return content.Error("存在异常电芯");
            }
            if (result.SerialNos.Count <= 0)
            {
                // Todo ç©ºæ‰˜ç›˜å…¥åº“逻辑
                content = await RequestTrayInTaskAsync(input);
                return content;
            }
            // TODO èŽ·å–æœ¬åœ°æ–™æ¡†å±žæ€§ä¸Žæ•´ç›˜ç”µèŠ¯å±žæ€§èŽ·å–çš„å€¼è¿›è¡Œå¯¹æ¯”ï¼Œå¦‚æžœä¸€è‡´åˆ™ç»§ç»­ï¼Œå¦åˆ™è¿”å›žé”™è¯¯ä¿¡æ¯
            //var productions = await _productionRepository.QueryDataAsync(x => result.TrayBarcodePropertys.Select(x => x.TrayBarcodeProperty).ToList().Contains(x.TrayBarcodeProperty));
@@ -596,7 +651,6 @@
            List<string> strings = input.Position == "1016" ? new List<string>() { "CHSC01" } : new List<string>() { "JZSC01" };
            return await CreateNewTask(input, strings, 1);
            //return await CreateNewTask(input, null, 1);
        }
        catch (Exception)
        {
@@ -642,38 +696,6 @@
                SerialNo = item.SerialNo
            }).ToList()
        };
    }
    // èŽ·å–å·¥è‰ºå“åº”
    private async Task<List<Dt_EquipmentProcess>> GetProcessResponseAsync(ProcessApplyDto process, string position)
    {
        // å¦‚æžœprocess为null,则返回null
        if (process == null) return null;
        // è°ƒç”¨_processApplyService.GetProcessApplyAsync方法,获取工艺申请
        WebResponseContent content = await _processApplyService.GetProcessApplyAsync(process);
        // å¦‚果状态为false,则返回null
        if (!content.Status) return null;
        // å°†content.Data转换为ResultProcessApply对象
        var apply = JsonConvert.DeserializeObject<ResultProcessApply>(content.Data.ToString());
        // æ ¹æ®position的值,返回不同的Dt_EquipmentProcess列表
        switch (position)
        {
            case "1088":
                return SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>()
                    .Where(x => x.EquipmentType == "陈化" && x.WipOrderNo == apply.WipOrderNo || x.ProductDesc == apply.ProductNo)
                    .ToList();
            case "1339":
            case "1406":
                return SqlSugarHelper.Db.Queryable<Dt_EquipmentProcess>()
                    .Where(x => x.EquipmentType == "静置" && x.WipOrderNo == apply.WipOrderNo || x.ProductDesc == apply.ProductNo)
                    .ToList();
            default:
                return new List<Dt_EquipmentProcess>();
        }
    }
    #endregion è¯·æ±‚任务入库
@@ -1191,80 +1213,6 @@
    #region ä»»åŠ¡è¯·æ±‚æ–¹æ³•
    /// <summary>
    /// æ›´æ–°çŽ°æœ‰ä»»åŠ¡
    /// </summary>
    /// <param name="input">请求模型</param>
    /// <param name="areaId">区域ID</param>
    /// <param name="task">任务实例</param>
    /// <param name="content">响应内容</param>
    /// <returns></returns>
    //private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task)
    //{
    //    // åˆ›å»ºWebResponseContent对象
    //    WebResponseContent content = new WebResponseContent();
    //    // å®šä¹‰å˜é‡
    //    string toAddress;
    //    int taskState;
    //    string original = task.CurrentAddress;
    //    DtLocationInfo location = new DtLocationInfo();
    //    int beforeStatus = 0;
    //    // å¤„理入库任务
    //    location = await GetLocationDistributeAsync(task.Roadway);
    //    toAddress = location.LocationCode;
    //    taskState = (int)TaskInStatusEnum.Line_InFinish;
    //    beforeStatus = location.LocationStatus;
    //    // æ›´æ–°è´§ä½ä¿¡æ¯
    //    location.LocationStatus = (int)LocationEnum.Lock;
    //    // æ›´æ–°ä»»åŠ¡ä¿¡æ¯
    //    task.CurrentAddress = input.Position;
    //    task.TargetAddress = toAddress;
    //    task.NextAddress = toAddress;
    //    task.TaskState = taskState;
    //    // å¼€å§‹äº‹åŠ¡
    //    _unitOfWorkManage.BeginTran();
    //    // å®šä¹‰å˜é‡
    //    bool isUpdateLo = true;
    //    bool isUpdateChange = true;
    //    // å°è¯•更新任务
    //    bool isResult = await BaseDal.UpdateDataAsync(task);
    //    bool isTaskDetail = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(task.PalletCode, original, input.Position, TaskInStatusEnum.Line_InFinish.GetIntegralRuleTypeEnumDesc()));
    //    // åˆ›å»ºLocationChangeRecordDto对象
    //    LocationChangeRecordDto changeRecordDto = new LocationChangeRecordDto()
    //    {
    //        // è®¾ç½®å˜é‡
    //        AfterStatus = location.LocationStatus,
    //        BeforeStatus = beforeStatus,
    //        TaskNum = task.TaskNum.Value,
    //        LocationId = location.Id,
    //        LocationCode = location.LocationCode,
    //        ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage,
    //    };
    //    // æ›´æ–°ä½ç½®çŠ¶æ€
    //    isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
    //    isUpdateLo = await _locationRepository.UpdateDataAsync(location);
    //    if (isResult && isUpdateLo && isTaskDetail)
    //    {
    //        // æäº¤äº‹åŠ¡
    //        _unitOfWorkManage.CommitTran();
    //        content.OK(data: task);
    //    }
    //    else
    //    {
    //        // å›žæ»šäº‹åŠ¡
    //        _unitOfWorkManage.RollbackTran();
    //        content.Error("更新任务失败");
    //    }
    //    return content;
    //}
    // æ›´æ–°ä»»åŠ¡è´§ä½
    private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task)
@@ -1280,33 +1228,46 @@
            var content = new WebResponseContent();
            // èŽ·å–ç›®æ ‡åœ°å€å’Œæ›´æ–°ä»»åŠ¡çŠ¶æ€
            var location = await GetLocationDistributeAsync(task.Roadway);
            if (location == null)
            if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
            {
                return content.Error("无法获取货位信息");
                // TODO æ ¹æ®å··é“查找对应NG口,现在默认去静置堆垛机的异常口货位号
                task.CurrentAddress = input.Position;
                task.TargetAddress = "002-021-000";
                task.NextAddress = "002-021-000";
                task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                bool isResult = await BaseDal.UpdateDataAsync(task);
                return content.OK(data: task);
            }
            else
            {
                var location = await GetLocationDistributeAsync(task.Roadway);
                if (location == null)
                {
                    return content.Error("无法获取货位信息");
                }
                string toAddress = location.LocationCode;
                int taskState = (int)TaskInStatusEnum.Line_InFinish;
                int beforeStatus = location.LocationStatus;
                // æ›´æ–°è´§ä½ä¿¡æ¯
                location.LocationStatus = (int)LocationEnum.Lock;
                // æ›´æ–°ä»»åŠ¡ä¿¡æ¯
                MapTaskProperties(task, input, toAddress, taskState);
                // å¼€å§‹äº‹åŠ¡
                var isResult = await UpdateTaskAsync(task, location, beforeStatus);
                if (!isResult)
                {
                    _unitOfWorkManage.RollbackTran();
                    return content.Error("更新任务失败");
                }
                // æäº¤äº‹åŠ¡
                _unitOfWorkManage.CommitTran();
                return content.OK(data: task);
            }
            string toAddress = location.LocationCode;
            int taskState = (int)TaskInStatusEnum.Line_InFinish;
            int beforeStatus = location.LocationStatus;
            // æ›´æ–°è´§ä½ä¿¡æ¯
            location.LocationStatus = (int)LocationEnum.Lock;
            // æ›´æ–°ä»»åŠ¡ä¿¡æ¯
            MapTaskProperties(task, input, toAddress, taskState);
            // å¼€å§‹äº‹åŠ¡
            var isResult = await UpdateTaskAsync(task, location, beforeStatus);
            if (!isResult)
            {
                _unitOfWorkManage.RollbackTran();
                return content.Error("更新任务失败");
            }
            // æäº¤äº‹åŠ¡
            _unitOfWorkManage.CommitTran();
            return content.OK(data: task);
        }
        catch (Exception ex)
        {
@@ -1360,7 +1321,11 @@
        // èŽ·å–ç›®æ ‡åœ°å€
        //string ToAddress = await GetRoadWayAsync(process);
        string ToAddress = await GetRoadWayAsync(input, process);
        string ToAddress = string.Empty;
        if (flag != 2)
            ToAddress = await GetRoadWayAsync(input, process);
        else
            ToAddress = process[0];
        // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
        var task = new Dt_Task
@@ -1376,7 +1341,7 @@
            PalletCode = input.PalletCode,
            SourceAddress = input.Position,
            TaskState = (int)TaskInStatusEnum.InNew,
            TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : (int)TaskInboundTypeEnum.InTray,
            TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : flag == 1 ? (int)TaskInboundTypeEnum.InTray : (int)TaskInboundTypeEnum.InNG,
            TaskNum = await BaseDal.GetTaskNo(),
            Creater = "Systeam"
        };
@@ -1398,7 +1363,7 @@
                    PalletCode = task.PalletCode,
                    RoadWay = task.Roadway,
                    SourceAddress = task.SourceAddress,
                    TargetAddress = task.Roadway,
                    TargetAddress = task.TargetAddress,
                    TaskState = task.TaskState.Value,
                    Id = 0,
                    TaskType = task.TaskType,