wet 1 year ago
commit 026f707ade

@ -1,4 +1,5 @@
using Myshipping.Core; using Myshipping.Application.Entity.TrackingSystem;
using Myshipping.Core;
using SqlSugar; using SqlSugar;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -12,22 +13,10 @@ namespace Myshipping.Application.Entity
/// <summary> /// <summary>
/// 服务流程活动表 /// 服务流程活动表
/// </summary> /// </summary>
[Tenant(CommonConst.MasterDb)]
[SugarTable("service_workflow_activities")] [SugarTable("service_workflow_activities")]
[Description("服务流程活动表")] [Description("服务流程活动表")]
public class ServiceWorkFlowActivitiesInfo public class ServiceWorkFlowActivitiesInfo : TrackingSystemDbEntity
{ {
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnDescription = "主键", IsPrimaryKey = true)]
public string PK_ID { get; set; }
/// <summary>
/// 服务流程主键
/// </summary>
public string SERVICE_WORKFLOW_ID { get; set; }
/// <summary> /// <summary>
/// 状态主键 /// 状态主键
/// </summary> /// </summary>
@ -38,9 +27,5 @@ namespace Myshipping.Application.Entity
/// </summary> /// </summary>
public string SHOW_NAME { get; set; } public string SHOW_NAME { get; set; }
/// <summary>
/// 显示顺序号
/// </summary>
public int SORT_NO { get; set; }
} }
} }

@ -0,0 +1,38 @@
using Myshipping.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Myshipping.Application
{
[Tenant(CommonConst.MasterDb)]
[SugarTable("service_workflow_activities_relation")]
[Description("服务流程与服务流程活动关系表")]
public class ServiceWorkFlowActivitiesRelation
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnDescription = "主键", IsPrimaryKey = true)]
public string PK_ID { get; set; }
/// <summary>
/// 服务流程主键
/// </summary>
public string SERVICE_WORKFLOW_ID { get; set; }
/// <summary>
/// 服务项目主键
/// </summary>
public string SERVICE_ACTIVITIES_ID { get; set; }
/// <summary>
/// 显示顺序号
/// </summary>
public int SORT_NO { get; set; }
}
}

@ -79,5 +79,11 @@ namespace Myshipping.Application.Entity
/// 发布人名称 /// 发布人名称
/// </summary> /// </summary>
public string PUBLISH_NAME { get; set; } public string PUBLISH_NAME { get; set; }
/// <summary>
/// 是否锁止 1-锁止(不允许修改,只能取消锁止后才能修改) 0-未锁止
/// </summary>
public int IS_LOCK { get; set; } = 0;
} }
} }

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace Myshipping.Application.Entity namespace Myshipping.Application.Entity
{ {
internal class ServiceWorkFlowRunActivitiesInfo public class ServiceWorkFlowRunActivitiesInfo
{ {
} }
} }

@ -1,12 +1,72 @@
using System; using Furion.DistributedIDGenerator;
using Myshipping.Application.Entity.TrackingSystem;
using SqlSugar;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Myshipping.Application.Entity namespace Myshipping.Application.Entity
{ {
internal class ServiceWorkFlowRunInfo /// <summary>
/// 服务流程运行主表
/// </summary>
[SugarTable("service_workflow_run")]
[Description("服务流程主表")]
public class ServiceWorkFlowRunInfo : TrackingSystemDbEntity
{ {
public ServiceWorkFlowRunInfo()
{
PK_ID = IDGen.NextID().ToString();
CreatedTime = DateTime.Now;
}
/// <summary>
/// 服务流程主键
/// </summary>
public string SERVICE_WF_ID { get; set; }
/// <summary>
/// 业务系统代码
/// </summary>
public string BUSI_SYSTEM_CODE { get; set; }
/// <summary>
/// 业务主键
/// </summary>
public string BUSI_ID { get; set; }
/// <summary>
/// 提单号
/// </summary>
public string MBL_NO { get; set; }
/// <summary>
/// 船名航次
/// </summary>
public string VESSEL_VOYNO { get; set; }
/// <summary>
/// 订舱编号
/// </summary>
public string ORDER_NO { get; set; }
/// <summary>
/// 状态
/// </summary>
public string STATUS { get; set; }
/// <summary>
/// 活动数量
/// </summary>
public int ACTIVITIES_NUM { get; set; }
/// <summary>
/// 最后活动名称
/// </summary>
public int LST_ACT_NAME { get; set; }
} }
} }

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace Myshipping.Application.Entity namespace Myshipping.Application.Entity
{ {
internal class StatusTriggerBaseInfo public class StatusTriggerBaseInfo
{ {
} }
} }

