schangxiang@126.com
2025-05-14 874ddf20325b535872488905caa648beaf9ff024
管件提交
已修改6个文件
247 ■■■■ 文件已修改
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/MesOrderResponse.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkPlan/IWorkPlanRepository.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkPlanRepository.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/MesOrderResponse.cs
@@ -15,14 +15,14 @@
        [JsonPropertyName("data")]
        public object Data { get; set; }
        [JsonPropertyName("fail")]
        public bool Fail { get; set; }
        //[JsonPropertyName("fail")]
        //public bool Fail { get; set; }
        [JsonPropertyName("mesg")]
        public string Mesg { get; set; }
        [JsonPropertyName("message")]
        public string Message { get; set; }
        [JsonPropertyName("success")]
        public bool Success { get; set; }
        //[JsonPropertyName("success")]
        //public bool Success { get; set; }
        [JsonPropertyName("time")]
        public DateTime Time { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs
@@ -1,5 +1,7 @@
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan;
using CMS.Plugin.PipeLineLems.Domain.WorkPlan;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Users;
@@ -54,4 +56,23 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkPlanInput input);
    /// <summary>
    /// 根据条件获取作业计划表列表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    ///  根据条件获取单个作业计划表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
@@ -19,6 +19,12 @@
using CmsQueryExtensions.Entitys;
using CMS.Unit.RuntimeValue.Abstractions;
using CMS.Extensions.Variable;
using CMS.Plugin.TraceManagement.Abstractions.Models.Traces;
using CMS.Plugin.ProcessManagement.Abstractions;
using KissUtil.Extensions;
using CMS.Plugin.TraceManagement.Abstractions;
using CMS.Plugin.ProductManagement.Abstractions.Models;
using CMS.Plugin.MaterialManagement.Abstractions;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
@@ -36,6 +42,11 @@
        //3、写入 分拣变量
        VariableService _variableService = _serviceProvider.GetRequiredService<VariableService>();
        var _workSectionManager = _serviceProvider.GetRequiredService<IWorkSectionManager>();
        var _workStationManager = _serviceProvider.GetRequiredService<IWorkStationManager>();
        var traceProvider = _serviceProvider.GetRequiredService<ITraceProvider>();
        var materialProvider = _serviceProvider.GetRequiredService<IMaterialProvider>();
        var workPlanAppService = _serviceProvider.GetRequiredService<IWorkPlanAppService>();
        Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?>
                    {
@@ -44,13 +55,69 @@
                        { "分拣人", myCurrentUser.UserAccount }
                    };
        _variableService.WriteValueAsync(keyValuePairs);
        //根据工序名获取工序对象
        var workSection = await _workSectionManager.GetByNameAsync("分拣工序");
        var workStation = await _workStationManager.GetByNameAsync("分拣工位");
        //写入追溯报表
        var finishTime = DateTime.Now;
        TraceModel traceModel = new TraceModel()
        {
            SerialNumber = input.PipeSpecCode,
            WorkSectionId = workSection.Id,
            WorkSectionName = workSection.Name,
            WorkStationName = workStation.Name,
            FinishTime = finishTime,
            IsQualified = true,
            UnqualifiedReason = "",
            ProductModel = "",
            ProductName = "",
        };
        traceModel.Params = new List<TraceParamModel>();
        foreach (var item in workSection.ProcessParameters)
        {
            var value = "ssss";
            traceModel.Params.Add(new TraceParamModel()
            {
                Key = item.Key,
                Value = value.SafeString()
            });
        }
        //物料参数列表
        var firstWorkPlans = await workPlanAppService.GetListByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode);
        var firstWorkPlan = await workPlanAppService.GetSingleByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode);
        var rawPipe_DataIdentifier = await materialProvider.FindByNameAsync("分拣原料管标识");
        var rawPipe_MaterialMode = await materialProvider.FindByNameAsync("分拣原料管型号");
        List<TraceMaterialModel> _MaterialParams = new List<TraceMaterialModel>();
        _MaterialParams.Add(new TraceMaterialModel()
        {
            Key = "分拣原料管标识",
            Quantity = 1,
            MaterialId = rawPipe_DataIdentifier.MaterialId,
            MaterialDetailId = rawPipe_DataIdentifier.MaterialDetails.First().Id,
            Value = firstWorkPlan.DataIdentifier,
        });
        _MaterialParams.Add(new TraceMaterialModel()
        {
            Key = "分拣原料管型号",
            Quantity = 1,
            MaterialId = rawPipe_MaterialMode.MaterialId,
            MaterialDetailId = rawPipe_MaterialMode.MaterialDetails.First().Id,
            Value = firstWorkPlan.MaterialMode
        });
        traceModel.MaterialParams = _MaterialParams;
        await traceProvider.CreateTraceAsync(traceModel);
        var response = new MesOrderResponse
        {
            Code = "000000",
            Code = "200",
            Data = "",
            Fail = false,
            Mesg = "处理成功",
            Success = true,
            Message = "处理成功",
            Time = DateTime.UtcNow
        };
        return response;
@@ -262,9 +329,7 @@
        {
            Code = "000000",
            Data = orderModels,
            Fail = false,
            Mesg = "处理成功",
            Success = true,
            Message = "处理成功",
            Time = DateTime.UtcNow
        };
        return response;
