You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

309 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using FactorySystemBll;
using FactorySystemCommon;
using FactorySystemModel.BusinessModel;
using FactorySystemModel.EnumModel;
using FactorySystemModel.ResponseModel;
using FactorySystemModel.SqlSugarModel;
using Newtonsoft.Json;
using SqlSugar.Extensions;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Web.Http;
namespace FactorySystemApi.Controllers
{
/// <summary>
/// 包材接口
/// </summary>
[UserLoginFilter]
public class PackageController : BaseController<TFS_PackageMain>
{
private readonly PackageBll PackageBll = new PackageBll();
/// <summary>
/// 初始化
/// </summary>
public PackageController()
{
//设置可新增、修改字段
InsertField = UpdateField = "FFactory,FCode,FSpecs,FSize,FNetWeight,FGrossWeight,FEditUser,FEditDate";
}
/// <summary>
/// 获取子项集合
/// </summary>
[HttpPost]
public ApiResult GetPackageChildList(Dictionary<string, object> pageParam)
{
return GetTPageList<TFS_PackageChild>(pageParam);
}
/// <summary>
/// 删除子项信息
/// </summary>
[HttpPost]
public ApiResult DeletePackageChild(Dictionary<string, object> deleteParam)
{
ApiResult apiResult = new ApiResult();
return ExceptionHelper.TryReturnException(() =>
{
apiResult.Data = BaseBll.DeleteDataById(deleteParam, "TFS_PackageChild");
}, apiResult, Request, deleteParam);
}
/// <summary>
/// 不补充包材信息
/// </summary>
[HttpPost]
public ApiResult NoSupplyPackageChild(Dictionary<string, object> inParam)
{
ApiResult apiResult = new ApiResult();
return ExceptionHelper.TryReturnException(() =>
{
apiResult.Data = PackageBll.NoSupplyPackageChild(inParam);
}, apiResult, Request, inParam);
}
/// <summary>
/// 获取包材信息
/// </summary>
[HttpPost]
public ApiResult GetPackageInfo(Dictionary<string, object> inParam)
{
ApiResult apiResult = new ApiResult();
return ExceptionHelper.TryReturnException(() =>
{
inParam.TryGetValue("FTeamID", out object objTeamId);
apiResult.Data = PackageBll.GetPackageInfo(int.Parse(objTeamId.ToString()));
}, apiResult, Request, inParam);
}
/// <summary>
/// 操作包材信息(包含主子)
/// </summary>
[HttpPost]
public ApiResult UpdatePackageData(Dictionary<string, object> inParam)
{
ApiResult apiResult = new ApiResult();
int mainId = -1;
return ExceptionHelper.TryReturnException(() =>
{
ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
if (inParam.ContainsKey("FEditUser")) inParam.Remove("FEditUser");
inParam.Add("FEditUser", user.FID);
// 20230404 需求变更:增加包材新增、修改入口(自包材清单)
if (inParam.ContainsKey("FOperateType"))
{
mainId = UpdatePackage(inParam);
}
else
{
mainId = PackageBll.UpdatePackageData(inParam);
if (mainId > 0 && inParam.TryGetValue("FChild", out object childStr))
{
List<TFS_PackageChild> childList = JsonConvert.DeserializeObject<List<TFS_PackageChild>>(childStr.ToString());
if (childList.Count > 0)
{
if (childList[0].FID <= 0)
{
inParam.Remove("FID");
inParam.Add("FID", mainId);
PackageBll.InsertChildData(inParam, childList);
}
//当都有子项代码的时候则完成
if (childList.Find(s => string.IsNullOrEmpty(s.FCode)) == null)
{
PackageBll.TaskCompleted(inParam);
}
}
}
}
apiResult.Data = mainId;
}, apiResult, Request, inParam);
}
/**
* 20230404 需求变更
* 增加包材新增、修改入口(自包材清单)
* 此部分功能和协同无关
* 从包材清单进入时会带入FOperateType参数且值为1
* **/
private int UpdatePackage(Dictionary<string, object> inParam)
{
object oOperateType;
string sOperateType;
int mainId = -1;
inParam.TryGetValue("FOperateType", out oOperateType);
sOperateType = oOperateType.ToString();
if ("1".Equals(sOperateType))
{
// 20230422 新增逻辑
// 包规存在则不允许添加包材
string fcode = inParam["FCode"].ToString();
TFS_PackageMain package = PackageBll.GetPackageByFCode(fcode);
if (package != null)
{
return -2;
}
mainId = PackageBll.UpdatePackage(inParam);
inParam.Remove("FID");
inParam.Add("FID", mainId);
if (mainId > 0 && inParam.TryGetValue("FChild", out object childStr))
{
List<TFS_PackageChild> childList = JsonConvert.DeserializeObject<List<TFS_PackageChild>>(childStr.ToString());
List<TFS_PackageChild> oldChildren = null;
List<TFS_PackageChild> newChildren = null;
if (childList.Count > 0)
{
// 将子项列表拆分成新旧两个列表
// 当FID > 0时判断为已存在的子项
oldChildren = childList.Where(o => o.FID > 0).ToList();
// 当FID <= 0时判断为新的子项
newChildren = childList.Where(n => n.FID <= 0).ToList();
if (oldChildren != null && oldChildren.Count > 0)
{
PackageBll.UpdatePackageChild(inParam, oldChildren);
}
if (newChildren != null && newChildren.Count > 0)
{
PackageBll.InsertPackageChild(inParam, newChildren);
}
}
}
}
return mainId;
}
/// <summary>
/// 对接子项代码
/// </summary>
[HttpPost]
public ApiResult DockMDMCode(Dictionary<string, object> inParam)
{
ApiResult apiResult = new ApiResult();
return ExceptionHelper.TryReturnException(() =>
{
apiResult.Data = -1;
List<TFS_PackageChild> childList = JsonConvert.DeserializeObject<List<TFS_PackageChild>>(inParam["FList"].ToString());
if (childList != null && childList.Count > 0)
{
var tempList2 = childList.Where(s => s.FMaterialID > 0).ToList();
childList = childList.Where(s => s.FMaterialID < 0).ToList();
foreach (var item in childList)
{
Dictionary<string, object> temp = new Dictionary<string, object>();
temp.Add("FName", item.FName);
temp.Add("FGroup", item.FGroup);
temp.Add("FWeightUnit", item.FUnit);
temp.Add("FType", "ZMAT");
item.FCode = GetMdmCode(temp);
}
foreach (var item in tempList2)
{
Dictionary<string, object> temp = new Dictionary<string, object>();
temp.Add("FName", item.FName);
temp.Add("FGroup", item.FGroup);
temp.Add("FWeightUnit", item.FUnit);
temp.Add("FType", "ZMAT");
item.FCode = item.FCode;
}
childList = childList.Where(s => s.FMaterialID < 0 && !string.IsNullOrEmpty(s.FCode)).ToList();
tempList2 = tempList2.Where(s => s.FMaterialID > 0 && !string.IsNullOrEmpty(s.FCode)).ToList();
if (childList != null && childList.Count > 0)
{
ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
apiResult.Data = PackageBll.DockChildCode(inParam, childList, user.FID);
}
else if (tempList2 != null && tempList2.Count > 0)
{
ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
apiResult.Data = PackageBll.DockChildCode(inParam, tempList2, user.FID);
}
else
{
apiResult.CustomError((int)Constant.ApiResultCode., "对接失败,请稍后再试");
}
}
}, apiResult, Request, inParam);
}
/// <summary>
/// 模板上传处理(重构父方法)
/// </summary>
protected override object CheckUploadFile(List<string> fileList, int funcType, int userId)
{
if (funcType == 1)
{
GetPackageFromFile(fileList, out List<TFS_PackageMain> mainList, out List<TFS_PackageChild> childList);
return PackageBll.InsertBatchPackageData(mainList, childList, userId);
}
return fileList;
}
/// <summary>
/// 梳理包材导入文件
/// </summary>
private void GetPackageFromFile(List<string> fileList, out List<TFS_PackageMain> mainList, out List<TFS_PackageChild> childList)
{
mainList = new List<TFS_PackageMain>();
childList = new List<TFS_PackageChild>();
List<PropertyInfo> mainProp = typeof(TFS_PackageMain).GetTypeInfo().GetProperties().ToList();
List<PropertyInfo> childProp = typeof(TFS_PackageChild).GetTypeInfo().GetProperties().ToList();
List<TFS_FieldInfo> fieldList = BaseBll.GetFileInfoList((int)Constant.FieldInfoType.);
PropertyInfo temp = null;
foreach (string filePath in fileList)
{
DataTable dt = NPOIHelper.ImportExceltoDt(filePath);
List<string> items = new List<string>();
for (int i = 0; i < dt.Columns.Count; i++)
{
items.Add(dt.Columns[i].ColumnName);
}
foreach (DataRow dr in dt.Rows)
{
TFS_PackageMain main = new TFS_PackageMain();
TFS_PackageChild child = new TFS_PackageChild();
foreach (TFS_FieldInfo field in fieldList)
{
string value = GetValueByName(dr, items, field.FFieldName, field.FDefault);
string[] temps = field.FColumnFIeld.Split('.');
if ((temp = mainProp.Find(s => s.Name.Equals(temps.Last()))) != null)
{
if (temps.Length == 1 || temps[0] == "TFS_PackageMain")
{
temp.SetValue(main, value);
}
}
if ((temp = childProp.Find(s => s.Name.Equals(temps.Last()))) != null)
{
if (temps.Length == 1 || temps[0] == "TFS_PackageChild")
{
temp.SetValue(child, value);
}
}
}
if (!string.IsNullOrEmpty(main.FCode))
{
mainList.Add(main);
childList.Add(child);
}
}
}
}
}
}