From 0fb0f17319ecf71d66b96a6acfd07f754be9443e Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 24 十月 2024 13:44:38 +0800
Subject: [PATCH] WCS添加穿梭车信息表,修改任务信息表
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs | 380 ++++++++++++++++++++++++++++++++---------------------
1 files changed, 227 insertions(+), 153 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
index 88fae6b..f66f4b5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs"
@@ -2,7 +2,9 @@
using Magicodes.ExporterAndImporter.Core.Models;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Options;
+using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using System.Drawing.Drawing2D;
@@ -13,6 +15,7 @@
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Utilities;
+using static OfficeOpenXml.ExcelErrorValue;
namespace WIDESEA_Core.BaseServices
{
@@ -31,7 +34,7 @@
public ISqlSugarClient Db => BaseDal.Db;
private PropertyInfo[] _propertyInfo { get; set; } = null;
- private PropertyInfo[] TProperties
+ public PropertyInfo[] TProperties
{
get
{
@@ -46,133 +49,14 @@
public virtual PageGridData<TEntity> GetPageData(PageDataOptions options)
{
- string wheres = ValidatePageOptions(options);
+ string wheres = options.ValidatePageOptions(TProperties);
//鑾峰彇鎺掑簭瀛楁
- Dictionary<string, OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
+ Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
PageGridData<TEntity> pageGridData = new PageGridData<TEntity>();
- //if (QueryRelativeExpression != null)
- //{
- // queryable = QueryRelativeExpression.Invoke(queryable);
- //}
- //if (options.Export)
- //{
- // queryable = queryable.GetIQueryableOrderBy(orderbyDic);
- // if (Limit > 0)
- // {
- // queryable = queryable.Take(Limit);
- // }
- // pageGridData.rows = queryable.ToList();
- //}
- //else
- //{
- // pageGridData.rows = repository.IQueryablePage(queryable,
- // options.Page,
- // options.Rows,
- // out int rowCount,
- // orderbyDic).ToList();
- // pageGridData.total = rowCount;
- // //鏌ヨ鐣岄潰缁熻姹傜瓑瀛楁
- // if (SummaryExpress != null)
- // {
- // pageGridData.summary = SummaryExpress.Invoke(queryable);
- // //Func<T, T> groupExpress = x =>x;
- // //pageGridData.summary = queryable.GroupBy(groupExpress).Select(SummaryExpress).FirstOrDefault();
- // }
- //}
- //GetPageDataOnExecuted?.Invoke(pageGridData);
-
pageGridData = BaseDal.QueryPage(wheres, options.Page, options.Rows, orderbyDic);
return pageGridData;
- }
-
-
- protected string ValidatePageOptions(PageDataOptions options)
- {
- options = options ?? new PageDataOptions();
- string where = "";
- List<SearchParameters> searchParametersList = new List<SearchParameters>();
- if (options.Filter != null && options.Filter.Count > 0)
- {
- searchParametersList.AddRange(options.Filter);
- }
- else if (!string.IsNullOrEmpty(options.Wheres))
- {
- try
- {
- searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
- options.Filter = searchParametersList;
- }
- catch { }
- }
- QueryRelativeList?.Invoke(searchParametersList);
-
- for (int i = 0; i < searchParametersList.Count; i++)
- {
- if (string.IsNullOrEmpty(searchParametersList[i].Value))
- {
- continue;
- }
-
- PropertyInfo property = TProperties.Where(c => c.Name.ToUpper() == searchParametersList[i].Name.ToUpper()).FirstOrDefault();
-
- if (property == null) continue;
-
- (bool, string, object) result = property.ValidationVal(searchParametersList[i].Value.Split(','));
- if (result.Item1)
- {
- continue;
- }
-
- LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
- if (expressionType == LinqExpressionType.Equal)
- {
- if (string.IsNullOrEmpty(where))
- where += $"{searchParametersList[i].Name} = '{searchParametersList[i].Value}'";
- else
- where += $" and {searchParametersList[i].Name} = '{searchParametersList[i].Value}'";
- }
- else
- {
- if (string.IsNullOrEmpty(where))
- where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{searchParametersList[i].Value}'";
- else
- where += $" and {searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{searchParametersList[i].Value}'";
- }
- }
- return where;
- }
-
- /// <summary>
- /// 鑾峰彇鎺掑簭瀛楁
- /// </summary>
- /// <param name="pageData"></param>
- /// <param name="propertyInfo"></param>
- /// <returns></returns>
- private Dictionary<string, OrderByType> GetPageDataSort(PageDataOptions pageData, PropertyInfo[] propertyInfo)
- {
- if (!string.IsNullOrEmpty(pageData.Sort))
- {
- if (pageData.Sort.Contains(","))
- {
- List<string> sortArr = pageData.Sort.Split(",").Where(x => propertyInfo.Any(p => p.Name == x)).ToList();
- Dictionary<string, OrderByType> sortDic = new Dictionary<string, OrderByType>();
- foreach (var item in sortArr)
- {
- sortDic[item] = pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc;
- }
- return sortDic;
- }
- else if (propertyInfo.Any(x => x.Name == pageData.Sort))
- {
- return new Dictionary<string, OrderByType> {
- {
- pageData.Sort,pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc
- } };
- }
- }
- return new Dictionary<string, OrderByType> { { "CreateDate", pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc } };
}
public virtual object GetDetailPage(PageDataOptions pageData)
@@ -188,7 +72,8 @@
if (propertyInfo != null)
{
Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
- List<ExpandoObject> list = BaseDal.Db.Queryable(detailType.Name, "detail").Where(keyName, "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
+ Navigate navigate = propertyInfo.GetCustomAttribute<Navigate>();
+ List<ExpandoObject> list = BaseDal.Db.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
return new PageGridData<ExpandoObject>(totalCount, list);
}
return new PageGridData<object>(total: 0, null);
@@ -241,12 +126,12 @@
{
return WebResponseContent.Instance.Error("浼犲弬閿欒,鍙傛暟涓嶈兘涓虹┖");
}
- //string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, true, TProperties);
+ string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, true, TProperties);
- //if (!string.IsNullOrEmpty(validResult))
- //{
- // return WebResponseContent.Instance.Error(validResult);
- //}
+ if (!string.IsNullOrEmpty(validResult))
+ {
+ return WebResponseContent.Instance.Error(validResult);
+ }
PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
if (keyPro == null)
@@ -259,23 +144,71 @@
}
else if (keyPro.PropertyType == typeof(int) || keyPro.PropertyType == typeof(long))
{
- SugarColumn sugarColumn = keyPro.GetCustomAttribute<SugarColumn>();
- if (sugarColumn.IsIdentity)
+ SugarColumn? sugarColumn = keyPro.GetCustomAttribute<SugarColumn>();
+ if (sugarColumn?.IsIdentity ?? true)
{
- saveModel.MainData.Remove(keyPro.Name);
+ saveModel.MainData.Remove(keyPro.Name.FirstLetterToUpper());
+ saveModel.MainData.Remove(keyPro.Name.FirstLetterToLower());
}
}
-
TEntity entity = saveModel.MainData.DicToModel<TEntity>();
+ if (saveModel.DetailData == null || saveModel.DetailData.Count == 0)
+ {
+ BaseDal.AddData(entity);
+ return WebResponseContent.Instance.OK();
+ }
- BaseDal.AddData(entity);
+ if (typeof(TEntity).GetNavigatePro() == null)
+ {
+ return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+ }
- return WebResponseContent.Instance.OK();
+ Type detailType = typeof(TEntity).GetDetailType();
+ MethodInfo? methodInfo = GetType().GetMethod("AddDataIncludesDetail");
+ methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+ object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData });
+ return obj as WebResponseContent;
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error(ex.Message);
}
+ }
+
+ public WebResponseContent AddDataIncludesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics) where TDetail : class, new()
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string name = typeof(TEntity).GetMainIdByDetail();
+ string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+ if (reslut != string.Empty)
+ return WebResponseContent.Instance.Error(reslut);
+
+ List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+ ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+ int id = BaseDal.Db.Insertable(entity).ExecuteReturnIdentity();
+
+ for (int i = 0; i < list.Count; i++)
+ {
+ TDetail detail = list[i];
+ typeof(TDetail).SetDetailId(detail, id, name);
+ }
+
+ BaseDal.Db.Insertable(list).ExecuteCommand();
+
+ ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+ content = WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ ((SqlSugarClient)BaseDal.Db).RollbackTran();
+ content = WebResponseContent.Instance.Error(ex.Message);
+ }
+ return content;
}
/// <summary>
@@ -321,30 +254,30 @@
{
try
{
- List<string> list = UpdateIgnoreColOnExecute?.Invoke(saveModel);
+ List<string>? list = UpdateIgnoreColOnExecute?.Invoke(saveModel);
if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0)//鍒ゆ柇鍙傛暟鏄惁浼犲叆
{
return WebResponseContent.Instance.Error("浼犲弬閿欒,鍙傛暟涓嶈兘涓虹┖");
}
- //string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, false, TProperties, list.ToArray());
+ string validResult = typeof(TEntity).ValidateDicInEntity(saveModel.MainData, false, TProperties, list?.ToArray() ?? null);
- //if (!string.IsNullOrEmpty(validResult))
- //{
- // return WebResponseContent.Instance.Error(validResult);
- //}
+ if (!string.IsNullOrEmpty(validResult))
+ {
+ return WebResponseContent.Instance.Error(validResult);
+ }
- //PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
- //if (keyPro == null)
- //{
- // return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
- //}
+ PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+ if (keyPro == null)
+ {
+ return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
+ }
TEntity entity = saveModel.MainData.DicToModel<TEntity>();
List<string> listCol = new List<string>();
foreach (var item in saveModel.MainData)
{
- PropertyInfo propertyInfo = typeof(TEntity).GetProperty(item.Key);
+ PropertyInfo? propertyInfo = typeof(TEntity).GetProperty(item.Key);
if (propertyInfo == null)
{
propertyInfo = typeof(TEntity).GetProperty(item.Key.FirstLetterToLower());
@@ -356,16 +289,108 @@
listCol.Add(propertyInfo?.Name);
}
- if (list != null)
- listCol = listCol.Where(x => !list.Contains(x)).ToList();
- bool result = BaseDal.UpdateData(entity, listCol, list);
- return WebResponseContent.Instance.OK();
+ if (saveModel.DetailData == null || saveModel.DetailData.Count == 0)
+ {
+ //if (list != null)
+ // listCol = listCol.Where(x => !list.Contains(x)).ToList();
+ bool result = BaseDal.UpdateData(entity/*, listCol, list*/);
+ return WebResponseContent.Instance.OK();
+ }
+
+ if (typeof(TEntity).GetNavigatePro() == null)
+ {
+ return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+ }
+
+ Type detailType = typeof(TEntity).GetDetailType();
+ MethodInfo? methodInfo = GetType().GetMethod("UpdateDataInculdesDetail");
+ methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+ object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData, saveModel.DelKeys });
+ return obj as WebResponseContent;
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error(ex.Message);
}
+ }
+
+ public WebResponseContent UpdateDataInculdesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics, List<object> delKeys) where TDetail : class, new()
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string name = typeof(TEntity).GetMainIdByDetail();
+ string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+ if (reslut != string.Empty)
+ return WebResponseContent.Instance.Error(reslut);
+
+ List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+ List<object> dynamicDelKeys = new List<object>();
+ if (delKeys != null)
+ {
+ for (int i = 0; i < delKeys.Count; i++)
+ {
+ dynamicDelKeys.Add(delKeys[i]);
+ }
+ }
+
+ List<TDetail> updateRows = new List<TDetail>();
+ List<TDetail> addRows = new List<TDetail>();
+
+ for (int i = 0; i < list.Count; i++)
+ {
+ object detailId = typeof(TDetail).GetPropertyValue(list[i], typeof(TDetail).GetKeyName());
+ if (detailId != null)
+ {
+ if (detailId.ToString() != "0")
+ {
+ updateRows.Add(list[i]);
+ }
+ else
+ {
+ addRows.Add(list[i]);
+ }
+ }
+ }
+
+ object mainId = typeof(TEntity).GetPropertyValue(entity, typeof(TEntity).GetKeyName());
+ if (mainId != null)
+ {
+ ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+ if (dynamicDelKeys.Count > 0)
+ BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{detailType.GetKeyName()} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+ BaseDal.Db.Updateable(entity).ExecuteCommandHasChange();
+
+ BaseDal.Db.Updateable(updateRows).ExecuteCommand();
+
+ for (int i = 0; i < addRows.Count; i++)
+ {
+ TDetail detail = addRows[i];
+ typeof(TDetail).SetDetailId(detail, mainId, name);
+ }
+
+ BaseDal.Db.Insertable(addRows).ExecuteCommand();
+
+ ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+ content = WebResponseContent.Instance.OK();
+ }
+ else
+ {
+ content = WebResponseContent.Instance.Error("鏈壘鍒颁富琛ㄤ富閿��");
+ }
+
+ }
+ catch (Exception ex)
+ {
+ ((SqlSugarClient)BaseDal.Db).RollbackTran();
+ content = WebResponseContent.Instance.Error(ex.Message);
+ }
+ return content;
}
/// <summary>
@@ -394,10 +419,40 @@
{
try
{
- return BaseDal.DeleteDataByIds(keys) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+ if (typeof(TEntity).GetNavigatePro() == null)
+ return BaseDal.DeleteDataByIds(keys) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+ else
+ {
+ if (keys != null)
+ {
+ Type detailType = typeof(TEntity).GetDetailType();
+ string name = typeof(TEntity).GetMainIdByDetail();
+ List<object> dynamicDelKeys = new List<object>();
+
+ for (int i = 0; i < keys.Length; i++)
+ {
+ dynamicDelKeys.Add(keys[i]);
+ }
+ ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+ if (dynamicDelKeys.Count > 0)
+ BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{name} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+ BaseDal.DeleteDataByIds(keys);
+
+ ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+ return WebResponseContent.Instance.OK();
+ }
+ else
+ {
+ return WebResponseContent.Instance.Error("鍙傛暟閿欒");
+ }
+ }
}
catch (Exception ex)
{
+ ((SqlSugarClient)BaseDal.Db).RollbackTran();
return WebResponseContent.Instance.Error(ex.Message);
}
}
@@ -450,9 +505,9 @@
string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport";
IExporter exporter = new ExcelExporter();
- string wheres = ValidatePageOptions(options);
+ string wheres = options.ValidatePageOptions(TProperties);
//鑾峰彇鎺掑簭瀛楁
- Dictionary<string, OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
+ Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(TProperties);
List<TEntity> entities = BaseDal.QueryData(wheres, orderbyDic);
@@ -551,5 +606,24 @@
content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
return content;
}
+
+ public WebResponseContent ExportSeedData()
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string seedDataFolder = $"WIDESEA_DB.DBSeed.Json/{typeof(TEntity).Name}.tsv";
+ List<TEntity> deviceInfos = BaseDal.QueryData();
+ string str = JsonConvert.SerializeObject(deviceInfos, Formatting.Indented);
+ List<Dictionary<string, object>> keyValuePairs = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(str);
+ FileHelper.WriteFileAndDelOldFile($"{AppDomain.CurrentDomain.BaseDirectory}wwwroot/{seedDataFolder}", str);
+ content = WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ content = WebResponseContent.Instance.Error(ex.Message);
+ }
+ return content;
+ }
}
}
--
Gitblit v1.9.3