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.

299 lines
10 KiB
C#

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden 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 AngleSharp.Dom;
using Castle.Core.Resource;
using DS.Module.Core;
using DS.Module.Core.Extensions;
using DS.Module.SqlSugar;
using DS.Module.UserModule;
using DS.WMS.ContainerManagement.Info.Dtos;
using DS.WMS.ContainerManagement.Info.Entity;
using DS.WMS.ContainerManagement.Info.Interface;
using DS.WMS.Core.Fee.Entity;
using DS.WMS.Core.Info.Dtos;
using DS.WMS.Core.Info.Entity;
using DS.WMS.Core.Info.Interface;
using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Op.View;
using DS.WMS.Core.Sys.Entity;
using Mapster;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using NPOI.HPSF;
using SqlSugar;
using DS.Module;
using DS.Module.ExcelModule;
using DS.Module.ExcelModule.Model;
namespace DS.WMS.ContainerManagement.Info.Method;
public class CM_BaseInfoService : ICM_BaseInfoService
{
private readonly IServiceProvider _serviceProvider;
private readonly ISqlSugarClient db;
private readonly IUser user;
private readonly ISaasDbService saasService;
private readonly IEPPlusService epplusService;
private readonly ICM_State_Change_TemplatImportService templatImportService;
/// <summary>
///
/// </summary>
/// <param name="serviceProvider"></param>
public CM_BaseInfoService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
db = _serviceProvider.GetRequiredService<ISqlSugarClient>();
user = _serviceProvider.GetRequiredService<IUser>();
saasService = _serviceProvider.GetRequiredService<ISaasDbService>();
epplusService = _serviceProvider.GetRequiredService<IEPPlusService>();
templatImportService = _serviceProvider.GetRequiredService<ICM_State_Change_TemplatImportService>();
}
/// <summary>
/// 列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<DataResult<List<CM_BaseInfoRes>>> GetListByPage(PageRequest request)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
//序列化查询条件
var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
var data = tenantDb.Queryable<CM_BaseInfo>()
.Where(whereList)
.Select<CM_BaseInfoRes>().ToQueryPage(request.PageCondition);
return data;
}
//public async Task<DataResult<List<CM_CurrentStateRes>>> GetListByPage(PageRequest request)
//{
// var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
// //序列化查询条件
// var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
// var data = await tenantDb.Queryable<CM_CurrentStateRes>()
// .Where(whereList)
// .ToQueryPageAsync(request.PageCondition);
// return data;
//}
/// <summary>
/// 编辑
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public DataResult EditCM_BaseInfo(CM_BaseInfoReq req)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
if (req.Id == 0)
{
//if (tenantDb.Queryable<InfoClientAccountDate>().Where(x => x.AccountType == req.AccountType &&
// x.AccountType == req.AccountType &&
// x.SaleId == req.SaleId &&
// x.BeginDate == req.BeginDate &&
// x.EndDate == req.EndDate).Any())
//{
// return DataResult.Failed("客户账期信息已存在!", MultiLanguageConst.ClientAccountDateExist);
//}
var data = req.Adapt<CM_BaseInfo>();
var entity = tenantDb.Insertable(data).ExecuteReturnEntity();
var curr = tenantDb.Queryable<CM_CurrentState>().Where(x => x.CtnBaseinfoId == entity.Id).First();
if (curr != null && curr.Cntrno != entity.Cntrno)
{
curr.Cntrno = entity.Cntrno;
tenantDb.Updateable(curr).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
}
return DataResult.Successed("添加成功!", entity.Id, MultiLanguageConst.DataCreateSuccess);
}
else
{
var info = tenantDb.Queryable<CM_BaseInfo>().Where(x => x.Id == req.Id).First();
info = req.Adapt(info);
tenantDb.Updateable(info).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
var curr = tenantDb.Queryable<CM_CurrentState>().Where(x => x.CtnBaseinfoId == info.Id).First();
if (curr != null && curr.Cntrno != info.Cntrno)
{
curr.Cntrno = info.Cntrno;
tenantDb.Updateable(curr).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
}
return DataResult.Successed("更新成功!", MultiLanguageConst.DataUpdateSuccess);
}
}
/// <summary>
/// 详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public DataResult<CM_BaseInfoRes> GetCM_BaseInfo(string id)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
var data = tenantDb.Queryable<CM_BaseInfo>()
.Where(a => a.Id == long.Parse(id))
.Select<CM_BaseInfoRes>()
.First();
return DataResult<CM_BaseInfoRes>.Success(data, MultiLanguageConst.DataQuerySuccess);
}
//CM_CheckCntrno(CM_CheckCntrno model);
public DataResult<CM_CheckCntrnoRes> CM_CheckCntrno(CM_CheckCntrno req)
{
var Cntrno = req.Cntrno;
Cntrno = Cntrno.Replace("", ",");
Cntrno = Cntrno.Replace("", ",");
Cntrno = Cntrno.Replace("、", ",");
Cntrno = Cntrno.Replace(" ", ",");
Cntrno = Cntrno.Replace(" ", ",");
var splitchar = new char[] { ',', '\n', '\r', ' ', '\t', ';' };
//string[] itemsByCommaAndNewLine = Cntrno.Split();
var cntrnoList = new List<string>();
cntrnoList = Cntrno.Split(splitchar).ToList();
var result = new CM_CheckCntrnoRes();
if (cntrnoList != null) {
foreach (var cntrno in cntrnoList) {
var istrue = ValidateContainerNumber(cntrno);
result.AddCntrno(cntrno, istrue);
}
}
return DataResult <CM_CheckCntrnoRes>.Success(result,MultiLanguageConst.DataQuerySuccess);
}
public static int numtostr(char strcode)
{
int result = 0;
if (strcode == 'A') result = 10;
if (strcode == 'B') result = 12;
if (strcode == 'C') result = 13;
if (strcode == 'D') result = 14;
if (strcode == 'E') result = 15;
if (strcode == 'F') result = 16;
if (strcode == 'G') result = 17;
if (strcode == 'H') result = 18;
if (strcode == 'I') result = 19;
if (strcode == 'J') result = 20;
if (strcode == 'K') result = 21;
if (strcode == 'L') result = 23;
if (strcode == 'M') result = 24;
if (strcode == 'N') result = 25;
if (strcode == 'O') result = 26;
if (strcode == 'P') result = 27;
if (strcode == 'Q') result = 28;
if (strcode == 'R') result = 29;
if (strcode == 'S') result = 30;
if (strcode == 'T') result = 31;
if (strcode == 'U') result = 32;
if (strcode == 'V') result = 34;
if (strcode == 'W') result = 35;
if (strcode == 'X') result = 36;
if (strcode == 'Y') result = 37;
if (strcode == 'Z') result = 38;
return result;
}
public static bool ValidateContainerNumber(string containerNumber)
{
// 集装箱号的校验规则
// - 由4位字母ISO代码+ 6位数字 + 1位校验码组成
// - 校验码的计算方式是将字母转换为数字,然后按照一定的公式计算得出
if (containerNumber.Length != 11)
{
return false;
}
string letters = containerNumber.Substring(0, 4);
string numbers = containerNumber.Substring(4, 6);
string checkDigit = containerNumber.Substring(10, 1);
// 检查字母部分是否都是大写字母
if (!letters.All(char.IsUpper))
{
return false;
}
// 检查数字部分是否都是数字字符
if (!numbers.All(char.IsDigit))
{
return false;
}
// 计算校验码
int[] letterValues = letters.Select(c => numtostr(c)).ToArray();
int[] numberValues = numbers.Select(c => c - '0').ToArray();
int sum = letterValues[0] * 1 + letterValues[1] * 2 + letterValues[2] * 4 + letterValues[3] * 8;
int classint = 16;
for (int i = 0; i < numberValues.Length; i++)
{
if (i == 0) classint = 16;
if (i == 1) classint = 32;
if (i == 2) classint = 64;
if (i == 3) classint = 128;
if (i == 4) classint = 256;
if (i == 5) classint = 512;
sum += numberValues[i] * (classint);
}
int calculatedCheckDigit = sum % 11 % 10;
// 检查校验码是否匹配
if (calculatedCheckDigit != int.Parse(checkDigit))
{
return false;
}
return true;
}
/// <summary>
/// 处理附件
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<DataResult> CM_DealExcel(CM_DealExcelReq req)
{
var _r = await templatImportService.DealExcel(req);
return _r;
//return DataResult.Successed($"调用成功!{JsonConvert.SerializeObject(req)}", MultiLanguageConst.DataUpdateSuccess);
}
/// <summary>
/// 处理附件
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public DataResult CM_CheckCtnBase(CM_DealExcelReq req)
{
return DataResult.Successed($"", MultiLanguageConst.DataUpdateSuccess);
//var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
}
}