Commit b5cdac1d by xin.yang

some update

parent 81afe7d9
...@@ -20,8 +20,6 @@ using Siger.Middlelayer.Repository.Repositories.Interface; ...@@ -20,8 +20,6 @@ using Siger.Middlelayer.Repository.Repositories.Interface;
using Siger.Middlelayer.Repository.Response; using Siger.Middlelayer.Repository.Response;
using Siger.Middlelayer.Utility.Helpers; using Siger.Middlelayer.Utility.Helpers;
using Siger.Middlelayer.Utility.ImportEntities; using Siger.Middlelayer.Utility.ImportEntities;
using Siger.Middlelayer.Dapper.CheckTrace.Repostriories;
using Siger.Middlelayer.Dapper.CheckTrace.Data;
using Siger.ApiQMS.Utility; using Siger.ApiQMS.Utility;
using UploadFileModel = Siger.Middlelayer.QmsRepository.Response.UploadFileModel; using UploadFileModel = Siger.Middlelayer.QmsRepository.Response.UploadFileModel;
using Siger.Middlelayer.Repository.Entities; using Siger.Middlelayer.Repository.Entities;
...@@ -377,7 +375,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -377,7 +375,7 @@ namespace Siger.ApiQMS.Controllers
} }
insertDetailList.Add(new SnTraceDetailList insertDetailList.Add(new SnTraceDetailList
{ {
TraceID = 0, TraceID = "",
ItemID = detail.itemid, ItemID = detail.itemid,
Result = detail.result, Result = detail.result,
Value = detail.value, Value = detail.value,
...@@ -417,7 +415,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -417,7 +415,7 @@ namespace Siger.ApiQMS.Controllers
} }
insertDetailList.Add(new SnTraceDetailList insertDetailList.Add(new SnTraceDetailList
{ {
TraceID = 0, TraceID = "",
ItemID = detail.itemid, ItemID = detail.itemid,
Result = detailResult, Result = detailResult,
Value = detail.value, Value = detail.value,
...@@ -430,13 +428,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -430,13 +428,7 @@ namespace Siger.ApiQMS.Controllers
} }
} }
} }
var _traceRepostory = new TraceDetailRepository(CompanyId, ProjectId); var traceId = Guid.NewGuid().ToString();
var resDetails = new List<SnTraceDetailList>();
var traceId = _traceRepostory.InsertTraceDetailReturnTraceIdNumberIndex(trace, insertDetailList, ProjectId, out resDetails);
if (traceId <= 0)
{
throw new BadRequestException(CommonEnum.Fail);
}
var nowTime = DateTime.Now; var nowTime = DateTime.Now;
var machineIds = _machineAttributionRepository.GetList(t => t.projectid == ProjectId && t.station == sendTest.sectionid && var machineIds = _machineAttributionRepository.GetList(t => t.projectid == ProjectId && t.station == sendTest.sectionid &&
t.status == (int)RowState.Valid && t.attribution == (int)MachineAttributionEnum.equipment).Select(t => t.machine).ToList(); t.status == (int)RowState.Valid && t.attribution == (int)MachineAttributionEnum.equipment).Select(t => t.machine).ToList();
...@@ -853,11 +845,6 @@ namespace Siger.ApiQMS.Controllers ...@@ -853,11 +845,6 @@ namespace Siger.ApiQMS.Controllers
} }
if (_unitOfWork.Commit() > 0) if (_unitOfWork.Commit() > 0)
{ {
if(data.trace_id > 0)
{
var _traceRepostory = new TraceDetailRepository(CompanyId, ProjectId);
_traceRepostory.DeleteData(data.trace_id);
}
return new ObjectResult(CommonEnum.Succefull); return new ObjectResult(CommonEnum.Succefull);
} }
else else
...@@ -921,24 +908,6 @@ namespace Siger.ApiQMS.Controllers ...@@ -921,24 +908,6 @@ namespace Siger.ApiQMS.Controllers
var delTraceDetails = _traceDetailRepository.GetList(t => t.projectid == ProjectId && t.status == (int)RowState.Valid && var delTraceDetails = _traceDetailRepository.GetList(t => t.projectid == ProjectId && t.status == (int)RowState.Valid &&
t.TraceID == sendTest.trace_id).ToList(); t.TraceID == sendTest.trace_id).ToList();
var _traceRepostory = new TraceDetailRepository(CompanyId, ProjectId);
var snTrace = _traceRepostory.GetSnTrace(sendTest.trace_id, ProjectId);
var trace = new SnTrace
{
MaterialID = sendTest.materialid,
ProductID = sendTest.productid,
SectionID = sendTest.sectionid,
MachineID = machine?.id ?? 0,
WorkOrder = "",
SN = sendTest.sn ?? "",
Result = (result == (int)SendTestType.Qalified || result == (int)SendTestType.DeviationRelease) ? "OK" : "NG",
UserID = snTrace == null ? sendTest.check_mid : snTrace.UserID,
RouteID = sendTest.routeid,
CreateTime = snTrace == null ? ((sendTest.check_time.HasValue && sendTest.check_time != DateTime.MinValue) ?
sendTest.check_time.Value : DateTime.Now) : snTrace.CreateTime,
CheckType = sendTest.check_type
};
var insertDetailList = new List<SnTraceDetailList>(); var insertDetailList = new List<SnTraceDetailList>();
foreach (var index in indexs) foreach (var index in indexs)
{ {
...@@ -958,7 +927,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -958,7 +927,7 @@ namespace Siger.ApiQMS.Controllers
} }
insertDetailList.Add(new SnTraceDetailList insertDetailList.Add(new SnTraceDetailList
{ {
TraceID = 0, TraceID = "",
ItemID = detail.itemid, ItemID = detail.itemid,
Result = detail.result, Result = detail.result,
Value = detail.value, Value = detail.value,
...@@ -998,7 +967,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -998,7 +967,7 @@ namespace Siger.ApiQMS.Controllers
} }
insertDetailList.Add(new SnTraceDetailList insertDetailList.Add(new SnTraceDetailList
{ {
TraceID = 0, TraceID = "",
ItemID = detail.itemid, ItemID = detail.itemid,
Result = detailResult, Result = detailResult,
Value = detail.value, Value = detail.value,
...@@ -1012,30 +981,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -1012,30 +981,7 @@ namespace Siger.ApiQMS.Controllers
} }
} }
var traceId = Guid.NewGuid().ToString();
// 删除旧数据
if (sendTest.trace_id > 0)
{
_traceRepostory.DeleteDetail(sendTest.trace_id);
}
long traceId = 0;
var resDetails = new List<SnTraceDetailList>();
if(snTrace == null)//如果没有这条数据,则插入trace,trace_detail,如果有直插入trace_detail
{
traceId = _traceRepostory.InsertTraceDetailReturnTraceIdNumberIndex(trace, insertDetailList, ProjectId, out resDetails);
}
else
{
if (_traceRepostory.InsertTraceOnlyDetailsReturnNumerIndex(snTrace, insertDetailList, ProjectId, trace.Result, out resDetails))
{
traceId = snTrace.ID;
}
}
if (traceId <= 0)
{
throw new BadRequestException(CommonEnum.Fail);
}
sendTest.result = req.result ?? ""; sendTest.result = req.result ?? "";
sendTest.trace_id = traceId; sendTest.trace_id = traceId;
sendTest.number = req.number.ToInt(); sendTest.number = req.number.ToInt();
...@@ -1076,7 +1022,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -1076,7 +1022,7 @@ namespace Siger.ApiQMS.Controllers
LowerLimit = detail.LowerLimit, LowerLimit = detail.LowerLimit,
UpperLimit = detail.UpperLimit, UpperLimit = detail.UpperLimit,
projectid = ProjectId, projectid = ProjectId,
CreateTime = trace.CreateTime CreateTime = sendTest.checking_time.HasValue ? sendTest.checking_time.Value : DateTime.Now
}; };
_traceDetailRepository.Insert(model); _traceDetailRepository.Insert(model);
} }
...@@ -1086,11 +1032,6 @@ namespace Siger.ApiQMS.Controllers ...@@ -1086,11 +1032,6 @@ namespace Siger.ApiQMS.Controllers
throw new BadRequestException(CommonEnum.Fail); throw new BadRequestException(CommonEnum.Fail);
} }
if (snTrace == null)//如果时新插入的数据,添加SN
{
AddSnList(sendTest, trace);
}
return new ObjectResult(CommonEnum.Succefull); return new ObjectResult(CommonEnum.Succefull);
} }
......
...@@ -12,7 +12,6 @@ using Siger.Middlelayer.QmsRepository.Request; ...@@ -12,7 +12,6 @@ using Siger.Middlelayer.QmsRepository.Request;
using Siger.Middlelayer.QmsRepository.Response; using Siger.Middlelayer.QmsRepository.Response;
using Siger.Middlelayer.Repository.Repositories.Interface; using Siger.Middlelayer.Repository.Repositories.Interface;
using Siger.Middlelayer.Repository.Entities; using Siger.Middlelayer.Repository.Entities;
using Siger.Middlelayer.Dapper.CheckTrace.Repostriories;
using Siger.Middlelayer.Repository.Response; using Siger.Middlelayer.Repository.Response;
using Siger.Middlelayer.QmsRepository.Entities; using Siger.Middlelayer.QmsRepository.Entities;
using Siger.Middlelayer.Utility.Helpers; using Siger.Middlelayer.Utility.Helpers;
...@@ -80,7 +79,6 @@ namespace Siger.ApiQMS.Controllers ...@@ -80,7 +79,6 @@ namespace Siger.ApiQMS.Controllers
} }
var maxLevel = _levelRepository.GetList(t => t.projectid == ProjectId && t.status == (int)RowState.Valid) var maxLevel = _levelRepository.GetList(t => t.projectid == ProjectId && t.status == (int)RowState.Valid)
.OrderByDescending(t => t.id).FirstOrDefault(); .OrderByDescending(t => t.id).FirstOrDefault();
var _traceRepostory = new TraceDetailRepository(CompanyId, ProjectId);
if (req.x_id.ToInt() == 0) if (req.x_id.ToInt() == 0)
{ {
var sectionIds = new List<int>(); var sectionIds = new List<int>();
...@@ -95,9 +93,8 @@ namespace Siger.ApiQMS.Controllers ...@@ -95,9 +93,8 @@ namespace Siger.ApiQMS.Controllers
sectionIds = ChannelSectionHelper.GetSonLevelSectionList(req.sectionid.ToInt(), levelSections).Select(m => m.id).ToList(); sectionIds = ChannelSectionHelper.GetSonLevelSectionList(req.sectionid.ToInt(), levelSections).Select(m => m.id).ToList();
} }
var datas = _traceRepostory.GetSnTracePageList(sectionIds, req.productid.ToInt() var datas = _traceDetailRepository.GetSnTraceList(sectionIds, req.productid.ToInt()
, req.materialid.ToInt(), 0, req.checktype.ToInt(), , req.materialid.ToInt(), req.checktype.ToInt(), req.starttime, req.endtime, ProjectId).ToList();
"", "", new List<long>(), req.starttime, req.endtime, 1, 10, ProjectId, "1", 0).ToList();
foreach (var sec in sections) foreach (var sec in sections)
{ {
var lastSections = ChannelSectionHelper.GetSonLevelSections(sec, levelSections) var lastSections = ChannelSectionHelper.GetSonLevelSections(sec, levelSections)
...@@ -120,8 +117,8 @@ namespace Siger.ApiQMS.Controllers ...@@ -120,8 +117,8 @@ namespace Siger.ApiQMS.Controllers
var lastSections = section == null ? levelSections.Where(t=>t.levelid == maxLevel.id).ToList() : var lastSections = section == null ? levelSections.Where(t=>t.levelid == maxLevel.id).ToList() :
ChannelSectionHelper.GetSonLevelSections(section, levelSections).Where(t => t.levelid == maxLevel.id).ToList(); ChannelSectionHelper.GetSonLevelSections(section, levelSections).Where(t => t.levelid == maxLevel.id).ToList();
var lastSectionIds = lastSections.Select(t => t.id).ToList(); var lastSectionIds = lastSections.Select(t => t.id).ToList();
var data = _traceRepostory.GetSnTracePageList(lastSectionIds, product?.id ?? 0, req.materialid.ToInt(), 0, req.checktype.ToInt(), var data = _traceDetailRepository.GetSnTraceList(lastSectionIds, product?.id ?? 0, req.materialid.ToInt(), req.checktype.ToInt(),
"", "", new List<long>(), req.starttime, req.endtime, 1, 10, ProjectId, "1", 0).Where(t => t.RouteID > 0).ToList(); req.starttime, req.endtime, ProjectId).Where(t => t.RouteID > 0).ToList();
var routeIds = data.Select(t => t.RouteID).ToList(); var routeIds = data.Select(t => t.RouteID).ToList();
var routes = _routeRepository.GetList(t => t.projectId == ProjectId && t.status == (int)RowState.Valid && var routes = _routeRepository.GetList(t => t.projectId == ProjectId && t.status == (int)RowState.Valid &&
routeIds.Contains(t.id)).ToList(); routeIds.Contains(t.id)).ToList();
...@@ -284,7 +281,7 @@ namespace Siger.ApiQMS.Controllers ...@@ -284,7 +281,7 @@ namespace Siger.ApiQMS.Controllers
} }
var etime = req.endtime.ToDateTime(); var etime = req.endtime.ToDateTime();
var stime = req.starttime.ToDateTime(); var stime = req.starttime.ToDateTime();
var traceIds = new List<long>(); var traceIds = new List<string>();
if (req.itemid.ToInt() > 0) if (req.itemid.ToInt() > 0)
{ {
var item = _inspectStandardRepository.Get(t => t.id == req.itemid.ToInt() && t.projectid == ProjectId && var item = _inspectStandardRepository.Get(t => t.id == req.itemid.ToInt() && t.projectid == ProjectId &&
......
...@@ -11,7 +11,7 @@ namespace Siger.ApiQMS.Result ...@@ -11,7 +11,7 @@ namespace Siger.ApiQMS.Result
public double LCL { get; set; } public double LCL { get; set; }
public long traceID { get; set; } public string traceID { get; set; }
public List<long> traceDetailID { get; set; } = new List<long>(); public List<long> traceDetailID { get; set; } = new List<long>();
...@@ -27,7 +27,7 @@ namespace Siger.ApiQMS.Result ...@@ -27,7 +27,7 @@ namespace Siger.ApiQMS.Result
public double UCL { get; set; } public double UCL { get; set; }
public double LCL { get; set; } public double LCL { get; set; }
public long traceID { get; set; } public string traceID { get; set; }
public string value { get; set; } public string value { get; set; }
public int rule1 { get; set; } public int rule1 { get; set; }
public int rule2 { get; set; } public int rule2 { get; set; }
......
using FluentScheduler;
using Siger.Middlelayer.Common;
using Siger.Middlelayer.Common.Extensions;
using Siger.Middlelayer.Common.Helpers;
using Siger.Middlelayer.Dapper.CheckTrace.Constant;
using Siger.Middlelayer.Dapper.CheckTrace.Data;
using Siger.Middlelayer.Dapper.CheckTrace.Repostriories;
using Siger.Middlelayer.Log;
using Siger.Middlelayer.QmsRepository;
using Siger.Middlelayer.Redis;
using Siger.Middlelayer.Repository;
using System;
using System.Linq;
namespace Siger.ApiQMS.Tasks
{
public class QmsCreateTraceTablJob : IJob
{
private static ApiQmsDbContext _context;
private static ApiConfigDbContext _configContext;
static QmsCreateTraceTablJob()
{
_context = new ApiQmsDbContext();
_configContext = new ApiConfigDbContext();
}
public void Execute()
{
if (DateTime.Now.Day != 1)
{
return;
}
_context = new ApiQmsDbContext();
_configContext = new ApiConfigDbContext();
try
{
var dbConfigs = RedisCache.Instance.GetDbNameConfigs();
foreach (var item in dbConfigs)
{
try
{
if(item.Cid > 0 && item.Pid > 0)
{
CreateTraceTable(item.Pid, item.Cid);
}
}
catch (Exception e)
{
Logger.WriteLineError(e.Message);
}
}
_context.Dispose();
_configContext.Dispose();
}
catch (Exception ex)
{
_context.Dispose();
_configContext.Dispose();
Logger.WriteLineError(ex.Message);
}
}
private void CreateTraceTable(int pid, int cid)
{
var projectInfo = _configContext.siger_project.FirstOrDefault(q => q.id == pid);
if(projectInfo == null)
{
return;
}
var _traceRepostory = new TraceDetailTableRepository(cid, pid);
var traceIsExsit = _traceRepostory.TableIsExsit(TabelNameConstant.SnTraceTable, $"{cid}_{pid}");
if (!traceIsExsit)
{
_traceRepostory.CreateTable(TabelNameConstant.SnTraceTable, TabelNameConstant.SnTraceTable, 1);
}
var subTableIsExsit = _traceRepostory.TableIsExsit(TabelNameConstant.SubTableTable, $"{cid}_{pid}");
if (!subTableIsExsit)
{
_traceRepostory.CreateTable(TabelNameConstant.SubTableTable, TabelNameConstant.SubTableTable, 1);
}
var now = DateTime.Now.ToString(ParameterConstant.MouthFirstDay).ToDateTime();
var startTime = "2020-03-01 00:00:00".ToDateTime();
var projectStartTime = UnixTimeHelper.ConvertIntDate(projectInfo.createtime).ToDateTime().ToString(ParameterConstant.MouthFirstDay).ToDateTime();
startTime = startTime > projectStartTime ? startTime : projectStartTime;
for(var time = startTime; time <= now; time = time.AddMonths(1))
{
var detailTableName = $"{TabelNameConstant.SnTraceDetailTable}_{time.Year}{time.Month.ToString("00")}";
var detailIsExsit = _traceRepostory.TableIsExsit(detailTableName, $"{cid}_{pid}");
if (detailIsExsit)
{
var detailTable = _traceRepostory.GetSubTableInfo(detailTableName, TabelNameConstant.SnTraceDetailTable);
if (detailTable == null)
{
var minid = _traceRepostory.GetTableMinID(detailTableName);
var maxid = _traceRepostory.GetTableMaxID(detailTableName);
_traceRepostory.InsertSubTable(new SubTable
{
name = detailTableName,
tablename = TabelNameConstant.SnTraceDetailTable,
startid = minid,
endid = maxid,
validtime = time.AddMonths(-1),
createtime = DateTime.Now,
status = (int)RowState.Valid
});
}
continue;
}
var startid = 1L;
if (time > startTime)
{
var lastDetailTableName = $"{TabelNameConstant.SnTraceDetailTable}_{time.AddMonths(-1).Year}{time.AddMonths(-1).Month.ToString("00")}";
var lastDetailTable = _traceRepostory.GetSubTableInfo(lastDetailTableName, TabelNameConstant.SnTraceDetailTable);
if (lastDetailTable == null)
{
var minid = _traceRepostory.GetTableMinID(lastDetailTableName);
var maxid = _traceRepostory.GetTableMaxID(lastDetailTableName);
_traceRepostory.InsertSubTable(new SubTable
{
name = lastDetailTableName,
tablename = TabelNameConstant.SnTraceDetailTable,
startid = minid,
endid = maxid,
validtime = time.AddMonths(-1),
createtime = DateTime.Now,
status = (int)RowState.Valid
});
}
else
{
var maxId = _traceRepostory.GetTableMaxID(lastDetailTableName);
startid = maxId + 1;
_traceRepostory.UpdateSubTableEndId(lastDetailTable.id, maxId);
}
}
_traceRepostory.CreateTable(TabelNameConstant.SnTraceDetailTable, detailTableName, startid);
_traceRepostory.InsertSubTable(new SubTable
{
name = detailTableName,
tablename = TabelNameConstant.SnTraceDetailTable,
startid = startid,
endid = 0,
validtime = time,
createtime = DateTime.Now,
status = (int)RowState.Valid
});
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using FluentScheduler;
using Siger.Middlelayer.Common;
using Siger.Middlelayer.Common.Extensions;
using Siger.Middlelayer.Common.ModuleEnum;
using Siger.Middlelayer.Dapper.CheckTrace.Repostriories;
using Siger.Middlelayer.Log;
using Siger.Middlelayer.QmsRepository;
using Siger.Middlelayer.QmsRepository.Entities;
using Siger.Middlelayer.Redis;
namespace Siger.ApiQMS.Tasks
{
public class QmsDataMigrationJob : IJob
{
private static ApiQmsDbContext _context;
static QmsDataMigrationJob()
{
_context = new ApiQmsDbContext();
}
public void Execute()
{
_context = new ApiQmsDbContext();
try
{
var state = _context.siger_system_config.FirstOrDefault(t => t.status == (int)RowState.Valid &&
t.key == SystemConfigKey.QmsDataMigrationStatus);
if ((state != null && state.value.ToInt() != (int)RowState.Valid) || state == null)
{
_context.Dispose();
return;
}
var dbConfigs = RedisCache.Instance.GetDbNameConfigs();
foreach (var item in dbConfigs)
{
try
{
SyncBigDataToMiddleDataBase(item.Pid, item.Cid);
SyncMiddleDataToBigDataBase();
}
catch(Exception e)
{
Logger.WriteLineError(e.Message);
}
}
_context.Dispose();
}
catch (Exception ex)
{
_context.Dispose();
Logger.WriteLineError(ex.Message);
}
}
/// <summary>
/// 迁移大数据的数据到中间层(老数据迁移
/// </summary>
public void SyncBigDataToMiddleDataBase(int projectid, int companyid)
{
var _traceRepository = new TraceDataRepository(companyid, projectid);
var datas = _traceRepository.GetSnTraceList(projectid);
var traces = _context.siger_check_sn_trace_inspection.Where(t => t.projectid == projectid && t.status == (int)RowState.Valid &&
datas.Select(q => q.ID).Contains(t.trace_id)).ToList();
datas = datas.Where(t => !traces.Select(q => q.trace_id).Contains(t.ID)).ToList();
var insertModels = new List<siger_check_sn_trace_inspection>();
var insertDetailModels = new List<siger_check_sn_trace_detail>();
foreach(var data in datas)
{
var model = new siger_check_sn_trace_inspection
{
trace_id = data.ID,
testroom = "",
productid = data.ProductID,
materialid = data.MaterialID,
sectionid = data.SectionID,
sn = data.SN,
routeid = data.RouteID,
check_type = data.CheckType,
check_status = (int)SendCheckStatus.Completed,
result = data.Result.ToUpper() == "OK" ? ((int)SendTestType.Qalified).ToString() : ((int)SendTestType.Unqualified).ToString(),
send_mid = data.UserID,
send_time = data.CreateTime,
check_mid = data.UserID,
check_time = data.CreateTime,
inspection_type = (int)InspectionType.ManualCollection,
projectid = projectid,
reason = "",
workorder = data.WorkOrder,
recieve_mid = data.UserID,
recieve_time = data.CreateTime,
checking_mid = data.UserID,
checking_time = data.CreateTime
};
var dataDetails = _context.siger_check_sn_trace_detail.Where(t => t.projectid == projectid && t.status == (int)RowState.Valid &&
data.ID == t.TraceID).ToList();
if (dataDetails.Any())
{
continue;
}
var details = _traceRepository.GetSingleTraceDetailList(data.ID, projectid);
var numberIndexs = _context.siger_check_partindex.Where(t => t.projectid == projectid && t.status == (int)RowState.Valid &&
details.Select(q => q.ID).Contains(t.trace_detailid)).ToList();
var number = 0;
foreach (var detail in details)
{
var numberIndex = numberIndexs.FirstOrDefault(t => t.trace_detailid == detail.ID);
var detailModel = new siger_check_sn_trace_detail
{
TraceID = detail.TraceID,
ItemID = detail.ItemID,
Result = detail.Result,
Value = detail.Value,
ItemName = detail.ItemName,
SN = string.IsNullOrEmpty(detail.SN) ? model.sn : detail.SN,
NumberIndex = numberIndex?.partindex ?? 1,
projectid = projectid,
CreateTime = data.CreateTime
};
insertDetailModels.Add(detailModel);
if(detailModel.NumberIndex > number)
{
number = detailModel.NumberIndex;
}
}
model.number = number;
insertModels.Add(model);
}
foreach(var trace in traces)
{
var dataDetails = _context.siger_check_sn_trace_detail.Where(t => t.projectid == projectid && t.status == (int)RowState.Valid &&
trace.trace_id == t.TraceID).ToList();
if (dataDetails.Any())
{
continue;
}
var details = _traceRepository.GetSingleTraceDetailList(trace.trace_id, projectid);
var numberIndexs = _context.siger_check_partindex.Where(t => t.projectid == projectid && t.status == (int)RowState.Valid &&
details.Select(q => q.ID).Contains(t.trace_detailid)).ToList();
foreach (var detail in details)
{
var numberIndex = numberIndexs.FirstOrDefault(t => t.trace_detailid == detail.ID);
var detailModel = new siger_check_sn_trace_detail
{
TraceID = detail.TraceID,
ItemID = detail.ItemID,
Result = detail.Result,
Value = detail.Value,
ItemName = detail.ItemName,
SN = string.IsNullOrEmpty(detail.SN) ? trace.sn : detail.SN,
NumberIndex = numberIndex?.partindex ?? 1,
projectid = projectid,
CreateTime = (trace.check_time.HasValue && trace.check_time != DateTime.MinValue) ? trace.check_time.Value : DateTime.Now
};
insertDetailModels.Add(detailModel);
}
}
_context.siger_check_sn_trace_inspection.AddRange(insertModels);
_context.siger_check_sn_trace_detail.AddRange(insertDetailModels);
_context.SaveChanges();
}
public void SyncMiddleDataToBigDataBase()
{
return;
}
}
}
...@@ -4,7 +4,6 @@ using Siger.ApiQMS.Result; ...@@ -4,7 +4,6 @@ using Siger.ApiQMS.Result;
using Siger.Middlelayer.Common; using Siger.Middlelayer.Common;
using Siger.Middlelayer.Common.Helpers; using Siger.Middlelayer.Common.Helpers;
using Siger.Middlelayer.Common.ModuleEnum; using Siger.Middlelayer.Common.ModuleEnum;
using Siger.Middlelayer.Dapper.CheckTrace.Repostriories;
using Siger.Middlelayer.Log; using Siger.Middlelayer.Log;
using Siger.Middlelayer.QmsRepository.Entities; using Siger.Middlelayer.QmsRepository.Entities;
using Siger.Middlelayer.QmsRepository.Repositories.Interface; using Siger.Middlelayer.QmsRepository.Repositories.Interface;
...@@ -56,7 +55,7 @@ namespace Siger.ApiQMS.Utility ...@@ -56,7 +55,7 @@ namespace Siger.ApiQMS.Utility
/// <param name="machineid"></param> /// <param name="machineid"></param>
/// <param name="triggerAndon"></param> /// <param name="triggerAndon"></param>
/// <param name="typeCode"></param> /// <param name="typeCode"></param>
public void AbnomalRuleCheck(int num, long traceid, int sectionid, int machineid, bool triggerAndon, int typeCode) public void AbnomalRuleCheck(int num, string traceid, int sectionid, int machineid, bool triggerAndon, int typeCode)
{ {
if (num <= 0) if (num <= 0)
{ {
...@@ -170,7 +169,7 @@ namespace Siger.ApiQMS.Utility ...@@ -170,7 +169,7 @@ namespace Siger.ApiQMS.Utility
} }
} }
private void UpdateTraceWorkOrder(long traceid, string workOrder) private void UpdateTraceWorkOrder(string traceid, string workOrder)
{ {
if (string.IsNullOrEmpty(workOrder)) if (string.IsNullOrEmpty(workOrder))
{ {
...@@ -188,9 +187,6 @@ namespace Siger.ApiQMS.Utility ...@@ -188,9 +187,6 @@ namespace Siger.ApiQMS.Utility
{ {
return; return;
} }
var _itemTraceRepository = new TraceDataRepository(_companyId, _projectId);
_itemTraceRepository.UpdateSnTraceWorkOrder(traceid, workOrder, _projectId);
} }
/// <summary> /// <summary>
......
...@@ -13,7 +13,7 @@ namespace Siger.ApiQMS.Utility ...@@ -13,7 +13,7 @@ namespace Siger.ApiQMS.Utility
{ {
public class SpcAnalysisUtility :IDisposable public class SpcAnalysisUtility :IDisposable
{ {
public ResponseQMSDynamicDiag CheckDataRule(int itemID, double UCL, double LCL, long traceID, List<double> valueList, public ResponseQMSDynamicDiag CheckDataRule(int itemID, double UCL, double LCL, string traceID, List<double> valueList,
List<int> rules) List<int> rules)
{ {
var request = new RequestQMSDynamicDiag var request = new RequestQMSDynamicDiag
......
...@@ -18,7 +18,7 @@ namespace Siger.Middlelayer.QmsRepository.Entities ...@@ -18,7 +18,7 @@ namespace Siger.Middlelayer.QmsRepository.Entities
public int MachineID { get; set; } public int MachineID { get; set; }
public long TraceID { get; set; } public string TraceID { get; set; }
public string SN { get; set; } public string SN { get; set; }
......
...@@ -8,7 +8,7 @@ namespace Siger.Middlelayer.QmsRepository.Entities ...@@ -8,7 +8,7 @@ namespace Siger.Middlelayer.QmsRepository.Entities
/// </summary> /// </summary>
public class siger_check_sn_trace_inspection : QmsEntityBase public class siger_check_sn_trace_inspection : QmsEntityBase
{ {
public long trace_id { get; set; } public string trace_id { get; set; }
/// <summary> /// <summary>
/// 检测室字典key /// 检测室字典key
......
...@@ -23,7 +23,7 @@ namespace Siger.Middlelayer.QmsRepository.Repositories ...@@ -23,7 +23,7 @@ namespace Siger.Middlelayer.QmsRepository.Repositories
} }
public IPagedCollectionResult<ResponseDataCollection> GetPagedList(List<int> sectionid, int productid, int materialid, public IPagedCollectionResult<ResponseDataCollection> GetPagedList(List<int> sectionid, int productid, int materialid,
int route, int checktype, string sn, string result, List<long> traceIds, string starttime, string endtime, int userid, int itemid, int route, int checktype, string sn, string result, List<string> traceIds, string starttime, string endtime, int userid, int itemid,
int projectId, int page, int pagesize, string toexcel) int projectId, int page, int pagesize, string toexcel)
{ {
var minDate = "0001-01-01 00:00:00".ToDateTime(); var minDate = "0001-01-01 00:00:00".ToDateTime();
...@@ -146,7 +146,7 @@ namespace Siger.Middlelayer.QmsRepository.Repositories ...@@ -146,7 +146,7 @@ namespace Siger.Middlelayer.QmsRepository.Repositories
} }
} }
public List<double> GetHistoryDts(int limt, long traceId, int typeCode, int projectId, int itemId, DateTime minDate) public List<double> GetHistoryDts(int limt, string traceId, int typeCode, int projectId, int itemId, DateTime minDate)
{ {
var query = from d in _context.siger_check_sn_trace_detail var query = from d in _context.siger_check_sn_trace_detail
join t in _context.siger_check_sn_trace_inspection on d.TraceID equals t.trace_id join t in _context.siger_check_sn_trace_inspection on d.TraceID equals t.trace_id
...@@ -158,5 +158,56 @@ namespace Siger.Middlelayer.QmsRepository.Repositories ...@@ -158,5 +158,56 @@ namespace Siger.Middlelayer.QmsRepository.Repositories
return query.OrderByDescending(t => t.CreateTime).OrderByDescending(t => t.NumberIndex) return query.OrderByDescending(t => t.CreateTime).OrderByDescending(t => t.NumberIndex)
.OrderByDescending(t => t.ID).Take(limt).Select(t => t.Value.Value).ToList(); .OrderByDescending(t => t.ID).Take(limt).Select(t => t.Value.Value).ToList();
} }
public IEnumerable<SnTrace> GetSnTraceList(List<int> sectionIds, int productid, int materialid, int checktype, string starttime, string endtime, int projectid)
{
var query = from q in _context.siger_check_sn_trace_inspection
//join t in _context.siger_check_sn_trace_inspection on q.TraceID equals t.trace_id
where q.projectid == productid && q.status == (int)RowState.Valid //&& t.status == (int)RowState.Valid && q.projectid == productid
&& q.check_status == (int)SendCheckStatus.Completed
select new SnTrace
{
ID = q.trace_id,
ProductID = q.productid,
MaterialID = q.materialid,
SectionID = q.sectionid,
WorkOrder = q.workorder,
SN = q.sn,
Result = q.result,
UserID = q.checking_mid,
CreateTime = q.check_time > DateTime.MinValue ? q.check_time.Value : DateTime.MinValue,
RouteID = q.routeid,
CheckType = q.check_type,
};
Expression<Func<SnTrace, bool>> materialExpression = q => true;
if (materialid > 0)
{
materialExpression = q => q.MaterialID == materialid;
}
Expression<Func<SnTrace, bool>> sectionExpression = q => true;
if (sectionIds.Any())
{
sectionExpression = q => sectionIds.Contains(q.SectionID);
}
Expression<Func<SnTrace, bool>> productExpression = q => true;
if (productid > 0)
{
productExpression = q => q.ProductID == productid;
}
Expression<Func<SnTrace, bool>> checkTypeExpression = q => true;
if (checktype > 0)
{
checkTypeExpression = q => q.CheckType == checktype;
}
Expression<Func<SnTrace, bool>> timeExpression = q => true;
if (!string.IsNullOrEmpty(starttime) && !string.IsNullOrEmpty(endtime))
{
timeExpression = q => q.CreateTime <= endtime.ToDateTime() && q.CreateTime >= starttime.ToDateTime();
}
var expression = materialExpression.And(sectionExpression).And(productExpression).And(checkTypeExpression).And(timeExpression);
return query.Where(expression);
}
} }
} }
...@@ -9,9 +9,11 @@ namespace Siger.Middlelayer.QmsRepository.Repositories.Interface ...@@ -9,9 +9,11 @@ namespace Siger.Middlelayer.QmsRepository.Repositories.Interface
public interface ICheckSnTraceDetailRepository : IQmsRepositoryBase<siger_check_sn_trace_detail> public interface ICheckSnTraceDetailRepository : IQmsRepositoryBase<siger_check_sn_trace_detail>
{ {
IPagedCollectionResult<ResponseDataCollection> GetPagedList(List<int> sectionid, int productid, int materialid, IPagedCollectionResult<ResponseDataCollection> GetPagedList(List<int> sectionid, int productid, int materialid,
int route, int checktype, string sn, string result, List<long> traceIds, string starttime, string endtime, int userid, int itemid, int route, int checktype, string sn, string result, List<string> traceIds, string starttime, string endtime, int userid, int itemid,
int projectId, int page, int pagesize, string toexcel); int projectId, int page, int pagesize, string toexcel);
List<double> GetHistoryDts(int limt, long traceId, int typeCode, int projectId, int itemId, DateTime minDate); List<double> GetHistoryDts(int limt, string traceId, int typeCode, int projectId, int itemId, DateTime minDate);
IEnumerable<SnTrace> GetSnTraceList(List<int> sectionIds, int productid, int materialid, int checktype, string starttime, string endtime, int projectid);
} }
} }
...@@ -38,7 +38,7 @@ namespace Siger.Middlelayer.QmsRepository.Request ...@@ -38,7 +38,7 @@ namespace Siger.Middlelayer.QmsRepository.Request
public class RequestUpdateDataCollection : RequestAddDataCollection public class RequestUpdateDataCollection : RequestAddDataCollection
{ {
public long id { get; set; } public string id { get; set; }
} }
public class DataCollectionDetail public class DataCollectionDetail
......
...@@ -5,7 +5,7 @@ namespace Siger.Middlelayer.QmsRepository.Response ...@@ -5,7 +5,7 @@ namespace Siger.Middlelayer.QmsRepository.Response
{ {
public class ResponseDataCollection public class ResponseDataCollection
{ {
public long id { get; set; } public string id { get; set; }
public int productid { get; set; } public int productid { get; set; }
...@@ -138,4 +138,61 @@ namespace Siger.Middlelayer.QmsRepository.Response ...@@ -138,4 +138,61 @@ namespace Siger.Middlelayer.QmsRepository.Response
public int stopBits { get; set; } public int stopBits { get; set; }
} }
public class SnTrace
{
public string ID { get; set; }
public int ProductID { get; set; }
public int MaterialID { get; set; }
public int SectionID { get; set; }
public int MachineID { get; set; }
public string WorkOrder { get; set; }
public string SN { get; set; }
public string Result { get; set; }
public int UserID { get; set; }
public int RouteID { get; set; }
public DateTime CreateTime { get; set; }
public int CheckType { get; set; }
public string ItemName { get; set; } = string.Empty;
}
public class SnTraceDetail
{
public long ID { get; set; }
public string TraceID { get; set; }
public int ItemID { get; set; }
public string ItemName { get; set; } = string.Empty;
public string Result { get; set; }
public double? Value { get; set; }
public string SN { get; set; }
}
public class SnTraceDetailList : SnTraceDetail
{
public int NumberIndex { get; set; }
public double? LowerLimit { get; set; }
public double? UpperLimit { get; set; }
}
} }
...@@ -6,7 +6,7 @@ namespace Siger.Middlelayer.QmsRepository.Response ...@@ -6,7 +6,7 @@ namespace Siger.Middlelayer.QmsRepository.Response
public class ResponseSendTestCollection public class ResponseSendTestCollection
{ {
public int id { get; set; } public int id { get; set; }
public long traceid { get; set; } public string traceid { get; set; }
public int productid { get; set; } public int productid { get; set; }
public string productcode { get; set; } public string productcode { get; set; }
public string productname { get; set; } public string productname { get; set; }
......
using System;
using System.Collections.Generic;
using System.Text;
namespace Siger.Middlelayer.Dapper.CheckTrace.Constant
{
public class TabelNameConstant
{
public const string SnTraceTable = "siger_check_sn_trace";
public const string SnTraceDetailTable = "siger_check_sn_trace_detail";
public const string SubTableTable = "siger_project_subtable";
public const string TraceInspection = "siger_check_sn_trace_inspection";
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Siger.Middlelayer.Dapper.CheckTrace.Data
{
public class SnTrace
{
public long ID { get; set; }
public int ProductID { get; set; }
public int MaterialID { get; set; }
public int SectionID { get; set; }
public int MachineID { get; set; }
public string WorkOrder { get; set; }
public string SN { get; set; }
public string Result { get; set; }
public int UserID { get; set; }
public int RouteID { get; set; }
public DateTime CreateTime { get; set; }
public int CheckType { get; set; }
public string ItemName { get; set; } = string.Empty;
}
public class SnTraceDetail
{
public long ID { get; set; }
public long TraceID { get; set; }
public int ItemID { get; set; }
public string ItemName { get; set; } = string.Empty;
public string Result { get; set; }
public double? Value { get; set; }
public string SN { get; set; }
}
public class SnTraceDetailList : SnTraceDetail
{
public int NumberIndex { get; set; }
public double? LowerLimit { get; set; }
public double? UpperLimit { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Siger.Middlelayer.Dapper.CheckTrace.Data
{
public class SubTable
{
public int id { get; set; }
public string name { get; set; }
public string tablename { get; set; }
public long startid { get; set; }
public long endid { get; set; }
public DateTime validtime { get; set; }
public DateTime createtime { get; set; }
public int status { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Dapper;
using Siger.Middlelayer.Dapper.CheckTrace.Data;
using Siger.Middlelayer.Dapper.CheckTrace.Constant;
using System.Linq;
using System.Threading.Tasks;
using Siger.Middlelayer.Common.Extensions;
using Siger.Middlelayer.Common.Log;
using Siger.Middlelayer.Common;
using Siger.Middlelayer.Common.ModuleEnum;
namespace Siger.Middlelayer.Dapper.CheckTrace.Repostriories
{
public class TraceDataRepository : TraceDbContext
{
public TraceDataRepository(int companyId, int projectId) : base(companyId, projectId)
{
}
public List<SubTable> GetSubTableList(string name)
{
using (var conn = GetDbConnection())
{
var sql = $"select * from {TabelNameConstant.SubTableTable} where tablename='{name}' and status=1";
var dataList = conn.Query<SubTable>(sql);
return dataList.ToList();
}
}
public IEnumerable<SnTrace> GetSnTraceList(int projectid)
{
var sql = $@"select ID,ProductID,MaterialID,SectionID,WorkOrder,SN,Result,UserID,CreateTime,RouteID,CheckType
from {TabelNameConstant.SnTraceTable}
where Status={(int)RowState.Valid} and ProjectID={projectid} and UserID>0
order by CreateTime";
var dataList = GetDataList<SnTrace>(sql);
return dataList;
}
public IEnumerable<SnTraceDetail> GetSingleTraceDetailList(long traceId, int projectid)
{
var snTraces = new List<SnTraceDetail>();
var subTables = GetSubTableList(TabelNameConstant.SnTraceDetailTable);
if (subTables.Count > 0)
{
Parallel.ForEach(subTables, new ParallelOptions { MaxDegreeOfParallelism = subTables.Count },
t => { snTraces.AddRange(GetSingleTraceDetails(t, traceId, projectid)); });
}
Task.WaitAll();
return snTraces.ToList();
}
private IEnumerable<SnTraceDetail> GetSingleTraceDetails(SubTable table, long traceId, int projectid)
{
var conditon = string.Empty;
if (traceId > 0)
{
conditon += $" and TraceID={traceId}";
}
var sql = $@"select ID,ItemID,TraceID,Result,Value,ItemName,SN
from {table.name}
where Status=1 and ProjectID={projectid} {conditon}";
var dataList = GetDataList<SnTraceDetail>(sql);
return dataList;
}
public SnTrace GetSnTrace(long id, int projectid)
{
using (var conn = GetDbConnection())
{
var sql = $"select * from {TabelNameConstant.SnTraceTable} where ID={id} and Status=1 and ProjectID={projectid}";
var data = conn.QuerySingleOrDefault<SnTrace>(sql);
return data;
}
}
public void UpdateSnTraceWorkOrder(long id, string workorder, int projectid)
{
using (var conn = GetDbConnection())
{
var sql = $"update {TabelNameConstant.SnTraceTable} set WorkOrder='{workorder}' where ID={id} and Status=1 and ProjectID={projectid}";
var data = conn.Execute(sql);
}
}
public override void Dispose()
{
throw new NotImplementedException();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Dapper;
using Siger.Middlelayer.Dapper.CheckTrace.Data;
using Siger.Middlelayer.Dapper.CheckTrace.Constant;
using System.Linq;
using System.Threading.Tasks;
using Siger.Middlelayer.Common.Extensions;
using Siger.Middlelayer.Common.Log;
using Siger.Middlelayer.Common;
using Siger.Middlelayer.Common.ModuleEnum;
namespace Siger.Middlelayer.Dapper.CheckTrace.Repostriories
{
public class TraceDetailTableRepository : TraceDetailRepository
{
public TraceDetailTableRepository(int companyId, int projectId) : base(companyId, projectId)
{
}
/// <summary>
/// 查询表是否存在
/// </summary>
/// <returns></returns>
public bool TableIsExsit(string tablename, string schemaname)
{
using (var conn = GetDbConnection())
{
var sql = $"select TABLE_NAME from information_schema.TABLES where TABLE_NAME = '{tablename}' and TABLE_SCHEMA='{schemaname}';";
var data = conn.Query<string>(sql);
return !string.IsNullOrEmpty(data.FirstOrDefault());
}
}
public void CreateTable(string tablename, string true_tablename, long startid)
{
using (var conn = GetDbConnection())
{
var sql = string.Empty;
switch (tablename)
{
case TabelNameConstant.SnTraceTable:
{
sql = "CREATE TABLE `" + true_tablename + @"` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`SN` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '二维码',
`ProductID` int(11) NOT NULL COMMENT '产品ID',
`MaterialID` int(11) NOT NULL DEFAULT 0 COMMENT '物料ID',
`SectionID` int(20) NOT NULL COMMENT '工位ID',
`MachineID` int(11) NOT NULL COMMENT '设备ID',
`WorkOrder` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '工单号',
`RouteID` int(11) NOT NULL DEFAULT 0 COMMENT '产品工序ID',
`UserID` int(20) NOT NULL DEFAULT 0 COMMENT '用户MID',
`Result` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '结果',
`CheckType` int(2) NOT NULL DEFAULT 0 COMMENT '检验类型',
`CreateTime` datetime(0) NOT NULL,
`ProjectID` int(20) NOT NULL DEFAULT 0,
`Status` int(2) NOT NULL DEFAULT 1,
PRIMARY KEY(`ID`) USING BTREE,
INDEX `sn`(`SN`) USING BTREE,
INDEX `UserID`(`UserID`) USING BTREE,
INDEX `CreateTime`(`CreateTime`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC; ";
break;
}
case TabelNameConstant.SnTraceDetailTable:
{
sql = @"CREATE TABLE `" + true_tablename + @"` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`MachineID` int(11) NOT NULL DEFAULT 0,
`TraceID` bigint(20) NOT NULL DEFAULT 0 COMMENT 'siger_tr_sn_trace.id(trace表ID)',
`SN` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '二维码',
`ItemID` int(11) NOT NULL DEFAULT 0 COMMENT 'siger_qms_inspection_standard.id(项目ID)',
`ItemName` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '项目名称',
`Value` double NULL DEFAULT NULL COMMENT '检测值',
`Result` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '结果',
`CreateTime` datetime(0) NOT NULL,
`ProjectID` int(20) NOT NULL DEFAULT 0,
`Status` int(20) NOT NULL DEFAULT 1,
PRIMARY KEY (`ID`) USING BTREE,
INDEX `index_createtime`(`CreateTime`) USING BTREE,
INDEX `index_itemname`(`ItemName`) USING BTREE,
INDEX `index_itemid`(`ItemID`) USING BTREE,
INDEX `index_traceid`(`TraceID`, `ProjectID`, `Status`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = " + startid + " CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;";
break;
}
case TabelNameConstant.SubTableTable:
{
sql = "CREATE TABLE `" + true_tablename + @"` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '分表表名',
`tablename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '原始表名',
`startid` bigint(20) NOT NULL DEFAULT 0 COMMENT '分表最小ID',
`endid` bigint(20) NOT NULL DEFAULT 0 COMMENT '分表最大ID,新建表默认0',
`validtime` datetime(0) NOT NULL COMMENT '有效月份',
`createtime` datetime(0) NOT NULL COMMENT '创建时间',
`status` int(2) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;";
break;
}
}
var data = conn.Execute(sql);
}
}
public long GetTableMaxID(string tablename)
{
using (var conn = GetDbConnection())
{
var sql = $"select max(ID) from {tablename}";
var data = conn.Query<string>(sql);
bool num = long.TryParse(data.First(), out long result);
return num ? result : 0L;
}
}
public long GetTableMinID(string tablename)
{
using (var conn = GetDbConnection())
{
var sql = $"select min(ID) from {tablename}";
var data = conn.Query<string>(sql);
bool num = long.TryParse(data.First(), out long result);
return num ? result : 1L;
}
}
public SubTable GetSubTableInfo(string name, string tablename)
{
using (var conn = GetDbConnection())
{
var sql = $"select * from {TabelNameConstant.SubTableTable} where name='{name}' and tablename='{tablename}' and status=1";
var dataList = conn.Query<SubTable>(sql);
return dataList.FirstOrDefault();
}
}
public bool InsertSubTable(SubTable entity)
{
using (var conn = GetDbConnection())
{
var sql = $"INSERT INTO `siger_project_subtable` (name,tablename,startid,endid,validtime,createtime,status) VALUES ('{entity.name}', '{entity.tablename}', {entity.startid}, {entity.endid}, '{entity.validtime.ToString(ParameterConstant.DateTimeFormat)}', '{entity.createtime.ToString(ParameterConstant.DateTimeFormat)}', {entity.status});";
var data = conn.Execute(sql);
return data > 0;
}
}
public bool UpdateSubTableEndId(int id, long endid)
{
using (var conn = GetDbConnection())
{
var sql = $"update siger_project_subtable set endid={endid} where id={id}";
var data = conn.Execute(sql);
return data > 0;
}
}
public override void Dispose()
{
throw new NotImplementedException();
}
}
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using Dapper;
using MySql.Data.MySqlClient;
using Siger.Middlelayer.Common.Configuration;
using Siger.Middlelayer.Redis;
namespace Siger.Middlelayer.Dapper.CheckTrace
{
public abstract class TraceDbContext
{
private static string _dbConnection;
private static string _dbMidConnection;
private readonly int _companyId;
private readonly int _projectId;
protected TraceDbContext(int companyId, int projectId)
{
var useOneDb = ConfigManager.GetValue("DbSetting", "UseOneDb", true);
if (useOneDb)
{
_dbConnection = ConfigManager.GetValue("DbSetting", "DbConnectionKM", string.Empty);
}
else
{
_dbConnection = ConfigManager.GetValue("DbClusterSetting", "ClusterConnectionKM", string.Empty);
}
if (string.IsNullOrEmpty(_dbConnection))
{
throw new Exception("DbSetting about [DbConnectionKM] not found.");
}
_dbMidConnection = ConfigManager.GetValue("DbSetting", "DbConnection", string.Empty);
if (string.IsNullOrEmpty(_dbMidConnection))
{
throw new Exception("DbSetting about [DbConnection] not found.");
}
_companyId = companyId;
_projectId = projectId;
}
public string GetDbName()
{
return $"{_companyId}_{_projectId}";
}
public IDbConnection GetMidDbConnection()
{
try
{
var connecctionStr = $"{_dbMidConnection}";
var connect = new MySqlConnection(connecctionStr);
connect.Open();
return connect;
}
catch (Exception e)
{
throw new Exception($"connect mysql db {_dbMidConnection} failed, error:" + e);
}
}
public IDbConnection GetDbConnection()
{
try
{
var dbConfig = RedisCache.Instance.GetDbName(_companyId, _projectId);
var connecctionStr = $"{_dbConnection};database={dbConfig.MysqlDbName}";
var connect = new MySqlConnection(connecctionStr);
connect.Open();
return connect;
}
catch (Exception e)
{
throw new Exception($"connect mysql db {_companyId}_{_projectId} failed, error:" + e);
}
}
protected async Task<IEnumerable<T>> GetDataListAsync<T>(string sql)
{
return await Task.Run(() =>
{
using (var conn = GetDbConnection())
{
var dataList = conn.QueryAsync<T>(sql);
return dataList;
}
});
}
protected IEnumerable<T> GetDataList<T>(string sql)
{
using (var conn = GetDbConnection())
{
var dataList = conn.Query<T>(sql);
return dataList;
}
}
protected long Count(string table)
{
using (var conn = GetDbConnection())
{
var result = conn.ExecuteScalar<long>($"select count(1) from {table}");
return result;
}
}
protected string GetMidDataBaseName()
{
using (var conn = GetMidDbConnection())
{
return conn.Database;
}
}
/// <summary>
/// 开启事务
/// </summary>
/// <param name="conn"></param>
/// <returns></returns>
public IDbTransaction BeginTransaction(IDbConnection conn)
{
IDbTransaction tran = conn.BeginTransaction();
return tran;
}
/// <summary>
/// 提交事务
/// </summary>
/// <param name="tran"></param>
/// <param name="conn"></param>
public void Commit(IDbTransaction tran, IDbConnection conn)
{
tran.Commit();
}
/// <summary>
/// 回滚事务
/// </summary>
/// <param name="tran"></param>
/// <param name="conn"></param>
public void Rollback(IDbTransaction tran, IDbConnection conn)
{
tran.Rollback();
}
public abstract void Dispose();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment