222
schangxiang@126.com
2024-06-09 06a22e3d6d75e811affc35e12d00e8fd4259d869
222
已添加4个文件
已修改7个文件
10603 ■■■■■ 文件已修改
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DBScript/数据库设计/DF22001-一汽连杆数采项目(SCADA).pdma.json 9823 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/EquipmentBaseInfoService.cs 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/QueryYieldOutput.cs 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/iWare.Wms.Application.xml 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/Equipmentbaseinfolog.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/EquipmentbaseinfoOperatorTypeEnum.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/domUtil.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentBaseInfo/editForm.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -364,3 +364,4 @@
/iWare.Mdc.Code/iWare.Mdc.Database.Migrations/Migrations/*
/iWare.Mdc.Code/iWare.Mdc.Application/applicationsettings.json
/DBScript/数据库设计/.back_DF22001-一汽连杆数采项目(SCADA)
DBScript/Êý¾Ý¿âÉè¼Æ/DF22001-Ò»ÆûÁ¬¸ËÊý²ÉÏîÄ¿£¨SCADA£©.pdma.json
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/EquipmentBaseInfoService.cs
@@ -22,8 +22,9 @@
    [Route("api/[Controller]")]
    public class EquipmentBaseInfoService : IEquipmentBaseInfoService, IDynamicApiController, ITransient
    {
        private readonly IRepository<EquipmentBaseInfo,MasterDbContextLocator> _equipmentBaseInfoRep;
        private readonly IRepository<V_GetEquipmentAlert, MasterDbContextLocator> _v_GetEquipmentAlertRep;
        private readonly IRepository<EquipmentBaseInfo, MasterDbContextLocator> _equipmentBaseInfoRep;
        private readonly IRepository<Equipmentbaseinfolog, MasterDbContextLocator> _equipmentbaseinfologRep;
        private readonly IRepository<V_GetEquipmentAlert, MasterDbContextLocator> _v_GetEquipmentAlertRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly IRepository<EquipmentCurrentMonitor, MasterDbContextLocator> _equipmentCurrentMonitorRep;
@@ -37,13 +38,15 @@
        /// <param name="sysDictDataRep"></param>
        /// <param name="equipmentCurrentMonitorRep"></param>
        public EquipmentBaseInfoService(
            IRepository<EquipmentBaseInfo,MasterDbContextLocator> equipmentBaseInfoRep,
            IRepository<V_GetEquipmentAlert, MasterDbContextLocator> v_GetEquipmentAlert,
            IRepository<Equipmentbaseinfolog, MasterDbContextLocator> equipmentbaseinfologRep,
            IRepository<EquipmentBaseInfo, MasterDbContextLocator> equipmentBaseInfoRep,
            IRepository<V_GetEquipmentAlert, MasterDbContextLocator> v_GetEquipmentAlert,
            IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep,
            IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep,
            IRepository<EquipmentCurrentMonitor, MasterDbContextLocator> equipmentCurrentMonitorRep
        )
        {
            _equipmentbaseinfologRep = equipmentbaseinfologRep;
            _equipmentBaseInfoRep = equipmentBaseInfoRep;
            _v_GetEquipmentAlertRep = v_GetEquipmentAlert;
            _sysDictTypeRep = sysDictTypeRep;
@@ -65,10 +68,10 @@
                                     .Where(!string.IsNullOrEmpty(input.EquipmentId), u => u.EquipmentId == input.EquipmentId)
                                     .Where(!string.IsNullOrEmpty(input.EquipmentName), u => EF.Functions.Like(u.EquipmentName, $"%{input.EquipmentName.Trim()}%"))
                                     .Where(!string.IsNullOrEmpty(input.WorkingProcedure), u => u.WorkingProcedure.Equals(input.WorkingProcedure))
                                     .Where(!string.IsNullOrEmpty(input.AlertType),u=> (input.AlertType.Equals("1")&& u.IsAlertDetergent)
                                     ||(input.AlertType.Equals("2") && u.IsAlertKnifeTool)
                                     ||(input.AlertType.Equals("3") && u.IsAlertCuttingFluid)
                                     ||(input.AlertType.Equals("4") && u.IsAlert))
                                     .Where(!string.IsNullOrEmpty(input.AlertType), u => (input.AlertType.Equals("1") && u.IsAlertDetergent)
                                     || (input.AlertType.Equals("2") && u.IsAlertKnifeTool)
                                     || (input.AlertType.Equals("3") && u.IsAlertCuttingFluid)
                                     || (input.AlertType.Equals("4") && u.IsAlert))
                                     .OrderBy(PageInputOrder.OrderBuilder<EquipmentAlertSearch>(input))
                                     .ProjectToType<EquipmentAlertInfoOutput>().ToListAsync();
            return equipmentAlertInfos;
@@ -106,7 +109,7 @@
                                         CuttingFluidChangeTime = s.CuttingFluidChangeTime,
                                         Remarks = s.Remarks,
                                         CreatedTime = s.CreatedTime,
                                         TactTime=s.TactTime,
                                         TactTime = s.TactTime,
                                     })
                                     .Distinct()
                                     .OrderBy(PageInputOrder.OrderBuilder<EquipmentBaseInfoSearch>(input))
@@ -114,7 +117,7 @@
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return equipmentBaseInfos;
    }
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡åŸºç¡€ä¿¡æ¯ç®¡ç†å¯¼å‡ºExcel
@@ -129,7 +132,7 @@
                                     .Where(!string.IsNullOrEmpty(input.EquipmentName), u => u.EquipmentName == input.EquipmentName)
                                     .Where(!string.IsNullOrEmpty(input.WorkingProcedure), u => EF.Functions.Like(u.WorkingProcedure, $"%{input.WorkingProcedure.Trim()}%"))
                                     .Where(!string.IsNullOrEmpty(input.EquipmentModel), u => EF.Functions.Like(u.EquipmentModel, $"%{input.EquipmentModel.Trim()}%"))
                                     .Select(s=>new EquipmentBaseInfoExcelOutput
                                     .Select(s => new EquipmentBaseInfoExcelOutput
                                     {
                                         Id = s.Id,
                                         EquipmentId = s.EquipmentId,
@@ -146,7 +149,7 @@
                                         CuttingFluidChangeTime = s.CuttingFluidChangeTime,
                                         CuttingFluidChangeAlertThreshold = s.CuttingFluidChangeAlertThreshold,
                                         CreatedTime = s.CreatedTime.ConvertToDateTime(),
                                         UpdatedTime= s.UpdatedTime.ConvertToDateTime(),
                                         UpdatedTime = s.UpdatedTime.ConvertToDateTime(),
                                         TactTime = s.TactTime,
                                     })
                                     .Distinct()
@@ -174,13 +177,26 @@
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("add")]
        [UnitOfWork]
        public async Task Add(AddEquipmentBaseInfoInput input)
        {
            var isExist = await _equipmentBaseInfoRep.AnyAsync(u => u.EquipmentId == input.EquipmentId, false);
            if (isExist) throw Oops.Oh($"当前设备编号已存在,新增失败!");
            var equipmentBaseInfo = input.Adapt<EquipmentBaseInfo>();
            equipmentBaseInfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            await _equipmentBaseInfoRep.InsertAsync(equipmentBaseInfo);
            //新增维护日志
            var log = new Equipmentbaseinfolog()
            {
                EquipmentBaseInfoId = equipmentBaseInfo.Id,
                EquipmentID = equipmentBaseInfo.EquipmentId,
                OperatorType = EquipmentbaseinfoOperatorTypeEnum.新增设备,
                OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.新增设备).ToString(),
                OperatorContent = "新增设备:" + equipmentBaseInfo.EquipmentName,
            };
            await _equipmentbaseinfologRep.InsertAsync(log);
        }
        /// <summary>
@@ -191,11 +207,11 @@
        [HttpPost("delete")]
        public async Task Delete(DeleteEquipmentBaseInfoInput input)
        {
            string[] EquiArr = new string[] {"EOP10", "EOP20", "EOP30", "EOP35", "EOP40", "EOP50", "EOP60", "EOP70", "EOP80" };
            string[] EquiArr = new string[] { "EOP10", "EOP20", "EOP30", "EOP35", "EOP40", "EOP50", "EOP60", "EOP70", "EOP80" };
            var equipmentBaseInfo = await _equipmentBaseInfoRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            if(EquiArr.Contains(equipmentBaseInfo.EquipmentId)) throw Oops.Oh($"系统默认的设备不能进行删除!");
            if (EquiArr.Contains(equipmentBaseInfo.EquipmentId)) throw Oops.Oh($"系统默认的设备不能进行删除!");
            await _equipmentBaseInfoRep.DeleteAsync(equipmentBaseInfo);
        }
@@ -206,13 +222,14 @@
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("selectDelete")]
        public async Task SelectDelete(List<EquipmentBaseInfoInput>  input)
        public async Task SelectDelete(List<EquipmentBaseInfoInput> input)
        {
            StringBuilder builder = new StringBuilder();
            string[] EquiArr = new string[] { "EOP10", "EOP20", "EOP30", "EOP35", "EOP40", "EOP50", "EOP60", "EOP70", "EOP80" };
            foreach (EquipmentBaseInfoInput item in input)
            {
                if (EquiArr.Contains(item.EquipmentId)) {
                if (EquiArr.Contains(item.EquipmentId))
                {
                    if (string.IsNullOrEmpty(builder.ToString()))
                    {
@@ -227,7 +244,7 @@
            if (!string.IsNullOrEmpty(builder.ToString()))
            {
                throw Oops.Oh($"系统默认的设备【"+builder.ToString()+"】不能进行删除!");
                throw Oops.Oh($"系统默认的设备【" + builder.ToString() + "】不能进行删除!");
            }
            foreach (var item in input)
@@ -243,13 +260,42 @@
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("edit")]
        [UnitOfWork]
        public async Task Update(UpdateEquipmentBaseInfoInput input)
        {
            var isExist = await _equipmentBaseInfoRep.AnyAsync(u => u.Id == input.Id && u.EquipmentId == input.EquipmentId, false);
            if (!isExist) throw Oops.Oh($"设备编号不能进行变更,修改失败!");
            var isExistObj = await _equipmentBaseInfoRep.Where(u => u.Id == input.Id && u.EquipmentId == input.EquipmentId, false).FirstOrDefaultAsync();
            if (isExistObj == null) throw Oops.Oh($"设备编号不能进行变更,修改失败!");
            var equipmentBaseInfo = input.Adapt<EquipmentBaseInfo>();
            await _equipmentBaseInfoRep.UpdateAsync(equipmentBaseInfo,ignoreNullValues:false);
            await _equipmentBaseInfoRep.UpdateAsync(equipmentBaseInfo, ignoreNullValues: false);
            if (isExistObj.CuttingFluidChangeTime?.ToString("yyyy-MM-dd") != equipmentBaseInfo.CuttingFluidChangeTime?.ToString("yyyy-MM-dd"))
            {
                //新增维护日志
                var log = new Equipmentbaseinfolog()
                {
                    EquipmentBaseInfoId = equipmentBaseInfo.Id,
                    EquipmentID = equipmentBaseInfo.EquipmentId,
                    OperatorType = EquipmentbaseinfoOperatorTypeEnum.切削液更换,
                    OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.切削液更换).ToString(),
                    OperatorContent = "更换时间:" + equipmentBaseInfo.CuttingFluidChangeTime?.ToString("yyyy-MM-dd"),
                };
                await _equipmentbaseinfologRep.InsertAsync(log);
            }
            if (isExistObj.Detergentchangetime?.ToString("yyyy-MM-dd") != equipmentBaseInfo.Detergentchangetime?.ToString("yyyy-MM-dd"))
            {
                //新增维护日志
                var log = new Equipmentbaseinfolog()
                {
                    EquipmentBaseInfoId = equipmentBaseInfo.Id,
                    EquipmentID = equipmentBaseInfo.EquipmentId,
                    OperatorType = EquipmentbaseinfoOperatorTypeEnum.清洗液更换,
                    OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.清洗液更换).ToString(),
                    OperatorContent = "更换时间:" + equipmentBaseInfo.Detergentchangetime?.ToString("yyyy-MM-dd"),
                };
                await _equipmentbaseinfologRep.InsertAsync(log);
            }
        }
        /// <summary>
@@ -296,9 +342,9 @@
            KnifeToolnames.Add("EOP50");
            KnifeToolnames.Add("EOP60");
            var equipmentBaseInfos = await _equipmentBaseInfoRep.DetachedEntities
                    .Where(!string.IsNullOrEmpty(Type), u => (Type.ToUpper().Equals("QUALITY")?names.Contains(u.EquipmentId):false)||(Type.ToUpper().Equals("KNIFETOOL") ? KnifeToolnames.Contains(u.EquipmentId) : false))
                    .Where(!string.IsNullOrEmpty(Type), u => (Type.ToUpper().Equals("QUALITY") ? names.Contains(u.EquipmentId) : false) || (Type.ToUpper().Equals("KNIFETOOL") ? KnifeToolnames.Contains(u.EquipmentId) : false))
                                     .ProjectToType<EquipmentBaseInfoOutput>()
                                     .OrderBy(o=>o.EquipmentId)
                                     .OrderBy(o => o.EquipmentId)
                                     .ToListAsync();
            return equipmentBaseInfos;
        }
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/QueryYieldOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,291 @@
using Furion.TaskScheduler;
using iWare.Wms.Core.Enum;
using iWare.Wms.Core.Util.LowCode.Dto;
using System;
using System.ComponentModel;
namespace iWare.Wms.Application
{
    /// <summary>
    /// äº§é‡æŸ¥è¯¢è¾“出参数
    /// </summary>
    public class QueryYieldOutput
    {
        /// <summary>
        /// å·¥ä»¶å·
        /// </summary>
        public string WorkPieceID { get; set; }
        /// <summary>
        /// æˆå“ç 
        /// </summary>
        public virtual string OP80NewCode { get; set; }
        /// <summary>
        /// å½“前工序
        /// </summary>
        public string WorkingProcedureCurrent { get; set; }
        /// <summary>
        /// å½“前设备
        /// </summary>
        public string EquipmentID { get; set; }
        /// <summary>
        /// è®¾å¤‡åç§°
        /// </summary>
        public string EquipmentName { get; set; }
        /// <summary>
        /// å·¥åºä¸Šçº¿æ—¶é—´
        /// </summary>
        public DateTime? StartTime { get; set; }
        private DateTime? m_EndTime = null;
        /// <summary>
        /// å·¥åºä¸‹çº¿æ—¶é—´
        /// </summary>
        public DateTime? EndTime
        {
            get
            {
                if (m_EndTime == null)
                {
                    return null;
                }
                if (m_EndTime == Convert.ToDateTime("0001-01-01"))
                {
                    return null;
                }
                else
                {
                    return m_EndTime;
                }
            }
            set { m_EndTime = value; }
        }
        /// <summary>
        /// åŠ å·¥æ—¶é•¿
        /// </summary>
        public string TimeSceonds
        {
            get
            {
                if (EndTime == null || StartTime == null || EndTime == Convert.ToDateTime("0001-01-01") || StartTime == Convert.ToDateTime("0001-01-01"))
                {
                    return "";
                }
                TimeSpan ts = Convert.ToDateTime(EndTime) - Convert.ToDateTime(StartTime);
                return Convert.ToInt32(ts.TotalMinutes).ToString() + "min";
            }
        }
        /// <summary>
        /// è´¨é‡çŠ¶æ€
        /// </summary>
        public int QualityState { get; set; }
        /// <summary>
        /// è´¨é‡çŠ¶æ€åå­—
        /// </summary>
        public string QualityStateName
        {
            get
            {
                if (1 == QualityState)
                {
                    return "合格";
                }
                else if (2 == QualityState)
                {
                    return "不合格";
                }
                else if (3 == QualityState)
                {
                    return "疑似";
                }
                else
                {
                    return "";
                }
            }
        }
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼ˆSPC/生产)
        /// </summary>
        public string OperationType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public string OperationTypeHand
        {
            get
            {
                string str = "";
                if (string.IsNullOrEmpty(OperationType))
                {
                    str = "其他";
                }
                else
                {
                    str = OperationType;
                }
                return str;
            }
        }
        /// <summary>
        /// è´¨é‡ä¿¡æ¯id
        /// </summary>
        public long QualityDataInfoID { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long Id { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string CreateUserName { get; set; }
    }
    /// <summary>
    /// äº§é‡æŸ¥è¯¢å¯¼å‡ºè¾“出参数
    /// </summary>
    [Description("产量查询")]
    public class ExportYieldOutput
    {
        /// <summary>
        /// å·¥ä»¶å·
        /// </summary>
        [Description("工件号")]
        public string WorkPieceID { get; set; }
        /// <summary>
        /// å½“前工序
        /// </summary>
        [Description("当前工序")]
        public string WorkingProcedureCurrent { get; set; }
        /// <summary>
        /// è®¾å¤‡åç§°
        /// </summary>
        [Description("设备名称")]
        public string EquipmentName { get; set; }
        /// <summary>
        /// å·¥åºä¸Šçº¿æ—¶é—´
        /// </summary>
        [Description("上线时间")]
        public string StartTime { get; set; }
        private string m_EndTime = "";
        /// <summary>
        /// å·¥åºä¸‹çº¿æ—¶é—´
        /// </summary>
        [Description("下线时间")]
        public string EndTime
        {
            get
            {
                if (string.IsNullOrEmpty(m_EndTime))
                {
                    return "";
                }
                if (m_EndTime.Contains("0001-01-01"))
                {
                    return "";
                }
                else
                {
                    return m_EndTime;
                }
            }
            set { m_EndTime = value; }
        }
        /// <summary>
        /// åŠ å·¥æ—¶é•¿
        /// </summary>
        [Description("加工时长")]
        public string TimeSceonds
        {
            get
            {
                if (string.IsNullOrEmpty(EndTime) || string.IsNullOrEmpty(StartTime))
                {
                    return "";
                }
                TimeSpan ts = Convert.ToDateTime(EndTime) - Convert.ToDateTime(StartTime);
                return Convert.ToInt32(ts.TotalMinutes).ToString() + "min";
            }
        }
        /// <summary>
        /// è´¨é‡çŠ¶æ€
        /// </summary>
        public int QualityState { get; set; }
        /// <summary>
        /// è´¨é‡çŠ¶æ€åç§°
        /// </summary>
        [Description("质量状态")]
        public string QualityStateName
        {
            get
            {
                if (1 == QualityState)
                {
                    return "合格";
                }
                else if (2 == QualityState)
                {
                    return "不合格";
                }
                else if (3 == QualityState)
                {
                    return "疑似";
                }
                else
                {
                    return "";
                }
            }
        }
        /// <summary>
        /// æˆå“ç 
        /// </summary>
        [Description("成品码")]
        public string OP80NewCode { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long Id { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        [Description("数据来源")]
        public string CreateUserName { get; set; }
    }
}
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs
@@ -250,6 +250,116 @@
            return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
        }
        #region äº§é‡æŸ¥è¯¢ [Editby shaocx,2024-06-08]
        /// <summary>
        /// äº§é‡æŸ¥è¯¢
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("queryYield")]
        public async Task<PageResult<QueryYieldOutput>> QueryYield([FromQuery] WorkPieceProcessSearch input)
        {
            var workPieceProcesss = await (from process in _workPieceProcessRep.DetachedEntities
                                           join baseinfo in _equipmentBaseInfoRep.DetachedEntities on process.EquipmentID equals baseinfo.EquipmentId into joinedEmpty
                                           from baseinfo2 in joinedEmpty.DefaultIfEmpty()
                                           join workPiece in _workPieceInfoRep.DetachedEntities on process.WorkPieceID equals workPiece.WorkPieceID into joined2Empty
                                           from workPiece2 in joined2Empty.DefaultIfEmpty()
                                           where process.IsDeleted == false && process.WorkPieceID.Contains(string.IsNullOrEmpty(input.WorkPieceID) ? "" : input.WorkPieceID)
                     && process.QualityState == (input.QualityState.HasValue ? input.QualityState.Value : process.QualityState)
                     && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID)
                     && process.WorkingProcedureCurrent == (string.IsNullOrEmpty(input.WorkingProcedureCurrent) ? process.WorkingProcedureCurrent : input.WorkingProcedureCurrent)
                     && workPiece2.OP80NewCode == (string.IsNullOrEmpty(input.OP80NewCode) ? workPiece2.OP80NewCode : input.OP80NewCode)
                     && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID)
                     && process.OperationType == (string.IsNullOrEmpty(input.OperationType) ? process.OperationType : input.OperationType)
                     && !string.IsNullOrEmpty(process.WorkPieceID)
                     && process.StartTime >= (input.StartTimeBeginTime.HasValue ? input.StartTimeBeginTime : DateTime.MinValue)
                     && process.StartTime <= (input.StartTimeEndTime.HasValue ? input.StartTimeEndTime : DateTime.MaxValue)
                                           select new WorkPieceProcessOutput
                                           {
                                               Id = process.Id,
                                               WorkPieceID = process.WorkPieceID,
                                               EquipmentID = process.EquipmentID,
                                               EquipmentName = (baseinfo2 == null ? "" : baseinfo2.EquipmentName),
                                               OP80NewCode = workPiece2.OP80NewCode,
                                               WorkingProcedureCurrent = process.WorkingProcedureCurrent,
                                               StartTime = process.StartTime,
                                               EndTime = process.EndTime,
                                               QualityState = process.QualityState,
                                               QualityDataInfoID = process.QualityDataInfoID,
                                               OperationType = process.OperationType,
                                               CreateUserName = process.CreatedUserName
                                           }).OrderBy(o => o.StartTime)
             .ProjectToType<QueryYieldOutput>()
              .ToADPagedListAsync(input.PageNo, input.PageSize);
            return workPieceProcesss;
        }
        /// <summary>
        /// å¯¼å‡ºäº§é‡æŸ¥è¯¢
        /// </summary>
        /// <param name="input"></param>
        /// <returns>导出的Excel文件</returns>
        [HttpGet("exportYield")]
        public async Task<IActionResult> ExportYield([FromQuery] WorkPieceProcessSearch input)
        {
            var workPieceMachiningInfos = await (from process in _workPieceProcessRep.DetachedEntities
                                                 join baseinfo in _equipmentBaseInfoRep.DetachedEntities
                                               on process.EquipmentID equals baseinfo.EquipmentId into joinedEmpty
                                                 from baseinfo2 in joinedEmpty.DefaultIfEmpty()
                                                 join workPiece in _workPieceInfoRep.DetachedEntities on process.WorkPieceID equals workPiece.WorkPieceID into joined2Empty
                                                 from workPiece2 in joined2Empty.DefaultIfEmpty()
                                                 where process.IsDeleted == false && process.WorkPieceID.Contains(string.IsNullOrEmpty(input.WorkPieceID) ? "" : input.WorkPieceID)
                    && process.QualityState == (input.QualityState.HasValue ? input.QualityState.Value : process.QualityState)
                                                 && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID)
                                                 && process.WorkingProcedureCurrent == (string.IsNullOrEmpty(input.WorkingProcedureCurrent) ? process.WorkingProcedureCurrent : input.WorkingProcedureCurrent)
                                                 && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID)
                                                 && workPiece2.OP80NewCode == (string.IsNullOrEmpty(input.OP80NewCode) ? workPiece2.OP80NewCode : input.OP80NewCode)
                    && process.OperationType == (string.IsNullOrEmpty(input.OperationType) ? process.OperationType : input.OperationType)
                                                && !string.IsNullOrEmpty(process.WorkPieceID)
                    && process.StartTime >= (input.StartTimeBeginTime.HasValue ? input.StartTimeBeginTime : DateTime.MinValue)
                    && process.StartTime <= (input.StartTimeEndTime.HasValue ? input.StartTimeEndTime : DateTime.MaxValue)
                                                 select new WorkPieceProcessExcelOutput
                                                 {
                                                     OP80NewCode = workPiece2.OP80NewCode,
                                                     Id = process.Id,
                                                     WorkPieceID = process.WorkPieceID,
                                                     //EquipmentID = process.EquipmentID,
                                                     EquipmentName = (baseinfo2 == null ? "" : baseinfo2.EquipmentName),
                                                     WorkingProcedureCurrent = process.WorkingProcedureCurrent,
                                                     StartTime = process.StartTime.ToString(),
                                                     EndTime = process.EndTime.ToString(),
                                                     //QualityState = process.QualityState,
                                                     CreateUserName = process.CreatedUserName
                                                 }).OrderBy(o => o.StartTime).Distinct()
            .ProjectToType<WorkPieceProcessExcelOutput>()
             .ToListAsync();
            foreach (WorkPieceProcessExcelOutput item in workPieceMachiningInfos)
            {
                item.StartTime = string.IsNullOrEmpty(item.StartTime) ? "" : Convert.ToDateTime(item.StartTime).ToString("yyyy-MM-dd hh:mm:ss");
                item.EndTime = string.IsNullOrEmpty(item.EndTime) ? "" : Convert.ToDateTime(item.EndTime).ToString("yyyy-MM-dd hh:mm:ss");
            }
            MemoryStream ms = new();
            DataConvertUtil.ToExcelData(workPieceMachiningInfos, _sysDictTypeRep, _sysDictDataRep, out List<string> headers,
                out List<List<object>> data, out string sheetName);
            ExcelUtil.ToExcel(headers, data, sheetName, ms);
            ms.Position = 0;
            var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
        }
        #endregion
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢å·¥ä»¶åŠ å·¥(工件信息表)
        /// </summary>
iWara.SCADA.Code/iWare.Wms.Application/iWare.Wms.Application.xml
@@ -1865,7 +1865,7 @@
            è®¾å¤‡åŸºç¡€ä¿¡æ¯ç®¡ç†æœåŠ¡
            </summary>
        </member>
        <member name="M:iWare.Wms.Application.EquipmentBaseInfoService.#ctor(Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.EquipmentBaseInfo,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.V_GetEquipmentAlert,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.SysDictType,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.SysDictData,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.EquipmentCurrentMonitor,Furion.DatabaseAccessor.MasterDbContextLocator})">
        <member name="M:iWare.Wms.Application.EquipmentBaseInfoService.#ctor(Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.Equipmentbaseinfolog,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.EquipmentBaseInfo,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.V_GetEquipmentAlert,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.SysDictType,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.SysDictData,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{iWare.Wms.Core.EquipmentCurrentMonitor,Furion.DatabaseAccessor.MasterDbContextLocator})">
            <summary>
            è®¾å¤‡åŸºç¡€ä¿¡æ¯æž„造
            </summary>
@@ -14901,6 +14901,146 @@
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="T:iWare.Wms.Application.QueryYieldOutput">
            <summary>
            äº§é‡æŸ¥è¯¢è¾“出参数
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.WorkPieceID">
            <summary>
            å·¥ä»¶å·
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.OP80NewCode">
            <summary>
            æˆå“ç 
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.WorkingProcedureCurrent">
            <summary>
            å½“前工序
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.EquipmentID">
            <summary>
            å½“前设备
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.EquipmentName">
            <summary>
            è®¾å¤‡åç§°
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.StartTime">
            <summary>
            å·¥åºä¸Šçº¿æ—¶é—´
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.EndTime">
            <summary>
            å·¥åºä¸‹çº¿æ—¶é—´
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.TimeSceonds">
            <summary>
            åŠ å·¥æ—¶é•¿
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.QualityState">
            <summary>
            è´¨é‡çŠ¶æ€
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.QualityStateName">
            <summary>
            è´¨é‡çŠ¶æ€åå­—
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.OperationType">
            <summary>
            æ“ä½œç±»åž‹ï¼ˆSPC/生产)
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.OperationTypeHand">
            <summary>
            æ“ä½œç±»åž‹
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.QualityDataInfoID">
            <summary>
            è´¨é‡ä¿¡æ¯id
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.Id">
            <summary>
            Id主键
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.QueryYieldOutput.CreateUserName">
            <summary>
            åˆ›å»ºäºº
            </summary>
        </member>
        <member name="T:iWare.Wms.Application.ExportYieldOutput">
            <summary>
            äº§é‡æŸ¥è¯¢å¯¼å‡ºè¾“出参数
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.WorkPieceID">
            <summary>
            å·¥ä»¶å·
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.WorkingProcedureCurrent">
            <summary>
            å½“前工序
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.EquipmentName">
            <summary>
            è®¾å¤‡åç§°
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.StartTime">
            <summary>
            å·¥åºä¸Šçº¿æ—¶é—´
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.EndTime">
            <summary>
            å·¥åºä¸‹çº¿æ—¶é—´
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.TimeSceonds">
            <summary>
            åŠ å·¥æ—¶é•¿
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.QualityState">
            <summary>
            è´¨é‡çŠ¶æ€
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.QualityStateName">
            <summary>
            è´¨é‡çŠ¶æ€åç§°
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.OP80NewCode">
            <summary>
            æˆå“ç 
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.Id">
            <summary>
            Id主键
            </summary>
        </member>
        <member name="P:iWare.Wms.Application.ExportYieldOutput.CreateUserName">
            <summary>
            åˆ›å»ºäºº
            </summary>
        </member>
        <member name="T:iWare.Wms.Application.WorkPieceProcessDto">
            <summary>
            å·¥ä»¶åŠ å·¥è¿½æº¯è¾“å‡ºå‚æ•°
@@ -15558,6 +15698,20 @@
            <param name="input"></param>
            <returns>导出的Excel文件</returns>
        </member>
        <member name="M:iWare.Wms.Application.WorkPieceProcessService.QueryYield(iWare.Wms.Application.WorkPieceProcessSearch)">
            <summary>
            äº§é‡æŸ¥è¯¢
            </summary>
            <param name="input"></param>
            <returns></returns>
        </member>
        <member name="M:iWare.Wms.Application.WorkPieceProcessService.ExportYield(iWare.Wms.Application.WorkPieceProcessSearch)">
            <summary>
            å¯¼å‡ºäº§é‡æŸ¥è¯¢
            </summary>
            <param name="input"></param>
            <returns>导出的Excel文件</returns>
        </member>
        <member name="M:iWare.Wms.Application.WorkPieceProcessService.WorkPieceInfoMachiningPage(iWare.Wms.Application.WorkPieceProcessSearch)">
            <summary>
            åˆ†é¡µæŸ¥è¯¢å·¥ä»¶åŠ å·¥(工件信息表)
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/Equipmentbaseinfolog.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
/*
 * @author : æ‚¨çš„名字
 * @date : 2024/6/9下午3:33:04
 * @desc : è®¾å¤‡ç»´æŠ¤è®°å½•
 */