@ -32,6 +32,18 @@ namespace Myshipping.Application
/// <example></example> /// <example></example>
public string UpdateEnd { get; set; } public string UpdateEnd { get; set; }
/// <summary>
/// 发布日期起始
/// </summary>
/// <example></example>
public string PublishBegin { get; set; }
/// <summary>
/// 发布日期结束
/// </summary>
/// <example></example>
public string PublishEnd { get; set; }
/// <summary> /// <summary>
/// 创建人 /// 创建人
/// </summary> /// </summary>

@ -31,11 +31,6 @@ namespace Myshipping.Application
/// </summary> /// </summary>
public int SortNo { get; set; } public int SortNo { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public int IsEnable { get; set; }
/// <summary> /// <summary>
/// 服务项目说明 /// 服务项目说明
/// </summary> /// </summary>

@ -40,5 +40,10 @@ namespace Myshipping.Application
/// 修改人名称 /// 修改人名称
/// </summary> /// </summary>
public string UpdatedUserName { get; set; } public string UpdatedUserName { get; set; }
/// <summary>
/// 是否启用 1-启用 0-未启用
/// </summary>
public int IsEnable { get; set; }
} }
} }

@ -16,11 +16,6 @@ namespace Myshipping.Application
/// </summary> /// </summary>
public string PKId { get; set; } public string PKId { get; set; }
/// <summary>
/// 服务流程主键
/// </summary>
public string ServiceWorkflowId { get; set; }
/// <summary> /// <summary>
/// 状态主键 /// 状态主键
/// </summary> /// </summary>

@ -14,43 +14,39 @@ namespace Myshipping.Application
/// <summary> /// <summary>
/// 主键 /// 主键
/// </summary> /// </summary>
/// <example></example>
public string PKId { get; set; } public string PKId { get; set; }
/// <summary> /// <summary>
/// 服务流程代码 /// 服务流程代码
/// </summary> /// </summary>
/// <example>WF_TEST1</example>
public string ServiceWorkflowCode { get; set; } public string ServiceWorkflowCode { get; set; }
/// <summary> /// <summary>
/// 服务流程名称 /// 服务流程名称
/// </summary> /// </summary>
/// <example>测试服务流程1</example>
public string ServiceWorkflowName { get; set; } public string ServiceWorkflowName { get; set; }
/// <summary> /// <summary>
/// 服务流程说明 /// 服务流程说明
/// </summary> /// </summary>
/// <example>测试服务流程1</example>
public string ServiceWorkflowNote { get; set; } public string ServiceWorkflowNote { get; set; }
/// <summary> /// <summary>
/// 所属租户ID /// 所属租户ID
/// </summary> /// </summary>
/// <example></example>
public long BelongTenantId { get; set; } public long BelongTenantId { get; set; }
/// <summary> /// <summary>
/// 所属租户名称 /// 所属租户名称
/// </summary> /// </summary>
/// <example></example>
public string BelongTenantName { get; set; } public string BelongTenantName { get; set; }
/// <summary>
/// 发布人
/// </summary>
public long PublishEr { get; set; }
/// <summary>
/// 发布人名称
/// </summary>
public string PublishName { get; set; }
/// <summary> /// <summary>
/// 服务项目 /// 服务项目
/// </summary> /// </summary>

@ -85,5 +85,15 @@ namespace Myshipping.Application
/// 发布版本 /// 发布版本
/// </summary> /// </summary>
public string ReleaseVersion { get; set; } public string ReleaseVersion { get; set; }
/// <summary>
/// 发布人
/// </summary>
public long PublishEr { get; set; }
/// <summary>
/// 发布人名称
/// </summary>
public string PublishName { get; set; }
} }
} }

