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, "", ""); } } }