修改VGM任务

master
jianghaiqing 9 months ago
parent 1974c70c9f
commit 8409ab2194

@ -51,5 +51,15 @@ namespace Myshipping.Application.Entity
/// 接收时间
/// </summary>
public Nullable<DateTime> REC_TIME { get; set; }
/// <summary>
/// 是否未提交VGM
/// </summary>
public bool IS_MISSING { get; set; }
/// <summary>
/// 最晚提交期限
/// </summary>
public Nullable<DateTime> SUBMISSION_DEADLINE { get; set; }
}
}

@ -72,5 +72,10 @@ namespace Myshipping.Application
/// 订舱ID
/// </summary>
public Nullable<long> BOOKING_ID { get; set; }
/// <summary>
/// VGM通知类型 VGM_MISSING-VGM未提交VGM_FEEDBACK-VGM回执
/// </summary>
public string TASK_TYPE { get; set; }
}
}

@ -139,9 +139,9 @@ namespace Myshipping.Application
MSC_PENDING,
/// <summary>
/// VGM反馈详情
/// VGM回执
/// </summary>
[Description("VGM反馈详情")]
[Description("VGM回执")]
VGM_FEEDBACK,
/// <summary>
/// 比对下货纸
@ -174,6 +174,11 @@ namespace Myshipping.Application
/// Transfer Nomination(预甩货通知)
/// </summary>
[Description("TransferNomination")]
TRANSFER_NOMINATION
TRANSFER_NOMINATION,
/// <summary>
/// VGM未提交
/// </summary>
[Description("VGM未提交")]
VGM_MISSING,
}
}

@ -2567,12 +2567,13 @@ namespace Myshipping.Application
}
#endregion
#region 获取订舱对应的集装箱VGM回执详情
/// <summary>
/// 获取订舱对应的集装箱VGM回执详情
/// </summary>
/// <param name="id">订舱ID</param>
/// <returns>返回VGM明细</returns>
[HttpGet("/BookingValueAdded/GetBookingVGMResult")]
public async Task<List<BookingCtnVGMDto>> GetBookingVGMResult(long id)
{
List<BookingCtnVGMDto> list = new List<BookingCtnVGMDto>();
@ -2594,6 +2595,7 @@ namespace Myshipping.Application
return list;
}
#endregion
}
public class DateTimeJsonConverter : System.Text.Json.Serialization.JsonConverter<Nullable<DateTime>>

@ -938,6 +938,37 @@ namespace Myshipping.Application
.Map(dest => dest.CtnAll, src => src.CTNALL)
.Map(dest => dest.CtnNum, src => src.CTNNUM)
.Map(dest => dest.PKId, src => src.PK_ID);
config.ForType<TaskVGMInfo, TaskVGMDto>()
.Map(dest => dest.PKId, src => src.PK_ID)
.Map(dest => dest.TaskId, src => src.TASK_ID)
.Map(dest => dest.MBlNo, src => src.MBL_NO)
.Map(dest => dest.Carrier, src => src.CARRIER)
.Map(dest => dest.Vessel, src => src.VESSEL)
.Map(dest => dest.Voyno, src => src.VOYNO)
.Map(dest => dest.PortLoad, src => src.PORTLOAD)
.Map(dest => dest.VGMSubmissionDeadLine, src => src.VGM_SUBMISSION_DEADLINE)
.Map(dest => dest.BookedByReference, src => src.BOOKED_BY_REFERENCE)
.Map(dest => dest.CtnStat, src => src.CTN_STAT)
.Map(dest => dest.NoticeDate, src => src.NOTICE_DATE)
.Map(dest => dest.BookingId, src => src.BOOKING_ID)
.Map(dest => dest.TaskType, src => src.TASK_TYPE);
config.ForType<TaskVGMInfo, TaskVGMShowDto>()
.Map(dest => dest.PKId, src => src.PK_ID)
.Map(dest => dest.TaskId, src => src.TASK_ID)
.Map(dest => dest.MBlNo, src => src.MBL_NO)
.Map(dest => dest.Carrier, src => src.CARRIER)
.Map(dest => dest.Vessel, src => src.VESSEL)
.Map(dest => dest.Voyno, src => src.VOYNO)
.Map(dest => dest.PortLoad, src => src.PORTLOAD)
.Map(dest => dest.VGMSubmissionDeadLine, src => src.VGM_SUBMISSION_DEADLINE)
.Map(dest => dest.BookedByReference, src => src.BOOKED_BY_REFERENCE)
.Map(dest => dest.CtnStat, src => src.CTN_STAT)
.Map(dest => dest.NoticeDate, src => src.NOTICE_DATE)
.Map(dest => dest.BookingId, src => src.BOOKING_ID)
.Map(dest => dest.TaskType, src => src.TASK_TYPE);
}
}