@@ -387,10 +452,8 @@
        // 返回结果
        var response = new MesOrderResponse
        {
            Code = "000000",
            Fail = false,
            Mesg = "叫料成功",
            Success = true,
            Code = "200",
            Message = "叫料成功",
            Time = DateTime.UtcNow
        };
        return response;
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs
@@ -19,16 +19,16 @@
/// </summary> 
public class WorkPlanAppService : CMSPluginAppService, IWorkPlanAppService
{
    private readonly IWorkPlanRepository workPlanRepository;
    private readonly IWorkPlanRepository _workPlanRepository;
    private readonly SharedService _sharedService;
    private readonly IServiceProvider _serviceProvider;
    /// <summary> 
    /// Initializes a new instance of the <see cref="WorkPlanAppService"/> class. 
    /// </summary> 
    /// <param name="WorkPlanRepository">The task job repository.</param> 
    public WorkPlanAppService(IWorkPlanRepository _WorkPlanRepository, SharedService sharedService, IServiceProvider serviceProvider)
    public WorkPlanAppService(IWorkPlanRepository workPlanRepository, SharedService sharedService, IServiceProvider serviceProvider)
    {
        workPlanRepository = _WorkPlanRepository;
        _workPlanRepository = workPlanRepository;
        _sharedService = sharedService;
        _serviceProvider = serviceProvider;
    }
@@ -40,7 +40,7 @@
    /// <returns></returns> 
    public virtual async Task<WorkPlanDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WorkPlan, WorkPlanDto>(await workPlanRepository.GetAsync(id));
        return ObjectMapper.Map<WorkPlan, WorkPlanDto>(await _workPlanRepository.GetAsync(id));
    }
    /// <summary> 
@@ -51,7 +51,7 @@
    /// <returns></returns> 
    public virtual async Task<List<WorkPlan>> FindByDataIdentifierAsync(string dataIdentifier)
    {
        return await workPlanRepository.FindByDataIdentifierAsync(dataIdentifier);
        return await _workPlanRepository.FindByDataIdentifierAsync(dataIdentifier);
    }
    /// <summary> 
@@ -75,8 +75,8 @@
        #endregion
        var count = await workPlanRepository.GetCountAsync(whereConditions);
        var list = await workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        var count = await _workPlanRepository.GetCountAsync(whereConditions);
        var list = await _workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WorkPlanDto>(count, ObjectMapper.Map<List<WorkPlan>, List<WorkPlanDto>>(list));
    }
@@ -114,13 +114,13 @@
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await workPlanRepository.NameExistAsync(input.TaskCode);
        var exist = await _workPlanRepository.NameExistAsync(input.TaskCode);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskCode]);
        }
        var maxSort = await workPlanRepository.GetMaxSortAsync();
        var maxSort = await _workPlanRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WorkPlanCreateDto, WorkPlan>(input);
@@ -128,7 +128,7 @@
        insertObj.CreatorName = "SuperAdmin";
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await workPlanRepository.InsertAsync(insertObj);
        await _workPlanRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
        //{ 
@@ -149,8 +149,8 @@
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await workPlanRepository.GetAsync(id);
        var exist = await workPlanRepository.NameExistAsync(input.TaskCode, updateObj.Id);
        var updateObj = await _workPlanRepository.GetAsync(id);
        var exist = await _workPlanRepository.NameExistAsync(input.TaskCode, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskCode]);
@@ -196,7 +196,7 @@
        updateObj.Remark = input.Remark;
        await workPlanRepository.UpdateAsync(updateObj);
        await _workPlanRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WorkPlan, WorkPlanDto>(updateObj);
    }
@@ -248,7 +248,7 @@
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id)
    {
        return workPlanRepository.DeleteAsync(id);
        return _workPlanRepository.DeleteAsync(id);
    }
    /// <summary> 
@@ -272,7 +272,7 @@
    /// <returns></returns> 
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await workPlanRepository.GetListAsync(null, nameof(WorkPlan.Sort));
        var list = await _workPlanRepository.GetListAsync(null, nameof(WorkPlan.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
@@ -299,7 +299,7 @@
            }
        }
        await workPlanRepository.UpdateManyAsync(list);
        await _workPlanRepository.UpdateManyAsync(list);
    }
    /// <summary> 
@@ -492,7 +492,7 @@
        #endregion
        var list = await workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var list = await _workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WorkPlan>, List<WorkPlanDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -528,4 +528,28 @@
        return Task.CompletedTask;
    }
    /// <summary>
    /// 根据条件获取作业计划表列表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await _workPlanRepository.GetListByFilterAsync(whereConditions);
    }
    /// <summary>
    ///  根据条件获取单个作业计划表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        return await _workPlanRepository.GetSingleByFilterAsync(whereConditions, is​MultipleThrowException);
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkPlan/IWorkPlanRepository.cs
@@ -59,4 +59,23 @@
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WorkPlan, bool>>> whereConditions, CancellationToken cancellationToken = default); 
    /// <summary>
    /// 根据条件获取作业计划表列表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    ///  根据条件获取单个作业计划表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkPlanRepository.cs
@@ -4,6 +4,7 @@
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
@@ -127,4 +128,55 @@
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
    /// <summary>
    /// 根据条件获取作业计划表列表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
             .IncludeDetails()
            .WhereIf(whereConditions != null, whereConditions)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    ///  根据条件获取单个作业计划表
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        if (is​MultipleThrowException)
        {
            var entitys = await (await GetDbSetAsync())
                .IncludeDetails()
          .WhereIf(whereConditions != null, whereConditions)
          .Where(x => !x.IsDeleted)
          .OrderByDescending(x => x.CreationTime)
          .ToListAsync(GetCancellationToken(cancellationToken));
            if (entitys?.Count > 1)
            {
                throw new UserFriendlyException("查询到多条记录");
            }
            return entitys?.FirstOrDefault();
        }
        else
        {
            return await (await GetDbSetAsync())
               .IncludeDetails()
          .WhereIf(whereConditions != null, whereConditions)
          .Where(x => !x.IsDeleted)
          .OrderByDescending(x => x.CreationTime)
          .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
        }
    }
}