@ -110,6 +110,10 @@ namespace Myshipping.Application
.Map(dest => dest.BelongTenantName, src => src.BELONG_TENANT_NAME) .Map(dest => dest.BelongTenantName, src => src.BELONG_TENANT_NAME)
.Map(dest => dest.StatusNum, src => src.STATUS_NUM); .Map(dest => dest.StatusNum, src => src.STATUS_NUM);
config.ForType<ServiceWorkFlowActivitiesDto, ServiceWorkFlowActivitiesInfo>()
.Map(dest => dest.PK_ID, src => src.PKId)
.Map(dest => dest.STATUS_SKU_ID, src => src.StatusSKUId)
.Map(dest => dest.SHOW_NAME, src => src.ShowName);
} }
} }
} }

@ -91,5 +91,12 @@ namespace Myshipping.Application
/// <param name="pkId">服务流程主键</param> /// <param name="pkId">服务流程主键</param>
/// <returns>返回回执</returns> /// <returns>返回回执</returns>
Task<TaskManageOrderResultDto> GetShowTimeLine(string pkId); Task<TaskManageOrderResultDto> GetShowTimeLine(string pkId);
/// <summary>
/// 保存服务流程活动
/// </summary>
/// <param name="info">保存服务流程活动详情</param>
/// <returns>返回回执</returns>
Task<TaskManageOrderResultDto> SaveWFActivities(ServiceWorkFlowActivitiesDto info);
} }
} }