@ -73,5 +73,11 @@ namespace Myshipping.Application
/// </summary>
public Nullable<long> BookingId { get; set; }
/// <summary>
/// VGM通知类型
/// </summary>
public string TaskType { get; set; }
}
}

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Myshipping.Application
{
public class TaskVGMShowDto: TaskVGMDto
{
/// <summary>
/// 箱号
/// </summary>
public string CntrNo { get; set; }
/// <summary>
/// VGM重量
/// </summary>
public Nullable<decimal> VGMWeight { get; set; }
/// <summary>
/// VGM重量单位
/// </summary>
public string VGMWeightUnit { get; set; }
/// <summary>
/// VGM称重方式
/// </summary>
public string VGMWeightMethod { get; set; }
}
}

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Myshipping.Application.Service.TaskManagePlat.Interface
{
/// <summary>
/// VGM任务
/// </summary>
public interface ITaskManageVGMService
{
/// <summary>
/// 获取VGM成功回执详情
/// </summary>
/// <param name="pkId">BC主键</param>
/// <returns>返回回执</returns>
Task<List<TaskVGMShowDto>> GetVGMSubmissionInfo(string pkId);
/// <summary>
/// 通过任务主键获取VGM成功回执详情
/// </summary>
/// <param name="taskPkId">VGM任务主键</param>
/// <returns>返回回执</returns>
Task<List<TaskVGMShowDto>> GetVGMSubmissionInfoByTaskId(string taskPkId);
/// <summary>
/// 获取VGM未提交详情
/// </summary>
/// <param name="pkId">BC主键</param>
/// <returns>返回回执</returns>
Task<List<TaskVGMShowDto>> GetVGMMissingInfo(string pkId);
/// <summary>
/// 通过任务主键获取VGM未提交详情
/// </summary>
/// <param name="taskPkId">VGM任务主键</param>
/// <returns>返回回执</returns>
Task<List<TaskVGMShowDto>> GetVGMMissingInfoByTaskId(string taskPkId);
}
}

