/*
*所有关于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);
}
}
}