@ -26,14 +26,24 @@ namespace Myshipping.Application
{ {
private readonly SqlSugarRepository<ServiceWorkFlowBaseInfo> _serviceWorkFlowBaseRepository; private readonly SqlSugarRepository<ServiceWorkFlowBaseInfo> _serviceWorkFlowBaseRepository;
private readonly SqlSugarRepository<ServiceWorkFlowActivitiesInfo> _serviceWorkFlowActivitiesInfoRepository; private readonly SqlSugarRepository<ServiceWorkFlowActivitiesInfo> _serviceWorkFlowActivitiesInfoRepository;
private readonly SqlSugarRepository<ServiceWorkFlowProjectRelation> _serviceWorkFlowProjectRelationRepository;
private readonly SqlSugarRepository<ServiceWorkFlowActivitiesRelation> _serviceWorkFlowActivitiesRelationRepository;
private readonly ILogger<ServiceWorkFlowBaseService> _logger; private readonly ILogger<ServiceWorkFlowBaseService> _logger;
public ServiceWorkFlowBaseService(SqlSugarRepository<ServiceWorkFlowBaseInfo> serviceWorkFlowBaseRepository, public ServiceWorkFlowBaseService(SqlSugarRepository<ServiceWorkFlowBaseInfo> serviceWorkFlowBaseRepository,
ILogger<StatusSkuBaseService> logger, ILogger<ServiceWorkFlowBaseService> logger,
SqlSugarRepository<ServiceWorkFlowActivitiesInfo> serviceWorkFlowActivitiesInfoRepository) SqlSugarRepository<ServiceWorkFlowActivitiesInfo> serviceWorkFlowActivitiesInfoRepository,
SqlSugarRepository<ServiceWorkFlowProjectRelation> serviceWorkFlowProjectRelationRepository,
SqlSugarRepository<ServiceWorkFlowActivitiesRelation> serviceWorkFlowActivitiesRelationRepository)
{ {
_serviceWorkFlowBaseRepository = serviceWorkFlowBaseRepository; _serviceWorkFlowBaseRepository = serviceWorkFlowBaseRepository;
_serviceWorkFlowActivitiesInfoRepository = serviceWorkFlowActivitiesInfoRepository; _serviceWorkFlowActivitiesInfoRepository = serviceWorkFlowActivitiesInfoRepository;
_serviceWorkFlowProjectRelationRepository = serviceWorkFlowProjectRelationRepository;
_serviceWorkFlowActivitiesRelationRepository = serviceWorkFlowActivitiesRelationRepository;
_logger = logger;
} }
/// <summary> /// <summary>
@ -63,11 +73,104 @@ namespace Myshipping.Application
return result; return result;
} }
#region 保存服务流程活动
/// <summary>
/// 保存服务流程活动
/// </summary>
/// <param name="info">保存服务流程活动详情</param>
/// <returns>返回回执</returns>
[HttpPost("/ServiceWorkFlowBase/SaveWFActivities")]
public async Task<TaskManageOrderResultDto> SaveWFActivities([FromBody] ServiceWorkFlowActivitiesDto info)
{
TaskManageOrderResultDto result = new TaskManageOrderResultDto();
try
{
/*
1
2
3
*/
var entity = info.Adapt<ServiceWorkFlowActivitiesInfo>();
if (string.IsNullOrWhiteSpace(entity.STATUS_SKU_ID))
{
throw Oops.Oh($"状态不能为空", typeof(InvalidOperationException));
}
if (string.IsNullOrWhiteSpace(entity.SHOW_NAME) || entity.SHOW_NAME.Length < 2)
{
throw Oops.Oh($"状态显示名称不能为空并且不能少于2个字符", typeof(InvalidOperationException));
}
//同一状态不能有相同的显示名称
var checkList = _serviceWorkFlowActivitiesInfoRepository.AsQueryable()
.Where(a=>a.STATUS_SKU_ID == entity.STATUS_SKU_ID
&& a.SHOW_NAME == entity.SHOW_NAME && a.PK_ID != entity.PK_ID).ToList();
if (checkList.Count > 0)
throw Oops.Oh($"已存在相同的状态设置,不能保存", typeof(InvalidOperationException));
//_logger.LogInformation($"服务项目保存 JSON={JSON.Serialize(entity)} user={UserManager.UserId}");
if (string.IsNullOrWhiteSpace(entity.PK_ID))
{
entity.PK_ID = IDGen.NextID().ToString();
_serviceWorkFlowActivitiesInfoRepository.Insert(entity);
}
else
{
//已经关联服务流程的,并且已经发布的不能修改内容。(只可以新增)
var wfRelation = _serviceWorkFlowActivitiesRelationRepository.AsQueryable()
.Where(a=>a.SERVICE_ACTIVITIES_ID == entity.PK_ID)
.ToList();
if (wfRelation.Count > 0)
{
var currArg = wfRelation.Select(a=>a.SERVICE_WORKFLOW_ID).Distinct().ToList();
if (_serviceWorkFlowBaseRepository.AsQueryable().Any(a => currArg.Any(b => b == a.PK_ID)
&& (!string.IsNullOrWhiteSpace(a.RELEASE_VERSION) || a.IS_LOCK == 1)))
{
throw Oops.Oh($"当前状态已关联发布流程,不能保存", typeof(InvalidOperationException));
}
}
entity.UpdatedTime = DateTime.Now;
entity.UpdatedUserId = UserManager.UserId;
entity.UpdatedUserName = UserManager.Name;
await _serviceWorkFlowActivitiesInfoRepository.AsUpdateable(entity).IgnoreColumns(it => new
{
it.TenantId,
it.TenantName,
it.CreatedTime,
it.CreatedUserId,
it.CreatedUserName,
it.IsDeleted,
}).ExecuteCommandAsync();
}
result.succ = true;
result.msg = "保存成功";
result.ext = entity.PK_ID;
}
catch (Exception ex)
{
result.succ = false;
result.msg = $"保存服务流程活动异常,原因:{ex.Message}";
}
return result;
}
#endregion
#region 保存内部方法 #region 保存内部方法
/// <summary> /// <summary>
/// 保存内部方法 /// 保存内部方法
/// </summary> /// </summary>
/// <param name="info">服务项目详情</param> /// <param name="info">服务流程详情</param>
/// <param name="isSetEnable">是否启用</param> /// <param name="isSetEnable">是否启用</param>
/// <returns>返回派车Id</returns> /// <returns>返回派车Id</returns>
[SqlSugarUnitOfWork] [SqlSugarUnitOfWork]
@ -81,9 +184,9 @@ namespace Myshipping.Application
} }
if (entity == null) if (entity == null)
throw Oops.Oh($"服务项目不能为空", typeof(InvalidOperationException)); throw Oops.Oh($"服务流程不能为空", typeof(InvalidOperationException));
_logger.LogInformation($"服务项目保存 JSON={JSON.Serialize(entity)} user={UserManager.UserId}"); _logger.LogInformation($"服务流程保存 JSON={JSON.Serialize(entity)} user={UserManager.UserId}");
if (string.IsNullOrWhiteSpace(entity.PK_ID)) if (string.IsNullOrWhiteSpace(entity.PK_ID))
{ {
@ -96,11 +199,8 @@ namespace Myshipping.Application
var model = InnerGetInfo(entity.PK_ID); var model = InnerGetInfo(entity.PK_ID);
_logger.LogInformation($"更新状态前,获取原始记录 JSON={JSON.Serialize(model)}"); _logger.LogInformation($"更新状态前,获取原始记录 JSON={JSON.Serialize(model)}");
//if (!entity.STATUS_SKU_CODE.Equals(model.STATUS_SKU_CODE, StringComparison.OrdinalIgnoreCase)) ValidateServiceWorkFlow(entity, true);
//{
// ValidateServiceProject(entity, true);
//}
entity.UpdatedTime = DateTime.Now; entity.UpdatedTime = DateTime.Now;
entity.UpdatedUserId = UserManager.UserId; entity.UpdatedUserId = UserManager.UserId;
@ -116,6 +216,41 @@ namespace Myshipping.Application
it.IsDeleted, it.IsDeleted,
}).ExecuteCommandAsync(); }).ExecuteCommandAsync();
//批量删除服务流程与服务项目关系(物理删除)
_serviceWorkFlowProjectRelationRepository.EntityContext.Deleteable<ServiceWorkFlowProjectRelation>()
.Where(a => a.SERVICE_WORKFLOW_ID == entity.PK_ID);
//批量删除服务流程与服务活动关系(物理删除)
_serviceWorkFlowActivitiesRelationRepository.EntityContext.Deleteable<ServiceWorkFlowProjectRelation>()
.Where(a => a.SERVICE_WORKFLOW_ID == entity.PK_ID);
}
//服务流程与服务项目关系
if (info.ServiceProject != null && !string.IsNullOrWhiteSpace(info.ServiceProject.PKId))
{
var wfRelationProject = new ServiceWorkFlowProjectRelation {
PK_ID = IDGen.NextID().ToString(),
SERVICE_WORKFLOW_ID = entity.PK_ID,
SERVICE_PROJECT_ID = info.ServiceProject.PKId,
};
//插入关系
await _serviceWorkFlowProjectRelationRepository.InsertAsync(wfRelationProject);
}
//服务流程与服务活动关系
if (info.StatusSkuList != null && info.StatusSkuList.Count > 0)
{
info.StatusSkuList.ForEach(async sku =>
{
var wfRelationActivities = new ServiceWorkFlowActivitiesRelation {
PK_ID = IDGen.NextID().ToString(),
SERVICE_WORKFLOW_ID = entity.PK_ID,
SERVICE_ACTIVITIES_ID = sku.PKId,
};
await _serviceWorkFlowActivitiesRelationRepository.InsertAsync();
});
} }
return entity.PK_ID; return entity.PK_ID;
@ -129,8 +264,11 @@ namespace Myshipping.Application
/// <param name="entity">服务项目详情</param> /// <param name="entity">服务项目详情</param>
/// <param name="isCheckRelation">是否校验关系</param> /// <param name="isCheckRelation">是否校验关系</param>
/// <returns></returns> /// <returns></returns>
private void ValidateServiceProject(ServiceWorkFlowBaseInfo entity, bool isCheckRelation = false) private void ValidateServiceWorkFlow(ServiceWorkFlowBaseInfo entity, bool isCheckRelation = false)
{ {
/*
*/
//if (isCheckRelation && _serviceWorkFlowActivitiesInfoRepository.Any(a => a.STATUS_SKU_ID == entity.PK_ID)) //if (isCheckRelation && _serviceWorkFlowActivitiesInfoRepository.Any(a => a.STATUS_SKU_ID == entity.PK_ID))
//{ //{
// _logger.LogInformation($"当前状态已关联服务流程不能修改"); // _logger.LogInformation($"当前状态已关联服务流程不能修改");

Loading…
Cancel
Save