@ -769,6 +769,7 @@ namespace Myshipping.Application
vgmInfo.CreatedUserName = taskInfo.CreatedUserName;
vgmInfo.TenantId = taskInfo.TenantId;
vgmInfo.TenantName = taskInfo.TenantName;
vgmInfo.TASK_TYPE = info.Main.TaskType.ToString();
_taskVGMInfoRepository.InsertAsync(vgmInfo);
@ -813,78 +814,123 @@ namespace Myshipping.Application
var bookingInfo = bookingList.FirstOrDefault(a =>
a.MBLNO.Equals(vgmInfo.MBL_NO, StringComparison.OrdinalIgnoreCase));
//推送状态
var pushModel = new ModifyServiceProjectStatusDto
if (bookingInfo != null)
{
BookingId = bookingInfo.Id,
SourceType = TrackingSourceTypeEnum.AUTO,
StatusCodes = new List<ModifyServiceProjectStatusDetailDto> {
new ModifyServiceProjectStatusDetailDto { StatusCode = "VGMCG" } }
};
var vgmEntity = _taskVGMInfoRepository.AsQueryable().Filter(null, true)
.First(x => x.PK_ID == vgmInfo.PK_ID && x.IsDeleted == false && x.TenantId == taskInfo.TenantId);
var saveStatusRlt = _bookingValueAddedService.SaveServiceStatus(pushModel).GetAwaiter().GetResult();
vgmEntity.BOOKING_ID = bookingInfo.Id;
_logger.LogInformation("请求JSON={json} 异步推送服务状态完成,结果={rlt}", JSON.Serialize(pushModel), JSON.Serialize(saveStatusRlt));
_taskVGMInfoRepository.AsUpdateable(vgmEntity).UpdateColumns(x => x.BOOKING_ID).ExecuteCommandAsync();
var vgmEntity = _taskVGMInfoRepository.AsQueryable().Filter(null, true)
.First(x => x.PK_ID == vgmInfo.PK_ID && x.IsDeleted == false && x.TenantId == taskInfo.TenantId);
var ctnVGMList = _bookingCtnVGMRepository.AsQueryable().Filter(null, true)
.Where(x => x.BILLID == bookingInfo.Id && x.IsDeleted == false && x.TenantId == taskInfo.TenantId).ToList();
vgmEntity.BOOKING_ID = bookingInfo.Id;
var bookCtnList = _bookingOrderContaRepository.AsQueryable().Filter(null, true)
.Where(x => x.BILLID == bookingInfo.Id && x.IsDeleted == false && x.TenantId == taskInfo.TenantId).ToList();
_taskVGMInfoRepository.AsUpdateable(vgmEntity).UpdateColumns(x => x.BOOKING_ID).ExecuteCommandAsync();
var ctnList = info.Main.VGMFeedBack
.FirstOrDefault(x => x.MBlNo.Equals(vgmInfo.MBL_NO, StringComparison.OrdinalIgnoreCase)).CtnList;
var ctnVGMList = _bookingCtnVGMRepository.AsQueryable().Filter(null, true)
.Where(x => x.BILLID == bookingInfo.Id && x.IsDeleted == false && x.TenantId == taskInfo.TenantId).ToList();
var bookCtnList = _bookingOrderContaRepository.AsQueryable().Filter(null, true)
.Where(x => x.BILLID == bookingInfo.Id && x.IsDeleted == false && x.TenantId == taskInfo.TenantId).ToList();
if (info.Main.TaskType == TaskBaseTypeEnum.VGM_FEEDBACK)
{
//推送状态
var pushModel = new ModifyServiceProjectStatusDto
{
BookingId = bookingInfo.Id,
SourceType = TrackingSourceTypeEnum.AUTO,
StatusCodes = new List<ModifyServiceProjectStatusDetailDto> {
new ModifyServiceProjectStatusDetailDto { StatusCode = "VGMCG" } }
};
var ctnList = info.Main.VGMFeedBack
.FirstOrDefault(x => x.MBlNo.Equals(vgmInfo.MBL_NO, StringComparison.OrdinalIgnoreCase)).CtnList;
var saveStatusRlt = _bookingValueAddedService.SaveServiceStatus(pushModel).GetAwaiter().GetResult();
foreach (var ctn in ctnList)
{
var bookCtnVGM = ctnVGMList.FirstOrDefault(t => t.CNTRNO.Equals(ctn.CntrNo, StringComparison.OrdinalIgnoreCase));
var bookCtn = bookCtnList.FirstOrDefault(t => t.CNTRNO.Equals(ctn.CntrNo, StringComparison.OrdinalIgnoreCase));
_logger.LogInformation("请求JSON={json} 异步推送服务状态完成,结果={rlt}", JSON.Serialize(pushModel), JSON.Serialize(saveStatusRlt));
if (bookCtnVGM != null)
{
//更新
bookCtnVGM.UpdatedTime = taskInfo.CreatedTime;
bookCtnVGM.UpdatedUserId = taskInfo.CreatedUserId;
bookCtnVGM.UpdatedUserName = taskInfo.CreatedUserName;
_bookingCtnVGMRepository.AsUpdateable(bookCtnVGM).UpdateColumns(x => new
foreach (var ctn in ctnList)
{
x.VGM_WEIGHT,
x.VGM_WEIGHT_UNIT,
x.VGM_METHOD,
x.IS_MATCH,
x.UpdatedTime,
x.UpdatedUserId,
x.UpdatedUserName
}).ExecuteCommand();
var bookCtnVGM = ctnVGMList.FirstOrDefault(t => t.CNTRNO.Equals(ctn.CntrNo, StringComparison.OrdinalIgnoreCase));
var bookCtn = bookCtnList.FirstOrDefault(t => t.CNTRNO.Equals(ctn.CntrNo, StringComparison.OrdinalIgnoreCase));
if (bookCtnVGM != null)
{
//更新
bookCtnVGM.UpdatedTime = taskInfo.CreatedTime;
bookCtnVGM.UpdatedUserId = taskInfo.CreatedUserId;
bookCtnVGM.UpdatedUserName = taskInfo.CreatedUserName;
bookCtnVGM.IS_MISSING = false;
bookCtnVGM.SUBMISSION_DEADLINE = null;
_bookingCtnVGMRepository.AsUpdateable(bookCtnVGM).UpdateColumns(x => new
{
x.VGM_WEIGHT,
x.VGM_WEIGHT_UNIT,
x.VGM_METHOD,
x.IS_MATCH,
x.UpdatedTime,
x.UpdatedUserId,
x.UpdatedUserName
}).ExecuteCommand();
}
else
{
//写入
var bookingCtnVGM = new BookingCtnVGM
{
CNTRNO = ctn.CntrNo,
BILLID = bookingInfo.Id,
VGM_WEIGHT = ctn.VGMWeight,
VGM_WEIGHT_UNIT = ctn.VGMWeightUnit,
VGM_METHOD = ctn.VGMWeightMethod,
IS_MATCH = bookCtn != null,
CreatedTime = taskInfo.CreatedTime,
UpdatedTime = taskInfo.CreatedTime,
CreatedUserId = taskInfo.CreatedUserId,
CreatedUserName = taskInfo.CreatedUserName,
TenantId = taskInfo.TenantId,
REC_TIME = vgmInfo.NOTICE_DATE
};
_bookingCtnVGMRepository.Insert(bookingCtnVGM);
}
}
}
else
{
//写入
var bookingCtnVGM = new BookingCtnVGM
if (ctnList.Count > 0)
{
CNTRNO = ctn.CntrNo,
BILLID = bookingInfo.Id,
VGM_WEIGHT = ctn.VGMWeight,
VGM_WEIGHT_UNIT = ctn.VGMWeightUnit,
VGM_METHOD = ctn.VGMWeightMethod,
IS_MATCH = bookCtn != null,
CreatedTime = taskInfo.CreatedTime,
UpdatedTime = taskInfo.CreatedTime,
CreatedUserId = taskInfo.CreatedUserId,
CreatedUserName = taskInfo.CreatedUserName,
TenantId = taskInfo.TenantId,
};
_bookingCtnVGMRepository.Insert(bookingCtnVGM);
foreach (var ctn in ctnList)
{
var bookCtnVGM = ctnVGMList.FirstOrDefault(t => t.CNTRNO.Equals(ctn.CntrNo, StringComparison.OrdinalIgnoreCase));
var bookCtn = bookCtnList.FirstOrDefault(t => t.CNTRNO.Equals(ctn.CntrNo, StringComparison.OrdinalIgnoreCase));
if (bookCtnVGM == null)
{
//写入
var bookingCtnVGM = new BookingCtnVGM
{
CNTRNO = ctn.CntrNo,
BILLID = bookingInfo.Id,
VGM_WEIGHT = ctn.VGMWeight,
VGM_WEIGHT_UNIT = ctn.VGMWeightUnit,
VGM_METHOD = ctn.VGMWeightMethod,
IS_MATCH = bookCtn != null,
CreatedTime = taskInfo.CreatedTime,
UpdatedTime = taskInfo.CreatedTime,
CreatedUserId = taskInfo.CreatedUserId,
CreatedUserName = taskInfo.CreatedUserName,
TenantId = taskInfo.TenantId,
REC_TIME = vgmInfo.NOTICE_DATE,
IS_MISSING = true,
SUBMISSION_DEADLINE = vgmInfo.VGM_SUBMISSION_DEADLINE
};
_bookingCtnVGMRepository.Insert(bookingCtnVGM);
}
}
}
}
}
});
}

