diff --git a/ds-wms-service/DS.WMS.FeeBillRecvService/DS.WMS.FeeBillRecvService.csproj b/ds-wms-service/DS.WMS.FeeBillRecvService/DS.WMS.FeeBillRecvService.csproj
index 0c83bc4b..f7cb63cc 100644
--- a/ds-wms-service/DS.WMS.FeeBillRecvService/DS.WMS.FeeBillRecvService.csproj
+++ b/ds-wms-service/DS.WMS.FeeBillRecvService/DS.WMS.FeeBillRecvService.csproj
@@ -21,4 +21,10 @@
+
+
+ Always
+
+
+
diff --git a/ds-wms-service/DS.WMS.FeeBillRecvService/Dtos/CustomerTypeEnum.cs b/ds-wms-service/DS.WMS.FeeBillRecvService/Dtos/CustomerTypeEnum.cs
new file mode 100644
index 00000000..5d463437
--- /dev/null
+++ b/ds-wms-service/DS.WMS.FeeBillRecvService/Dtos/CustomerTypeEnum.cs
@@ -0,0 +1,142 @@
+using iText.Kernel.Pdf.Canvas.Parser.ClipperLib;
+using iText.Layout.Properties;
+using Microsoft.AspNetCore.Mvc;
+using Spire.Xls.Core;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace DS.WMS.FeeBillRecvService
+{
+ ///
+ /// 客户类型枚举
+ ///
+ public enum CustomerTypeEnum
+ {
+ ///
+ /// 船公司
+ ///
+ [Description("船公司")]
+ carrier,
+ ///
+ /// 场站
+ ///
+ [Description("场站")]
+ yard,
+ ///
+ /// 订舱口
+ ///
+ [Description("订舱口")]
+ booking,
+ ///
+ /// 车队
+ ///
+ [Description("车队")]
+ truck,
+ ///
+ /// 委托单位
+ ///
+ [Description("委托单位")]
+ controller,
+ ///
+ /// 船公司
+ ///
+ [Description("报关行")]
+ custom,
+ ///
+ /// 代理(国外)
+ ///
+ [Description("代理(国外)")]
+ agent,
+ ///
+ /// 代理(国内)
+ ///
+ [Description("代理(国内)")]
+ agentcn,
+
+ ///
+ /// 快递公司
+ ///
+ [Description("快递公司")]
+ express,
+ ///
+ /// 航空公司
+ ///
+ [Description("航空公司")]
+ airlines,
+ ///
+ /// 发货人
+ ///
+ [Description("发货人")]
+ shipper,
+ ///
+ /// 收货人
+ ///
+ [Description("收货人")]
+ consignee,
+ ///
+ /// 通知人
+ ///
+ [Description("通知人")]
+ notifyParty,
+ ///
+ /// 仓库
+ ///
+ [Description("仓库")]
+ wareHouse,
+ ///
+ /// 通知人
+ ///
+ [Description("保险公司")]
+ insurer,
+ ///
+ /// 租箱公司
+ ///
+ [Description("租箱公司")]
+ leasing,
+ ///
+ /// 贸易代理
+ ///
+ [Description("贸易代理")]
+ tradingagency,
+ ///
+ /// 船代
+ ///
+ [Description("船代")]
+ shipagency,
+ ///
+ /// 经营单位
+ ///
+ [Description("经营单位")]
+ enterprise,
+ ///
+ /// 码头
+ ///
+ [Description("码头")]
+ wharf,
+ ///
+ /// 国内同行
+ ///
+ [Description("国内同行")]
+ domesticPeers,
+ ///
+ /// 国外同行
+ ///
+ [Description("国外同行")]
+ foreignCounterparts,
+ ///
+ /// 国内直客
+ ///
+ [Description("国内直客")]
+ isDirectCustomerCn,
+ ///
+ /// 国内发货人
+ ///
+ [Description("国内发货人")]
+ shippercn,
+ }
+}
diff --git a/ds-wms-service/DS.WMS.FeeBillRecvService/Dtos/FeeUnitEnum.cs b/ds-wms-service/DS.WMS.FeeBillRecvService/Dtos/FeeUnitEnum.cs
new file mode 100644
index 00000000..e76acf0e
--- /dev/null
+++ b/ds-wms-service/DS.WMS.FeeBillRecvService/Dtos/FeeUnitEnum.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DS.WMS.FeeBillRecvService
+{
+ ///
+ /// 计费标准枚举
+ ///
+ public enum FeeUnitEnum
+ {
+ ///
+ /// 单票
+ ///
+ [Description("单票")]
+ P,
+ ///
+ /// 重量
+ ///
+ [Description("重量")]
+ Z,
+ ///
+ /// 尺码
+ ///
+ [Description("尺码")]
+ C,
+ ///
+ /// 件数
+ ///
+ [Description("件数")]
+ J,
+ ///
+ /// 计费吨
+ ///
+ [Description("计费吨")]
+ JF,
+ ///
+ /// TEU
+ ///
+ [Description("TEU")]
+ TEU,
+ ///
+ /// 净重
+ ///
+ [Description("净重")]
+ JZ,
+ ///
+ /// 总价
+ ///
+ [Description("总价")]
+ ZJ,
+ ///
+ /// 计价重量
+ ///
+ [Description("计价重量")]
+ JJZL,
+ ///
+ /// 箱型
+ ///
+ [Description("箱型")]
+ XX,
+ ///
+ /// 天
+ ///
+ [Description("天")]
+ DAY,
+ ///
+ /// 个
+ ///
+ [Description("个")]
+ GE,
+ ///
+ /// 小时
+ ///
+ [Description("小时")]
+ HOUR,
+ ///
+ /// 票
+ ///
+ [Description("票")]
+ Bill,
+ ///
+ /// 箱
+ ///
+ [Description("箱")]
+ CNTR,
+ }
+}
diff --git a/ds-wms-service/DS.WMS.FeeBillRecvService/RecvFeeBillWorker.cs b/ds-wms-service/DS.WMS.FeeBillRecvService/RecvFeeBillWorker.cs
index c6322518..17acda4f 100644
--- a/ds-wms-service/DS.WMS.FeeBillRecvService/RecvFeeBillWorker.cs
+++ b/ds-wms-service/DS.WMS.FeeBillRecvService/RecvFeeBillWorker.cs
@@ -3,10 +3,25 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using DS.Module.Core;
+using DS.Module.Core.Data;
+using DS.Module.SqlSugar;
+using DS.Module.UserModule;
+using DS.WMS.Core.Fee.Entity;
+using DS.WMS.Core.HangfireJob.Interface;
+using DS.WMS.Core.Info.Entity;
+using DS.WMS.Core.Op.Entity;
+using DS.WMS.Core.Sys.Entity;
+using DS.WMS.FeeBillRecvService.Dtos;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using NPOI.OpenXmlFormats.Wordprocessing;
+using Org.BouncyCastle.Ocsp;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
+using SqlSugar;
namespace DS.WMS.FeeBillRecvService
{
@@ -15,43 +30,25 @@ namespace DS.WMS.FeeBillRecvService
private readonly ILogger _logger;
private IConnection mqConn;
private IModel model;
+ private readonly IServiceProvider _serviceProvider;
+ private readonly ISqlSugarClient db;
+ private readonly IUser user;
+ private readonly ISaasDbService saasService;
- public RecvFeeBillWorker(ILogger logger)
- {
- _logger = logger;
- }
-
- public override async Task StartAsync(CancellationToken stoppingToken)
+ public RecvFeeBillWorker(IServiceProvider serviceProvider,
+ ILogger logger)
{
- try
- {
- //while (!stoppingToken.IsCancellationRequested)
- //{
- // _OpServer = new BackgroundJobServer(new BackgroundJobServerOptions
- // {
- // SchedulePollingInterval = TimeSpan.FromMinutes(1),
- // ServerName = "OpWorkService",
- // Queues = new[] { "op" }
- // });
- // await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
- //}
- }
- catch (OperationCanceledException ex)
- {
- Console.WriteLine(ex.ToString());
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- //Environment.Exit(1);
- }
-
+ _logger = logger;
+ _serviceProvider = serviceProvider;
+ db = _serviceProvider.GetRequiredService();
+ user = _serviceProvider.GetRequiredService();
+ saasService = _serviceProvider.GetRequiredService();
}
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
- _logger.LogInformation("启动j账单 ExecuteAsync");
+ _logger.LogInformation("启动账单 ExecuteAsync");
return Task.Run(() =>
{
@@ -65,14 +62,18 @@ namespace DS.WMS.FeeBillRecvService
private void BindMQ()
{
- string ExchangeName = "billcenter.output.ds7new.444c19c1-0bf5-4709-a08b-c9859ca775e6";
- string QueueName = $"billcenter.output.ds7new.444c19c1-0bf5-4709-a08b-c9859ca775e6";
+ //string ExchangeName = "billcenter.output.ds7new.444c19c1-0bf5-4709-a08b-c9859ca775e6";
+ //string QueueName = $"billcenter.output.ds7new.444c19c1-0bf5-4709-a08b-c9859ca775e6";
+
+ string ExchangeName = AppSetting.app(new string[] { "FeeSettings", "ExchangeName" });
+ string QueueName = AppSetting.app(new string[] { "FeeSettings", "QueueName" });
+ var mqUrl = AppSetting.app(new string[] { "FeeSettings", "MQUrl" });
ConnectionFactory factory = new ConnectionFactory();
//var repoSysCfg = _serviceScope.ServiceProvider.GetService>();
- var mqUrl = "amqp://djy_mail:djymailqwe@47.104.207.5:12567/djy_email_parser";
+ //var mqUrl = "amqp://dongsheng8bill:dongsheng8bill@47.104.207.5:12567/billcenter";
//var mqUrl = repoSysCfg.FirstOrDefault(x => x.Code == "DjyBookingAutoMQUrl")?.Value;
if (string.IsNullOrEmpty(mqUrl))
{
@@ -86,7 +87,7 @@ namespace DS.WMS.FeeBillRecvService
model = mqConn.CreateModel();
model.ExchangeDeclare(ExchangeName, ExchangeType.Topic);
- model.QueueDeclare(QueueName, false, false, true, null);
+ model.QueueDeclare(QueueName, false, false, false, null);
model.QueueBind(QueueName, ExchangeName, "*", null);
var consumer = new EventingBasicConsumer(model);
@@ -95,6 +96,9 @@ namespace DS.WMS.FeeBillRecvService
var body = arg.Body;
var strBody = Encoding.UTF8.GetString(body.ToArray());
_logger.LogInformation($"收到订舱自动化消息队列:{strBody}");
+
+ DoWork(strBody);
+
};
model.BasicConsume(QueueName, true, consumer);
}
@@ -110,10 +114,197 @@ namespace DS.WMS.FeeBillRecvService
_logger.LogInformation("BookingAutoService Dispose");
}
- private async Task DoWork(CancellationToken cancellationToken)
+ private void DoWork(string json)
+ {
+ /*
+ 1、反串行化报文,转成对象
+ 2、用提单号检索订单信息,如果匹配不到订单信息需要生成待办任务。
+ 3、入库费用并写入订单的应付费用表
+ */
+
+ string msg = string.Empty;
+
+ try
+ {
+ var model = GetInfo(json, out msg);
+
+ _logger.LogInformation($"报文转换完成 GID={model.GID} BookingBill={model.BookingBill} 共【{model.DetailList.Count}】条");
+
+ //var tenantDb = saasService.GetBizJobDbScopeById(new JobDbInitConfig
+ //{
+ // UserId = 1819549542463442944,
+ // UserName = "东胜8测试",
+ // TenantId = 1819549542425694208,
+ // OrgId = 1819557001806614528
+
+ //});
+
+ var tenantDb = saasService.GetBizJobDbScopeById(new JobDbInitConfig
+ {
+ //UserId = long.Parse(AppSetting.app(new string[] { "FeeSettings", "UserId" })),
+ //UserName = AppSetting.app(new string[] { "FeeSettings", "UserName" }),
+ TenantId = long.Parse(AppSetting.app(new string[] { "FeeSettings", "TenantId" })),
+ //OrgId = long.Parse(AppSetting.app(new string[] { "FeeSettings", "OrgId" })),
+ });
+
+ _logger.LogInformation($"提取对应租户数据访问完成 GID={model.GID} BookingBill={model.BookingBill}");
+
+ string blno = model.BookingBill?.Trim();
+
+ _logger.LogInformation($"提取订单信息 GID={model.GID} BookingBill={model.BookingBill}");
+
+ var booking = tenantDb.Queryable().ClearFilter(typeof(IOrgId)).First(a => a.MBLNO == blno && a.Deleted == false && (a.IsRefund == null || a.IsRefund.Value == false)
+ && (a.IsChangeETD == null || a.IsChangeETD.Value == false));
+
+ _logger.LogInformation($"提取订单完成 GID={model.GID} BookingBill={model.BookingBill} Order={JsonConvert.SerializeObject(booking)}");
+
+
+ if (booking != null)
+ {
+ DateTime nowDate = DateTime.Now;
+
+ var custTypeDict = DS.Module.Core.EnumUtil.GetEnumDictionaryWithKey(typeof(CustomerTypeEnum));
+
+ var feeUnitDict = DS.Module.Core.EnumUtil.GetEnumDictionaryWithKey(typeof(FeeUnitEnum));
+
+ var codeCurrency = tenantDb.Queryable().ToList();
+
+ var userInfo = db.Queryable().Filter(null, true).First(x => x.Id == booking.OperatorId && x.TenantId == long.Parse("1819549542425694208"));
+
+ List errorMsgList = new List();
+
+ int start = 1;
+
+ foreach (var fee in model.DetailList)
+ {
+ string qFee = fee.CustSysName?.Trim();
+
+ //if(string.IsNullOrWhiteSpace(qFee))
+ //{
+ // errorMsgList.Add("没有费用名称");
+
+ // continue;
+ //}
+
+ var feecode = tenantDb.Queryable().First(x => x.Name == qFee);
+
+ if (feecode == null)
+ {
+
+ }
+
+ var newfee = new FeeRecord();
+
+ newfee.BusinessId = booking.Id;
+ newfee.FeeId = feecode.Id;
+ newfee.FeeName = feecode.Name;
+ newfee.FeeCode = feecode.Code;
+ newfee.TaxRate = feecode.TaxRate == null ? 0 : (decimal)feecode.TaxRate;
+ newfee.BusinessType = BusinessType.OceanShippingExport;
+
+ string custShortName = string.Empty;
+ string custType = string.Empty;
+
+ if (fee.CustSettleFor.IndexOf("#") >= 0)
+ {
+ var currArg = fee.CustSettleFor.Split(new char[] { '#' });
+ custShortName = currArg[0]?.Trim();
+
+ if (currArg.Length == 2)
+ {
+ custType = currArg[1].Trim();
+ }
+ }
+ else
+ {
+ custShortName = fee.CustSettleFor?.Trim();
+ }
+
+ var customerInfo = tenantDb.Queryable().ClearFilter(typeof(IOrgId)).First(x => x.ShortName == custShortName);
+
+ newfee.CustomerId = customerInfo.Id;
+ newfee.CustomerName = customerInfo.Description;
+
+ var custTypeKey = custTypeDict.FirstOrDefault(x => x.Value == custType);
+
+ newfee.CustomerType = custTypeKey.Key;
+ newfee.CustomerTypeText = custTypeKey.Value;
+
+
+ newfee.FeeType = FeeType.Payable; //租箱月结明细.FeeType;
+
+
+ var feeUnitKey = feeUnitDict.FirstOrDefault(x => x.Value == fee.CustFeeStandard?.Trim());
+
+ newfee.Unit = feeUnitKey.Key;
+ newfee.UnitText = feeUnitKey.Value;
+
+ var currCurrCode = codeCurrency.First(a => a.CodeName == fee.CustCurrency);
+
+ newfee.Currency = currCurrCode.CodeName;
+
+ if (!fee.UnitPrice.HasValue)
+ {
+ if (fee.Quantity.HasValue && fee.Amount.HasValue)
+ {
+ var price = fee.Amount.Value / fee.Quantity.Value;
+
+ newfee.TaxUnitPrice = price;
+ }
+ else
+ {
+ newfee.TaxUnitPrice = 0;
+ }
+ }
+ else
+ {
+ newfee.TaxUnitPrice = fee.UnitPrice.Value;
+ }
+
+ newfee.Quantity = fee.Quantity.HasValue ? fee.Quantity.Value : 0;
+ newfee.Amount = fee.Amount.HasValue ? fee.Amount.Value : 0;
+
+ newfee.CreateTime = nowDate;
+ newfee.CreateBy = userInfo.Id;
+ newfee.CreateUserName = userInfo.UserName;
+ newfee.UpdateTime = nowDate;
+
+ newfee.Note = "大简云账单解析";
+
+ _logger.LogInformation($"写入账单开始 第【{start}】条 GID={model.GID} BookingBill={model.BookingBill} Order={JsonConvert.SerializeObject(newfee)}");
+
+ tenantDb.Insertable(newfee).ExecuteCommand();
+
+ _logger.LogInformation($"写入账单完成 第【{start}】条 GID={model.GID} BookingBill={model.BookingBill} Order={JsonConvert.SerializeObject(newfee)}");
+
+ start++;
+ }
+ }
+
+
+ }
+ catch (Exception ex)
+ {
+ _logger.LogInformation($"产生异常,原因:{ex.Message}");
+
+ }
+ }
+
+ private FeeBillReadDto GetInfo(string json,out string msg)
{
- // 这里放你的业务逻辑代码
- await Task.CompletedTask;
+ FeeBillReadDto model = null;
+ msg = string.Empty;
+
+ try
+ {
+ model = JsonConvert.DeserializeObject(json);
+ }
+ catch(Exception ex)
+ {
+ msg = $"转换报文异常,原因:{ex.Message}";
+ }
+
+ return model;
}
}
}
diff --git a/ds-wms-service/DS.WMS.FeeBillRecvService/appsettings.json b/ds-wms-service/DS.WMS.FeeBillRecvService/appsettings.json
index 993532c9..36c150fc 100644
--- a/ds-wms-service/DS.WMS.FeeBillRecvService/appsettings.json
+++ b/ds-wms-service/DS.WMS.FeeBillRecvService/appsettings.json
@@ -18,5 +18,15 @@
"Connection": "server=rm-m5e06xxqpa68a68ry5o.mysql.rds.aliyuncs.com;port=3306;uid=rulesengine_admin;pwd=Rule1qaz2wsx!QAZ;database=shippingweb8_log"
}
]
+ },
+ "FeeSettings": {
+ "ShowName": "昭阳接收邮件账单",
+ "UserId": "1819549542463442944",
+ "UserName": "东胜8测试",
+ "TenantId": "1819549542425694208",
+ "OrgId": "1819557001806614528",
+ "ExchangeName": "billcenter.output.ds7new.444c19c1-0bf5-4709-a08b-c9859ca775e6",
+ "QueueName": "billcenter.output.ds7new.444c19c1-0bf5-4709-a08b-c9859ca775e6",
+ "MQUrl": "amqp://dongsheng8bill:dongsheng8bill@47.104.207.5:12567/billcenter"
}
}
diff --git a/ds-wms-service/DS.WMS.FeeBillRecvService/nlog.config b/ds-wms-service/DS.WMS.FeeBillRecvService/nlog.config
new file mode 100644
index 00000000..46e6f7cb
--- /dev/null
+++ b/ds-wms-service/DS.WMS.FeeBillRecvService/nlog.config
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file