namespace iWare.Wms.Core
{
    /// <summary>
    /// è®¾å¤‡ç»´æŠ¤è®°å½•
    /// </summary>
    [Table("equipmentbaseinfolog")]
    [Comment("设备维护记录")]
    public class Equipmentbaseinfolog : DEntityBase
    {
        /// <summary>
        /// è®¾å¤‡ID
        /// </summary>
        [Comment("设备ID")]
        [Required]
        public long EquipmentBaseInfoId { get; set; }
        /// <summary>
        /// è®¾å¤‡ç¼–号
        /// </summary>
        [Comment("设备编号")]
        [MaxLength(255)]
        public string EquipmentID { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹ID
        /// </summary>
        [Comment("操作类型ID")]
        [Required]
        public EquipmentbaseinfoOperatorTypeEnum OperatorType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        [Comment("操作类型")]
        [Required]
        [MaxLength(255)]
        public string OperatorTypeName { get; set; }
        /// <summary>
        /// æ“ä½œå†…容
        /// </summary>
        [Comment("操作内容")]
        [MaxLength(255)]
        public string OperatorContent { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [Comment("备注")]
        [MaxLength(255)]
        public string Remark { get; set; }
    }
}
iWara.SCADA.Code/iWare.Wms.Core/Enum/EquipmentbaseinfoOperatorTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
using System.ComponentModel;
namespace iWare.Wms.Core
{
    /// <summary>
    /// è®¾å¤‡ç»´æŠ¤è®°å½•操作类型
    /// </summary>
    public enum EquipmentbaseinfoOperatorTypeEnum
    {
        /// <summary>
        /// æ–°å¢žè®¾å¤‡
        /// </summary>
        [Description("新增设备")]
        æ–°å¢žè®¾å¤‡ = 0,
        /// <summary>
        /// æ¸…洗液更换
        /// </summary>
        [Description("清洗液更换")]
        æ¸…洗液更换 = 1,
        /// <summary>
        /// æ¸…洗液添加
        /// </summary>
        [Description("清洗液添加")]
        æ¸…洗液添加 = 2,
        /// <summary>
        /// åˆ‡å‰Šæ¶²æ›´æ¢
        /// </summary>
        [Description("切削液更换")]
        åˆ‡å‰Šæ¶²æ›´æ¢ = 3,
        /// <summary>
        /// åˆ‡å‰Šæ¶²æ·»åŠ 
        /// </summary>
        [Description("切削液添加")]
        åˆ‡å‰Šæ¶²æ·»åŠ  = 4
    }
}
iwara-scada-web/public/index.html
@@ -24,7 +24,7 @@
    <div class="loading-wrp">
      <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
    </div>
    <div style="display: flex; justify-content: center; align-items: center;">iWare.Wms</div>
    <div style="display: flex; justify-content: center; align-items: center;">奥普自动化</div>
  </div>
</div>
<!-- require cdn assets js -->
iwara-scada-web/src/utils/domUtil.js
@@ -16,4 +16,4 @@
  }
}
export const domTitle = 'iWare.Wms'
export const domTitle = '奥普自动化'
iwara-scada-web/src/views/main/EquipmentBaseInfo/editForm.vue
@@ -120,6 +120,7 @@
<script>
import moment from 'moment'
import { EquipmentBaseInfoEdit } from '@/api/modular/main/EquipmentBaseInfoManage'
import { dateFormat } from '@/utils/util'
export default {
  data() {
    return {
@@ -179,6 +180,10 @@
          // knifeToolChangeTime: record.knifeToolChangeTime != null ? moment(record.knifeToolChangeTime, 'YYYY-MM-DD') : ''
          // knifeToolChangeTime:moment(record.knifeToolChangeTime != null ? record.knifeToolChangeTime : "", 'YYYY-MM-DD'),
        })
        //触发事件
        this.onChangedetergentchangetime(null,record.detergentchangetime != null ? dateFormat(record.detergentchangetime, 'YYYY-mm-dd') : '');
        this.onChangecuttingFluidchangetime(null,record.cuttingFluidChangeTime != null ? dateFormat(record.cuttingFluidChangeTime, 'YYYY-mm-dd') : '');
      })
      // this.form.getFieldDecorator('detergentchangetime', { initialValue: moment(record.detergentchangetime, 'YYYY-MM-DD') })
      // this.detergentchangetimeDateString = moment(record.detergentchangetime).format('YYYY-MM-DD')
@@ -226,6 +231,7 @@
      })
    },
    onChangedetergentchangetime(date, dateString) {
      //debugger
      this.detergentchangetimeDateString = dateString
    },