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; /// /// /// /// public CM_BaseInfoService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); saasService = _serviceProvider.GetRequiredService(); epplusService = _serviceProvider.GetRequiredService(); templatImportService = _serviceProvider.GetRequiredService(); } /// /// 列表 /// /// /// public async Task>> GetListByPage(PageRequest request) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); var data = tenantDb.Queryable() .Where(whereList) .Select().ToQueryPage(request.PageCondition); return data; } //public async Task>> GetListByPage(PageRequest request) //{ // var tenantDb = saasService.GetBizDbScopeById(user.TenantId); // //序列化查询条件 // var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); // var data = await tenantDb.Queryable() // .Where(whereList) // .ToQueryPageAsync(request.PageCondition); // return data; //} /// /// 编辑 /// /// /// public DataResult EditCM_BaseInfo(CM_BaseInfoReq req) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); if (req.Id == 0) { //if (tenantDb.Queryable().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(); var entity = tenantDb.Insertable(data).ExecuteReturnEntity(); var curr = tenantDb.Queryable().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().Where(x => x.Id == req.Id).First(); info = req.Adapt(info); tenantDb.Updateable(info).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); var curr = tenantDb.Queryable().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); } } /// /// 详情 /// /// /// public DataResult GetCM_BaseInfo(string id) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); var data = tenantDb.Queryable() .Where(a => a.Id == long.Parse(id)) .Select() .First(); return DataResult.Success(data, MultiLanguageConst.DataQuerySuccess); } //CM_CheckCntrno(CM_CheckCntrno model); public DataResult 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(); 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 .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; } /// /// 处理附件 /// /// /// public async Task CM_DealExcel(CM_DealExcelReq req) { var _r = await templatImportService.DealExcel(req); return _r; //return DataResult.Successed($"调用成功!{JsonConvert.SerializeObject(req)}", MultiLanguageConst.DataUpdateSuccess); } /// /// 处理附件 /// /// /// public DataResult CM_CheckCtnBase(CM_DealExcelReq req) { return DataResult.Successed($"", MultiLanguageConst.DataUpdateSuccess); //var tenantDb = saasService.GetBizDbScopeById(user.TenantId); } }