You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

212 lines
8.5 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using DSWeb.Common.DB;
using DSWeb.Common.Helper;
using DSWeb.Common.Model;
using log4net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace DSWeb.EventBus
{
public class ProcessorVgmLinkRefresh : EventProcessor
{
private static ILog logger = LogManager.GetLogger("ProcessorVgmLinkRefresh");
private BookingDB bookingDB = new BookingDB();
private CommonDataContext commonData = new CommonDataContext();
public override bool CanProcess(EventMessageType type)
{
if (type == EventMessageType.VgmLinkRefresh)
{
return true;
}
return false;
}
public override void Process(JObject paraObj)
{
string ordno = paraObj.GetValue("ORDNO").ToString();
var order = bookingDB.Orders.AsNoTracking().FirstOrDefault(o => o.ORDNO == ordno);
var model = bookingDB.VgmLink.FirstOrDefault(v => v.ORDNO == ordno);
if (order == null)
{
logger.Error($"处理更新vgm链接消息时出错未找到订舱 {ordno}");
return;
}
var paraVgmLinkService = commonData.ParamSets.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "bookingVgmLinkServiceUrl");
if (string.IsNullOrEmpty(paraVgmLinkService.PARAMVALUE))
{
logger.Error($"处理更新vgm链接消息时出错未正确配置vgm发送服务地址 {ordno} {order.MBLNO}");
return;
}
var currUser = commonData.Users.AsNoTracking().First(u => u.GID == order.USERID);
var currUserBase = commonData.UserBases.AsNoTracking().First(ub => ub.USERID == currUser.GID);
if (model == null)
{
model = new OP_SEAE_ORDER_VGM_LINK();
model.GID = Guid.NewGuid().ToString();
model.CREATE_TIME = DateTime.Now;
model.CREATE_USER = currUser.GID;
model.ORDNO = order.ORDNO;
bookingDB.VgmLink.Add(model);
}
else
{
model.MODIFY_TIME = DateTime.Now;
model.MODIFY_USER = currUser.GID;
}
//调用接口生成vgm链接
var receiveUrl = string.Empty;
var webUser = string.Empty;
var webPass = string.Empty;
if (order.CARRIERID == "CMA")
{
var paraMyshippingUrlService = commonData.ParamSets.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "bookingWebUrlCMA");
var accType = AccountConfigType.CmaWeb.ToString();
var accCfg = commonData.AccountConfigs.AsNoTracking().FirstOrDefault(a => a.Type == accType && a.UserId == currUser.GID);
if (accCfg == null)
{
logger.Error($"处理更新vgm链接消息失败未配置CMA网站账号、密码 {ordno} {order.MBLNO}");
return;
}
receiveUrl = paraMyshippingUrlService.PARAMVALUE;
webUser = accCfg.Account;
webPass = accCfg.Password;
}
else if (order.CARRIERID == "ONE")
{
var paraMyshippingUrlService = commonData.ParamSets.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "bookingWebUrlONE");
var accType = AccountConfigType.OneWeb.ToString();
var accCfg = commonData.AccountConfigs.AsNoTracking().FirstOrDefault(a => a.Type == accType && a.UserId == currUser.GID);
if (accCfg == null)
{
logger.Error($"处理更新vgm链接消息失败未配置ONE网站账号、密码 {ordno} {order.MBLNO}");
return;
}
receiveUrl = paraMyshippingUrlService.PARAMVALUE;
webUser = accCfg.Account;
webPass = accCfg.Password;
}
if (string.IsNullOrEmpty(order.CARRIERID)
|| string.IsNullOrEmpty(order.YARDID))
{
logger.Error($"处理更新vgm链接消息失败未填写船公司和场站 {ordno} {order.MBLNO}");
return;
}
CodeYardDataSet yardset = commonData.YardDataSet.AsNoTracking().FirstOrDefault(y => y.YARD == order.YARD);
if (yardset == null)
{
logger.Error($"处理更新vgm链接消息失败场站代号未找到 {ordno} {order.MBLNO} {order.YARD}");
return;
}
if (!receiveUrl.EndsWith("/"))
{
receiveUrl += "/";
}
//调用接口
var sendObj = new
{
SystemCode = "djy",
billOrderId = order.ORDNO,
sendOrderCode = order.MBLNO,
customerName = $"{currUser.COMNAME}+{currUser.SHOWNAME}", //公司名称+用户姓名
customerId = order.CUSTOMERID,
agentName = string.IsNullOrEmpty(order.FORWARDER) ? currUser.COMNAME : order.FORWARDER,
carrierCode = order.CARRIERID,
userName = webUser,
userPassword = webPass,
depotCode = yardset.YARDCODE,
depotName = order.YARD,
linkName = currUser.SHOWNAME,
linkMobile = currUserBase.OFFICEPHONE,
linkEmail = currUserBase.EMAIL1,
userId = currUser.GID,
returnUrl = $"{receiveUrl}Booking/RecVgmFeedback",
shipName = order.VESSEL,
voyNo = order.VOYNO,
etdstr = order.ETD.HasValue ? order.ETD.Value.ToString("yyyy-MM-dd") : string.Empty,
potrSend = order.PORTLOAD,
potrGoal = order.PORTDISCHARGE,
boxinfoStr = order.CNTRTOTAL,
vgmEndTimeStr = order.VGM_TIME.HasValue ? order.VGM_TIME.Value.ToString("yyyy-MM-dd") : string.Empty,
returnOkUrl = $"{receiveUrl}Booking/RecVgmOk",
SiReturnUrl = $"{receiveUrl}Booking/RecVgmSi",
DataInfoJson = new
{
order.SHIPPER,
order.CONSIGNEE,
order.NOTIFYPARTY,
order.MARKS,
order.DESCRIPTION,
order.BLFRT,
order.SERVICE,
order.ISSUETYPE,
order.TRANSPORT,
order.TRANSPORTID,
order.DESTINATION,
order.DESTINATIONID,
order.KINDPKGS,
order.THIRDPAYADDR,
order.PORTLOAD,
order.PORTLOADID,
order.PORTDISCHARGE,
order.PORTDISCHARGEID
}
};
try
{
var strJson = JsonConvert.SerializeObject(sendObj);
logger.Debug($"处理更新vgm链接消息发送生成vgm链接:{strJson}");
var rtn = WebRequestHelper.DoPost(paraVgmLinkService.PARAMVALUE, strJson, timeout: 5000);
logger.Debug($"调用生成vgm返回{rtn}");
var jobjRtn = JsonConvert.DeserializeAnonymousType(rtn, new { code = 0, status = false, message = string.Empty, data = string.Empty, memoData = new { vgmAndSiUrl = "", siUrl = "", vgmUrl = "" } });
if (!jobjRtn.status)
{
logger.Error($"处理更新vgm链接消息失败链接生成错误 {ordno} {order.MBLNO} {jobjRtn.message}");
return;
}
model.VGM_URL = jobjRtn.memoData.vgmUrl;
model.SI_VGM_URL = jobjRtn.memoData.vgmAndSiUrl;
//反馈vgm给捷丰
if (!string.IsNullOrEmpty(order.BSNO))
{
VgmFeedbackHelper.FeedbackVgmJiefeng(bookingDB, order.ORDNO, order.BSNO, "", jobjRtn.data);
}
bookingDB.SaveChanges();
logger.Error($"处理更新vgm链接消息成功{ordno} {order.MBLNO}");
}
catch (Exception ex)
{
logger.Error($"处理更新vgm链接消息失败调用生成vgm链接出错 {ex.Message}");
logger.Error(ex.StackTrace);
}
}
}
}