Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpRepairApply.cs
This commit is contained in:
2023-05-19 17:39:49 +08:00
372 changed files with 37487 additions and 54458 deletions

View File

@@ -8,11 +8,11 @@ using JNPF.Common.Enums;
using JNPF.Common.Security;
using JNPF.FriendlyException;
using SqlSugar;
using Tnb.Common.Contracts;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Utils;
using Mapster;
using JNPF.Common.Contracts;
using JNPF.Common.Extension;
namespace Tnb.EquipMgr
{
@@ -46,19 +46,8 @@ namespace Tnb.EquipMgr
{
var pk = id;
TDest entity = new();
entity.id = SnowflakeIdHelper.NextId();
if (!PropertySet<TDest>.ValueFactories.TryGetValue(mColumnName, out Action<object, object>? setGroupIdAction))
{
setGroupIdAction = PropertySet<TDest>.CreateSetPropertyValueAction(mColumnName);
PropertySet<TDest>.ValueFactories.Add(mColumnName, setGroupIdAction);
}
setGroupIdAction(entity, input.item_group_id);
if (!PropertySet<TDest>.ValueFactories.TryGetValue(name, out Action<object, object>? setAction))
{
setAction = PropertySet<TDest>.CreateSetPropertyValueAction(name);
PropertySet<TDest>.ValueFactories.Add(name, setAction);
}
setAction(entity, pk);
entity.PropertySetValue(mColumnName, input.item_group_id);
entity.PropertySetValue(name, pk);
entities.Add(entity);
}
}
@@ -66,19 +55,27 @@ namespace Tnb.EquipMgr
if (row < 1) throw Oops.Oh(ErrorCode.COM1000);
}
protected async Task Delete<T>(Expression<Func<T, bool>> delFilter) where T : BaseEntity<string>, new()
{
var row = await _db.Deleteable<T>().Where(delFilter).ExecuteCommandAsync();
if (row < 1) throw Oops.Oh(ErrorCode.COM1002);
}
protected async Task<dynamic> GetListByMasterId<TRelaction, TDest, TOutput>(string masterId,
protected async Task<dynamic> GetListById<TRelaction, TDest, TOutput>(string masterId,
Expression<Func<TRelaction, bool>> masterFilterExp,
Expression<Func<TRelaction, string>> masterSelector,
Expression<Func<TDest, bool>> relactionFilterExp)
Expression<Func<TDest, object>> srcMap,
Expression<Func<TOutput, object>> destMap
) where TDest : BaseEntity<string>, new()
{
var config = new TypeAdapterConfig();
config.ForType<TDest, TOutput>();
config.ForType<TDest, TOutput>().Map(destMap, srcMap);
var list = new List<TOutput>();
var itemIds = await _db.Queryable<TRelaction>().Where(masterFilterExp).Select(masterSelector).ToListAsync();
if (itemIds?.Count > 0)
{
var items = await _db.Queryable<TDest>().Where(relactionFilterExp).ToListAsync();
var items = await _db.Queryable<TDest>().Where(it=>itemIds.Contains(it.id)).ToListAsync();
list = items.Adapt<List<TOutput>>();
}
return list;

View File

@@ -9,6 +9,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\BasicData\Tnb.BasicData.Interfaces\Tnb.BasicData.Interfaces.csproj" />
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.csproj" />
<ProjectReference Include="..\Tnb.EquipMgr.Interfaces\Tnb.EquipMgr.Interfaces.csproj" />
</ItemGroup>

View File

@@ -15,10 +15,9 @@ using JNPF.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.Common.Contracts;
using JNPF.Common.Contracts;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Entities.Entity;
using Tnb.EquipMgr.Interfaces;
namespace Tnb.EquipMgr

View File

@@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells.Drawing;
using JNPF.Common.Dtos.VisualDev;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Logging;
using JNPF.VisualDev;
using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Interfaces;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Interfaces;
namespace Tnb.EquipMgr
{
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
[OverideVisualDev(ModuleId)]
public class ToolMoldMaintainPlanService : BaseMoldMaintainService, IOverideVisualDevService, IToolMoldMaintainPlanService, IDynamicApiController, ITransient
{
private const string ModuleId = "26165768858389";
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
public ToolMoldMaintainPlanService(ISqlSugarRepository<ToolMoldMaintainPlan> repository, IRunService runService, IVisualDevService visualDevService) : base(repository.AsSugarClient())
{
_db = repository.AsSugarClient();
_runService = runService;
_visualDevService = visualDevService;
OverideFuncs.CreateAsync = Create;
}
private async Task<dynamic> Create(VisualDevModelDataCrInput visualDevModelDataCrInput)
{
try
{
visualDevModelDataCrInput.data[nameof(ToolMoldMaintainPlan.plan_code)] = $"JHDM{DateTime.Now:yyyyMMddmmss}";
visualDevModelDataCrInput.data[nameof(ToolMoldMaintainPlan.status)] = DictConst.UnMaintainStatusCode;
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
await _runService.Create(templateEntity, visualDevModelDataCrInput);
}
catch (Exception ex)
{
Log.Error("新增时出错", ex);
}
return await Task.FromResult("ok");
}
[HttpGet]
public async Task<dynamic> GetMoldListByPlanId(RelevanceMoldFromPlanInput input)
{
var list = await _db.Queryable<ToolMoldMaintainPlanRelation>().Where(it => it.maintain_plan_id == input.item_group_id).ToListAsync();
if (list?.Count > 0)
{
var ids = list.Select(it => it.mold_id).Distinct().ToList();
if (ids?.Count > 0)
{
}
}
return null;
}
/// <summary>
/// 计划关联模具
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task RelevanceMoldFromPlan(RelevanceMoldFromPlanInput input) =>
await Relevance<RelevanceMoldFromPlanInput, ToolMoldMaintainPlanRelation>(input, nameof(ToolMoldMaintainPlanRelation.maintain_plan_id), nameof(ToolMoldMaintainPlanRelation.mold_id), it => it.maintain_plan_id == input.item_group_id);
/// <summary>
/// 删除计划与模具关联关系
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task DeleteMold(RelevanceMoldFromPlanInput input) =>
await Delete<ToolMoldMaintainPlanRelation>(it => it.maintain_plan_id == input.item_group_id && input.ids.Contains(it.mold_id));
}
}

View File

@@ -3,15 +3,20 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aop.Api.Domain;
using Aspose.Cells.Drawing;
using JNPF.Common.Core.Manager;
using JNPF.Common.Enums;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.Logging;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using SqlSugar;
using Tnb.BasicData;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Interfaces;
@@ -23,12 +28,14 @@ namespace Tnb.EquipMgr
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class ToolMoldMaintainRuleService : BaseMoldMaintainService, IToolMoldMaintainRuleService, IDynamicApiController, ITransient
public class ToolMoldMaintainRuleService : IToolMoldMaintainRuleService, IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
public ToolMoldMaintainRuleService(ISqlSugarRepository<ToolMoldMaintainRule> repository) : base(repository.AsSugarClient())
private readonly IUserManager _userManager;
public ToolMoldMaintainRuleService(ISqlSugarRepository<ToolMoldMaintainRule> repository, IUserManager userManager)
{
_db = repository.AsSugarClient();
_userManager = userManager;
}
/// <summary>
/// 根据规则Id获取匹配的模具列表
@@ -44,10 +51,33 @@ namespace Tnb.EquipMgr
{
var ids = list.Select(it => it.mold_id).ToList();
result = await _db.Queryable<ToolMolds>().Where(it => ids.Contains(it.id))
.Select(it => new MaintainRuleMoldListOutput { mold_id = it.id }, true).ToListAsync();
.Select(it => new MaintainRuleMoldListOutput { mold_id = it.id, item_group_id = list.First().item_group_id }, true)
.Mapper
(
it => it.item_group_name = _db.Queryable<ToolMoldMaintainGroup>().First(x => x.id == list.First().item_group_id).name!
)
.ToListAsync();
}
return result;
}
/// <summary>
/// 获取模具选择列表
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetMoldRuleSelectorList()
{
return await _db.Queryable<ToolMolds>().Select(it => new MoldRuleSelectorListOutput
{
mold_id = it.id,
}, true)
.Mapper(it =>
{
var itemGroupIds = _db.Queryable<ToolMoldMaintainGroupRelation>().Where(x => x.mold_id == it.mold_id).Select(x => x.item_group_id).Distinct().ToList();
it.groupItems = _db.Queryable<ToolMoldMaintainGroup>().Where(x => itemGroupIds.Contains(x.id)).Select(x => new MaintainItemGroupItem { item_group_id = x.id, name = x.name }).ToList();
})
.ToListAsync();
}
/// <summary>
/// 关联模具
@@ -56,8 +86,26 @@ namespace Tnb.EquipMgr
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
[HttpPost]
public async Task RelevanceMold(RelevanceMoldInput input) =>
await Relevance<RelevanceMoldInput, ToolMoldMaintainRuleRelation>(input, nameof(ToolMoldMaintainRuleRelation.rule_id), nameof(ToolMoldMaintainRuleRelation.mold_id), it => it.rule_id == input.rule_id);
public async Task RelevanceMold(RelevanceMoldInput input)
{
if (input == null) throw new ArgumentNullException(nameof(input));
if (input.rowIds?.Count > 0)
{
List<ToolMoldMaintainRuleRelation> entities = new();
foreach (var item in input.rowIds)
{
ToolMoldMaintainRuleRelation entity = new();
entity.id = SnowflakeIdHelper.NextId();
entity.rule_id = input.rule_id;
entity.mold_id = item.mold_id;
entity.item_group_id = item.group_id;
entities.Add(entity);
}
var row = await _db.Insertable(entities).ExecuteCommandAsync();
if (row < 1) throw Oops.Oh(ErrorCode.COM1000);
}
}
/// <summary>
/// 删除模具信息
/// </summary>
@@ -66,8 +114,56 @@ namespace Tnb.EquipMgr
[HttpPost]
public async Task DeleteMoldRelevance(RelevanceMoldInput input)
{
var row = await _db.Deleteable<ToolMoldMaintainRuleRelation>().Where(it => it.rule_id == input.rule_id && input.ids.Contains(it.mold_id)).ExecuteCommandAsync();
if (row < 1) throw Oops.Oh(ErrorCode.COM1002);
if (input.ids?.Count > 0)
{
var row = await _db.Deleteable<ToolMoldMaintainRuleRelation>().Where(it => it.rule_id == input.rule_id && input.ids.Contains(it.mold_id)).ExecuteCommandAsync();
if (row < 1) throw Oops.Oh(ErrorCode.COM1002);
}
}
/// <summary>
/// 生成模具保养计划
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task GenMaintainPlan(MaintainPlanCrInput input)
{
if (input == null) throw new ArgumentNullException("input");
try
{
await _db.Ado.BeginTranAsync();
var maintainRule = await _db.Queryable<ToolMoldMaintainRule>().FirstAsync(it => it.id == input.rule_id);
if (maintainRule is not null)
{
if (maintainRule.cycle.HasValue && maintainRule.cycle.Value > 0)
{
ToolMoldMaintainPlan maintainPlan = new();
maintainPlan.plan_code = $"JHDM{DateTime.Now:yyyyMMddmmss}";
maintainPlan.mode = maintainRule.mode;
maintainPlan.status = DictConst.UnMaintainStatusCode;
maintainPlan.plan_start_date = DateTime.Now;
maintainPlan.plan_end_date = DateTime.Now.AddDays(maintainRule.cycle.Value);
maintainPlan.create_id = _userManager.UserId;
maintainPlan.create_time = DateTime.Now;
await _db.Insertable(maintainPlan).ExecuteCommandAsync();
ToolMoldMaintainPlanRelation maintainPlanReation = new();
maintainPlanReation.maintain_plan_id = maintainPlan.id;
maintainPlanReation.mold_id = (await _db.Queryable<ToolMoldMaintainRuleRelation>().FirstAsync(it => it.rule_id == maintainRule.id))?.mold_id!;
await _db.Insertable(maintainPlanReation).ExecuteCommandAsync();
await _db.Ado.CommitTranAsync();
}
}
}
catch (Exception ex)
{
Log.Error("生成保养计划失败", ex);
await _db.Ado.RollbackTranAsync();
}
}
}
}

