using System.Data;
using System.Collections;
using System.Text;
using Aspose.Cells;
using Estsh.Core.Models;
using Estsh.Core.Repository.IRepositories;
using Estsh.Core.Util;
using Estsh.Core.Services.IServices;
using Estsh.Core.Model.Result;
using Estsh.Core.Model.ExcelModel;
using Estsh.Core.Model.EnumUtil;
/***************************************************************************************************
*
* 更新人:sitong.dong
* 描述:BOM管理业务类
* 修改时间:2022.06.22
* 修改日志:系统迭代升级
*
**************************************************************************************************/
namespace Estsh.Core.Services
{
///
/// BOM管理业务类
///
public class BOMDefineService : BaseService, IBOMDefineService
{
private readonly IBOMDefineRepository repository;
public BOMDefineService(IBOMDefineRepository _repository) : base(_repository)
{
repository = _repository;
}
///
/// 获取车型配置列表
///
///
public List getSelectModel(String modelType)
{
return repository.getSelectModel(modelType);
}
///
/// 获取BOM零件清单
///
///
public List getSelectPartNo(String bomType, String model)
{
return repository.getSelectPartNo(bomType, model);
}
///
/// 获取获取工站数据列表
///
///
///
public List getProcessData(int factoryId)
{
List result = repository.getProcessData(factoryId);
KeyValueResult model = new KeyValueResult();
model.value = "0";
model.key = "--请选择工位--";
result.Insert(0, model);
return result;
}
///
/// 获取BOM数据列表
///
///
///
///
public List getBOMList(String bomType, String partId, String sort, String direction, string pdline, string enabled)
{
return repository.getBOMList(bomType, partId, sort, direction, pdline, enabled);
}
///
/// 根据零件号和bom类型获取bomID
///
///
///
///
public int GetBOMID(string partNo, int bomType)
{
return repository.GetBOMID(partNo, bomType);
}
///
/// 根据零件号 或 客户零件号 查询零件编号
///
///
///
public int GetPartID(string partNo)
{
return repository.GetPartID(partNo);
}
///
/// 通过BomId获取bom类型
///
///
///
public string GetBOMType(int bomID)
{
return repository.GetBOMType(bomID);
}
///
/// 通过BomId获取pratId
///
///
///
public string GetBOMPartId(string partNo)
{
return repository.GetBOMPartId(partNo);
}
///
/// 通过零件Id判断零件号是否已经定义了 KPSN RULE
///
///
///
public bool ExistsPartSNRule(int partID)
{
return repository.ExistsPartSNRule(partID);
}
///
/// 增加bom子零件清单
///
///
///
///
public bool addBomItemPart(String table, SysBomDetail values)
{
return repository.insertBomDetail(table, values);
}
///
/// 更新BOM子零件清单
///
///
///
public bool UpdateBOMDetail(SysBomDetail values, String guid)
{
return repository.UpdateBOMDetail(values, guid);
}
///
/// 更新 BOM 匹配表,用于车型匹配
///
///
///
///
public bool BuildBOMMatch(int bomId)
{
return repository.BuildBOMMatch(bomId);
}
///
/// 为特征 BOM 产生匹配清单,用于发运绑定时的车型匹配
///
///
///
public bool BuildBOMMatchForTransBind(int bomId)
{
return repository.BuildBOMMatchForTransBind(bomId);
}
///
/// 根据Guid删除BomDetail数据
///
///
///
public int deleteBOMDetail(String guid)
{
return repository.DeleteBOMDetial(guid);
}
///
/// 启用
///
///
///
public int EnableData(String ids)
{
ids = ids.Substring(0, ids.Length - 1);
return this.repository.EnableData(ids);
}
///
/// 禁用
///
///
///
public int DisableData(String ids)
{
ids = ids.Substring(0, ids.Length - 1);
return this.repository.DisableData(ids);
}
///
/// 新增BOM
///
///
///
public bool InsertBOM(SysBom Params)
{
return repository.InsertBOM(Params);
}
///
/// 删除BOM
///
///
///
public bool DeleteBOM(int bomId)
{
return repository.DeleteBOM(bomId);
}
///
/// 读取采购订单文件并更新至数据库
///
/// 文件全路径
/// 登录用户信息
public Hashtable ImportExcel(List inputStream, int userId)
{
Hashtable result = new Hashtable();
Hashtable Cache = new Hashtable();
if (inputStream == null || inputStream.Count == 0)
{
result.Add("message", "导入数据为空,请重新导入");
result.Add("flag", "error");
return result;
}
StringBuilder ErrorMessage = new StringBuilder(1024);
// 验证数据
for (int i = 0; i < inputStream.Count; i++)
{
if (i == 13207)
{
string a = i.ToString();
}
//父阶零件号
string partNo = inputStream[i].PartNoF.ToString();
int partNoId = repository.GetPartID(partNo);
//子阶零件号
string partNoItem = inputStream[i].PartNoZ.ToString();
int partNoItemId = repository.GetPartID(partNoItem);
if (string.IsNullOrEmpty(partNoId.ToString()) || partNoId.ToString().Equals("0"))
{
ErrorMessage.Append("父阶零件号 " + partNo + " 不存在!" + Environment.NewLine);
}
if (string.IsNullOrEmpty(partNoItemId.ToString()) || partNoItemId.ToString().Equals("0"))
{
ErrorMessage.Append("子阶零件号 " + partNoItem + " 不存在!" + Environment.NewLine);
}
string BOMType = inputStream[i].BomType.ToString();
if (BOMType == "绑定")
{
if (!repository.ExistsPartSNRule(partNoItemId))
{
ErrorMessage.Append("第" + i + 1 + "行,子阶零件号 " + partNoItem + " 条码特征未定义!" + Environment.NewLine);
}
}
}
// 校验数据时发生错误
if (ErrorMessage.Length != 0)
{
result.Add("message", ErrorMessage.ToString());
result.Add("flag", "error");
return result;
}
// 处理表头数据 SYS_BOM
for (int i = 0; i < inputStream.Count; i++)
{
string bomPartNo = inputStream[i].PartNoF.ToString();
int bomType = int.Parse(inputStream[i].BomType.ToString());
int PartID = repository.GetPartID(bomPartNo);
int BOMID = 0;
if (!Cache.ContainsKey(bomPartNo))
{
//获取sys_bom表中 bomid
BOMID = repository.GetBOMID(bomPartNo, bomType);
if (BOMID == 0)
{
SysBom model = new SysBom();
model.PartId = PartID;
model.BomType = bomType;
model.CreateUserId = userId;
repository.insertBom("sys_bom", model);
}
else
{
repository.DeleteBOMDetail(BOMID);
}
Cache.Add(bomPartNo, bomPartNo);
}
}
bool IsBOMMatchByCPN = repository.BOMMatchByCPN();
// 处理表身数据 SYS_BOM_DETAIL, SYS_BOM_MATCH
if (repository.InsertData(inputStream, IsBOMMatchByCPN))
{
Cache.Clear();
foreach (BOMDefine dr in inputStream)
{
string bomPartNo = dr.PartNoF.ToString();
int bomType = int.Parse(dr.BomType.ToString());
if (!Cache.ContainsKey(bomPartNo))
{
int BOMID = repository.GetBOMID(bomPartNo, bomType);
if (BOMID != 0 && (bomType == (int)MesEnumUtil.BomType.PART || bomType == (int)MesEnumUtil.BomType.FEATURE))
{
if (!repository.BuildBOMMatch(BOMID))
{
result.Add("message", "导入失败,更新 BOM 匹配信息不成功!");
result.Add("flag", "error");
return result;
}
}
Cache.Add(bomPartNo, bomType);
}
}
result.Add("message", "导入成功");
result.Add("flag", "error");
return result;
}
else
{
result.Add("message", "导入失败");
result.Add("flag", "error");
return result;
}
}
///
/// 导出Bom信息
///
///
///
///
public List exportBOMInfo(String bomType, String partId)
{
return this.repository.getExpotBOMList(bomType, partId, "", "");
}
public List exportALL(String bomType)
{
return this.repository.exportALL(bomType, "", "");
}
}
}