/* *所有关于Dt_materielinfo类的业务代码应在此处编写 *可使用repository.调用常用方法,获取EF/Dapper等信息 *如果需要事务请使用repository.DbContextBeginTransaction *也可使用DBServerProvider.手动获取数据库相关信息 *用户信息、权限、角色等使用UserContext.Current操作 *Dt_materielinfoService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter */ using WIDESEA.Core.BaseProvider; using WIDESEA.Core.Extensions.AutofacManager; using WIDESEA.Entity.DomainModels; using System.Linq; using WIDESEA.Core.Utilities; using System.Linq.Expressions; using WIDESEA.Core.Extensions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Http; using WIDESEA.Services.IRepositories; using System; using WIDESEA.Core.ManageUser; using WIDESEA.Core.Enums; using WIDESEA.Core.Services; using System.Threading.Tasks; using Newtonsoft.Json; using System.Collections.Generic; using Microsoft.Extensions.Caching.Memory; using WIDESEA.Services.Repositories; using WIDESEA_Common.LogEnum; using WIDESEA_Entity.DomainModels; using WIDESEA.Common.SubType; namespace WIDESEA.Services.Services { public partial class dt_rulerService { private readonly IHttpContextAccessor _httpContextAccessor; private readonly Idt_rulerRepository _repository;//访问数据库 [ActivatorUtilitiesConstructor] public dt_rulerService( Idt_rulerRepository dbRepository, IHttpContextAccessor httpContextAccessor ) : base(dbRepository) { _httpContextAccessor = httpContextAccessor; _repository = dbRepository; //多租户会用到这init代码,其他情况可以不用 //base.Init(dbRepository); } public override WebResponseContent Add(SaveModel saveDataModel) { WebResponseContent content = new WebResponseContent(); try { string trainType = saveDataModel.MainData["ruler_trainType"].ToString(); string madeUnit = saveDataModel.MainData["ruler_madeUnit"].ToString(); string standard = saveDataModel.MainData["ruler_standard"].ToString(); string type = saveDataModel.MainData["ruler_type"].ToString(); string charstr = saveDataModel.MainData["ruler_char"].ToString(); string length = saveDataModel.MainData["ruler_length"].ToString(); string style = saveDataModel.MainData["ruler_style"].ToString(); if (charstr.Length != 1) throw new Exception("分割类型字符长度仅限1个"); if (!length.Contains("|")) throw new Exception("截取类型格式异常,应为*|*"); if (repository.Exists(x => x.ruler_trainType == trainType && x.ruler_madeUnit == madeUnit && x.ruler_standard == standard)) { throw new Exception($"已存在{trainType}车型、{madeUnit}厂家,{standard}新旧类型的规则,无需添加"); } dt_ruler ruler1 = new dt_ruler { ruler_name = "", ruler_trainType = trainType, ruler_char = charstr, ruler_length = length, ruler_style = style, ruler_type = type, ruler_madeUnit = madeUnit, ruler_standard = standard, ruler_create = UserContext.Current.UserName, ruler_createTime = DateTime.Now, }; repository.Add(ruler1, true); return content.OK("添加成功"); } catch (Exception ex) { return content.Error(ex.Message); } } public override WebResponseContent Update(SaveModel saveDataModel) { WebResponseContent content = new WebResponseContent(); try { int keyID = Convert.ToInt32(saveDataModel.MainData["ruler_id"]); string trainType = saveDataModel.MainData["ruler_trainType"].ToString(); string madeUnit = saveDataModel.MainData["ruler_madeUnit"].ToString(); string standard = saveDataModel.MainData["ruler_standard"].ToString(); string type = saveDataModel.MainData["ruler_type"].ToString(); string charstr = saveDataModel.MainData["ruler_char"].ToString(); string length = saveDataModel.MainData["ruler_length"].ToString(); string style = saveDataModel.MainData["ruler_style"].ToString(); //if (repository.Exists(x => x.ruler_trainType == trainType && x.ruler_madeUnit == madeUnit && x.ruler_standard == standard)) //{ // throw new Exception($"已存在{trainType}车型、{madeUnit}厂家,{standard}新旧类型的规则,禁止修改!"); //} dt_ruler ruler = repository.FindFirst(x => x.ruler_id == keyID); ruler.ruler_trainType = trainType; ruler.ruler_madeUnit = madeUnit; ruler.ruler_standard = standard; ruler.ruler_type = type; ruler.ruler_char = charstr; ruler.ruler_length = length; ruler.ruler_style = style; ruler.ruler_name = ""; ruler.ruler_create = UserContext.Current.UserName; ruler.ruler_createTime = DateTime.Now; repository.Update(ruler, true); return content.OK("修改成功"); } catch (Exception ex) { return content.Error(ex.Message); } } public WebResponseContent GetDateTimeByRule(string trainType, string madeUnit, string standard, string zcCode) { WebResponseContent content = new WebResponseContent(); try { string subDate = string.Empty; dt_ruler ruler = repository.FindFirst(x => x.ruler_trainType == trainType && x.ruler_madeUnit == madeUnit && x.ruler_standard == standard); if (null == ruler) { content.Code = "404"; return content.Error("未匹配到规则"); } if (ruler.ruler_type == SubType.Split.ToString()) //分割类型 { subDate = zcCode.Split(ruler.ruler_char)[0]; } else if (ruler.ruler_type == SubType.Sub.ToString()) //截取类型 { int subStart = Convert.ToInt32(ruler.ruler_length.Split('|')[0]); int subEnd = Convert.ToInt32(ruler.ruler_length.Split('|')[1]); string dateValue = zcCode.Substring(subStart, subEnd); //DateTime.Parse(datetime); subDate = GetDateByRulerStyle(ruler, dateValue); } return content.OK(data: subDate); } catch (Exception ex) { return content.Error($"{ex.Message}"); } } /// /// 根据规则截取日期和日期格式后 整合成新日期 /// /// /// private string GetDateByRulerStyle(dt_ruler ruler, string dateValue) { string NewDate = string.Empty; switch (ruler.ruler_style) { case "MMyy": NewDate = "20" + dateValue.Substring(2, 2) + "-" + dateValue.Substring(0, 2) + "-01"; break; case "yyyyMMDD": NewDate = dateValue.Substring(0, 4) + "-" + dateValue.Substring(4, 2) + "-" + dateValue.Substring(6, 2); break; case "yy-MM": NewDate = "20" + dateValue.Split("-")[0] + "-" + dateValue.Split("-")[1] + "-01"; break; case "MM/yy": NewDate = "20" + dateValue.Split("/")[1] + "-" + dateValue.Split("/")[0] + "-01"; break; case "DDMMyy": NewDate = "20" + dateValue.Substring(4, 2) + "-" + dateValue.Substring(2, 2) + "-" + dateValue.Substring(0, 2); break; case "yyMM": NewDate = "20" + dateValue.Substring(0, 2) + "-" + dateValue.Substring(2, 2) + "-01"; break; case "yyyy-MM": NewDate = dateValue.Split("-")[0] + "-" + dateValue.Split("-")[1] + "-01"; break; case "MM-yy": NewDate = "20" + dateValue.Split("-")[1] + "-" + dateValue.Split("-")[0] + "-01"; break; default: NewDate = ""; break; } return NewDate; //if (ruler.ruler_style == "MMyy") // return NewDate = "20" + dateValue.Substring(2, 2) + "-" + dateValue.Substring(0, 2) + "-01"; //if (ruler.ruler_style == "yyyyMMDD") // return NewDate = dateValue.Substring(0, 4) + "-" + dateValue.Substring(4, 2) + "-" + dateValue.Substring(6, 2); } } }