@ -0,0 +1,199 @@
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Myshipping.Application.Entity;
using Myshipping.Application.Service.TaskManagePlat.Interface;
using Myshipping.Core;
using MySqlX.XDevAPI.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Myshipping.Application
{
/// <summary>
/// VGM任务
/// </summary>
[ApiDescriptionSettings("Application", Name = "TaskManageVGM", Order = 10)]
public class TaskManageVGMService: ITaskManageVGMService, IDynamicApiController
{
private readonly SqlSugarRepository<TaskVGMInfo> _taskVGMInfoRepository;
private readonly SqlSugarRepository<TaskVGMCtnInfo> _taskVGMCtnInfoRepository;
private readonly SqlSugarRepository<TaskBaseInfo> _taskBaseRepository;
public TaskManageVGMService(SqlSugarRepository<TaskVGMInfo> taskVGMInfoRepository,
SqlSugarRepository<TaskVGMCtnInfo> taskVGMCtnInfoRepository,
SqlSugarRepository<TaskBaseInfo> taskBaseRepository)
{
_taskVGMInfoRepository = taskVGMInfoRepository;
_taskVGMCtnInfoRepository = taskVGMCtnInfoRepository;
_taskBaseRepository = taskBaseRepository;
}
#region 获取VGM成功回执详情
/// <summary>
/// 获取VGM成功回执详情
/// </summary>
/// <param name="pkId">BC主键</param>
/// <returns>返回回执</returns>
[HttpGet("/BookingMSKAPI/GetVGMSubmissionInfo")]
public async Task<List<TaskVGMShowDto>> GetVGMSubmissionInfo(string pkId)
{
List<TaskVGMShowDto> list = new List<TaskVGMShowDto>();
var vgmOrder = _taskVGMInfoRepository.AsQueryable().First(a => a.PK_ID == pkId);
if (vgmOrder == null)
throw Oops.Oh($"VGM主键{pkId}无法获取业务信息");
var CtnList = _taskVGMCtnInfoRepository.AsQueryable()
.Where(a => a.P_ID == pkId).ToList();
if (CtnList.Count > 0)
{
list = CtnList.OrderBy(p => p.P_ID).ThenBy(p => p.CNTRNO).Select(p =>
{
TaskVGMShowDto model = vgmOrder.Adapt<TaskVGMShowDto>();
model.CntrNo = p.CNTRNO;
model.VGMWeight = p.VGM_WEIGHT;
model.VGMWeightMethod = p.VGM_METHOD;
model.VGMWeightUnit = p.VGM_WEIGHT_UNIT;
return model;
}).ToList();
}
return list;
}
#endregion
#region 通过任务主键获取VGM成功回执详情
/// <summary>
/// 通过任务主键获取VGM成功回执详情
/// </summary>
/// <param name="taskPkId">VGM任务主键</param>
/// <returns>返回回执</returns>
[HttpGet("/BookingMSKAPI/GetVGMSubmissionInfoByTaskId")]
public async Task<List<TaskVGMShowDto>> GetVGMSubmissionInfoByTaskId(string taskPkId)
{
List<TaskVGMShowDto> list = new List<TaskVGMShowDto>();
var taskBase = _taskBaseRepository.AsQueryable().First(a => a.PK_ID == taskPkId);
if (taskBase == null)
throw Oops.Oh($"任务主键{taskPkId}无法获取业务信息");
var vgmOrder = _taskVGMInfoRepository.AsQueryable().First(a => a.TASK_ID == taskBase.PK_ID);
if (vgmOrder == null)
throw Oops.Oh($"任务主键{taskPkId}无法获取VGM信息");
var CtnList = _taskVGMCtnInfoRepository.AsQueryable()
.Where(a => a.P_ID == vgmOrder.PK_ID).ToList();
if (CtnList.Count > 0)
{
list = CtnList.OrderBy(p => p.P_ID).ThenBy(p => p.CNTRNO).Select(p =>
{
TaskVGMShowDto model = vgmOrder.Adapt<TaskVGMShowDto>();
model.CntrNo = p.CNTRNO;
model.VGMWeight = p.VGM_WEIGHT;
model.VGMWeightMethod = p.VGM_METHOD;
model.VGMWeightUnit = p.VGM_WEIGHT_UNIT;
return model;
}).ToList();
}
return list;
}
#endregion
#region 获取VGM未提交详情
/// <summary>
/// 获取VGM未提交详情
/// </summary>
/// <param name="pkId">BC主键</param>
/// <returns>返回回执</returns>
[HttpGet("/BookingMSKAPI/GetVGMMissingInfo")]
public async Task<List<TaskVGMShowDto>> GetVGMMissingInfo(string pkId)
{
List<TaskVGMShowDto> list = new List<TaskVGMShowDto>();
var vgmOrder = _taskVGMInfoRepository.AsQueryable().First(a => a.PK_ID == pkId);
if (vgmOrder == null)
throw Oops.Oh($"VGM主键{pkId}无法获取业务信息");
var CtnList = _taskVGMCtnInfoRepository.AsQueryable()
.Where(a => a.P_ID == pkId).ToList();
if (CtnList.Count > 0)
{
list = CtnList.OrderBy(p => p.P_ID).ThenBy(p => p.CNTRNO).Select(p =>
{
TaskVGMShowDto model = vgmOrder.Adapt<TaskVGMShowDto>();
model.CntrNo = p.CNTRNO;
model.VGMWeight = p.VGM_WEIGHT;
model.VGMWeightMethod = p.VGM_METHOD;
model.VGMWeightUnit = p.VGM_WEIGHT_UNIT;
return model;
}).ToList();
}
return list;
}
#endregion
#region 通过任务主键获取VGM未提交详情
/// <summary>
/// 通过任务主键获取VGM未提交详情
/// </summary>
/// <param name="taskPkId">VGM任务主键</param>
/// <returns>返回回执</returns>
[HttpGet("/BookingMSKAPI/GetVGMMissingInfoByTaskId")]
public async Task<List<TaskVGMShowDto>> GetVGMMissingInfoByTaskId(string taskPkId)
{
List<TaskVGMShowDto> list = new List<TaskVGMShowDto>();
var taskBase = _taskBaseRepository.AsQueryable().First(a => a.PK_ID == taskPkId);
if (taskBase == null)
throw Oops.Oh($"任务主键{taskPkId}无法获取业务信息");
var vgmOrder = _taskVGMInfoRepository.AsQueryable().First(a => a.TASK_ID == taskBase.PK_ID);
if (vgmOrder == null)
throw Oops.Oh($"任务主键{taskPkId}无法获取VGM信息");
var CtnList = _taskVGMCtnInfoRepository.AsQueryable()
.Where(a => a.P_ID == vgmOrder.PK_ID).ToList();
if (CtnList.Count > 0)
{
list = CtnList.OrderBy(p => p.P_ID).ThenBy(p => p.CNTRNO).Select(p =>
{
TaskVGMShowDto model = vgmOrder.Adapt<TaskVGMShowDto>();
model.CntrNo = p.CNTRNO;
model.VGMWeight = p.VGM_WEIGHT;
model.VGMWeightMethod = p.VGM_METHOD;
model.VGMWeightUnit = p.VGM_WEIGHT_UNIT;
return model;
}).ToList();
}
return list;
}
#endregion
}
}
Loading…
Cancel
Save