View File

@@ -12,9 +12,9 @@ using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Entities.Entity;
using Tnb.EquipMgr.Interfaces;
namespace Tnb.EquipMgr
@@ -165,7 +165,7 @@ namespace Tnb.EquipMgr
id = a.id,
mold_code = a.mold_code,
mold_name = a.mold_name,
cavity_qty = a.cavity_qty.HasValue ? a.cavity_qty.Value : 0,
cavity_qty = a.mold_cavity.HasValue ? a.mold_cavity.Value : 0,
real_cavity_qty = b.real_cavity_qty.HasValue ? b.real_cavity_qty.Value : 0
}).ToListAsync();
return list;

View File

@@ -17,7 +17,6 @@ using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.EquipMgr.Entities;
using Tnb.EquipMgr.Entities.Dto;
using Tnb.EquipMgr.Entities.Entity;
using Tnb.EquipMgr.Interfaces;
namespace Tnb.EquipMgr

View File

@@ -1,23 +0,0 @@
using System.Linq.Expressions;
namespace Tnb.EquipMgr.Utils
{
public class PropertySet<T>
{
public static Dictionary<string, Action<object, object>> ValueFactories = new Dictionary<string, Action<object, object>>(StringComparer.OrdinalIgnoreCase);
public static Action<object, object> CreateSetPropertyValueAction(string propertyName)
{
var property = typeof(T).GetProperty(propertyName);
var target = Expression.Parameter(typeof(object));
var propertyValue = Expression.Parameter(typeof(object));
var castTarget = Expression.Convert(target, typeof(T));
var castPropertyValue = Expression.Convert(propertyValue, property!.PropertyType);
var setPropertyValue = Expression.Call(castTarget, property.GetSetMethod()!, castPropertyValue);
return Expression.Lambda<Action<object, object>>(setPropertyValue, target, propertyValue).Compile();
}
}
}