using MES.Service.DB; using MES.Service.Dto.service; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; namespace MES.Service.service.BasicData.Material; public class MesItemsManager : Repository { public MesItems GetItemQcPrint(WarehouseQuery query) { return Db.Queryable() .Where(c => c.Factory == query.Factory && c.Company == query.Company && c.ItemNo == query.ItemNo).First(); } public bool Save(ErpItems item) { var entity = GetMesItems(item); return UseTransaction(db => { switch (item.Type) { case "0": if (UpdateItemStatus(db, entity.Id, "A")) return 1; break; case "1": if (UpdateItemStatus(db, entity.Id, "B")) return 1; break; //case "2": // if (InsertItem(db, entity)) // return 1; // break; case "3": if (DeleteItem(db, entity.Id)) return 1; break; case "2": case "4": case "5": if (InsertOrUpdate(db, entity)) return 1; break; default: throw new ArgumentNullException( $"type没有{item.Type}这个类型的参数"); } throw new NotImplementedException("操作失败"); }) > 0; } public bool SaveList(List items) { var list = items.Select(GetMesItems).ToList(); var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); return UseTransaction(db => { foreach (var itemGroup in groupBy) switch (itemGroup.Key) { case "0": if (!UpdateItemStatusBatch(db, itemGroup.Value, "A")) throw new NotImplementedException("启用失败"); break; case "1": if (!UpdateItemStatusBatch(db, itemGroup.Value, "B")) throw new NotImplementedException("禁用失败"); break; //case "2": // if (!InsertItemBatch(db, itemGroup.Value)) // throw new NotImplementedException("插入失败"); // break; case "3": if (!DeleteItemBatch(db, itemGroup.Value)) throw new NotImplementedException("删除失败"); break; case "2": case "4": case "5": if (!InsertOrUpdateBatch(db, itemGroup.Value)) throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException( $"type没有{itemGroup.Key}这个类型的参数"); } return 1; }) > 0; } private bool UpdateItemStatus(SqlSugarScope db, decimal itemId, string status) { var result = db.Updateable() .SetColumns(s => s.Fforbidstatus == status) .Where(s => s.Id == itemId).ExecuteCommand(); if (result > 0) return true; throw new NotImplementedException(status == "A" ? "启用失败" : "禁用失败"); } private bool InsertItem(SqlSugarScope db, MesItems entity) { var insert = db.Insertable(entity).ExecuteCommand(); if (insert > 0) return true; throw new NotImplementedException("插入失败"); } private bool DeleteItem(SqlSugarScope db, decimal itemId) { var deleteById = db.Deleteable().In(itemId).ExecuteCommand(); if (deleteById > 0) return true; throw new NotImplementedException("删除失败"); } private MesItems GetMesItems(ErpItems item) { return new MesItems { Id = Convert.ToDecimal(item.Id), ItemId = Convert.ToDecimal(item.Id), ItemNo = item.FNumber, ItemName = item.FName, ItemModel = item.FSpecification, ItemUnit = item.FBaseUnitId, Lowlimit = item.FSafeStock, Highlimit = item.FMaxStock, PrdPack = item.FMinPackCount, DepotCode = item.FStockId, /// /// 接口字段调整:已删除或不再使用PPBOM00019124字段。 /// /// /// 修改人:池南骏 /// 修改日期:2024-12-25 /// 说明:此字段已被删除或不再使用于当前接口中。 /// 保留被注释的代码以记录修改历史。 /// //Ppbom00019124 = item.PPBOM00019124, Fmaterialgroup = item.FMaterialGroup, Remarks = item.FDescription, Ffinishreceiptoverrate = item.FFinishReceiptOverRate, Fissuetype = item.FIssueType, Fisbatchmanage = item.FIsBatchManage, Fpurchaserid = item.FPurchaserId, Fpurchaseunitid = item.FPurchaseUnitId, Storeunit = item.FStoreUnitID, Saleunit = item.FSaleUnitId, Fforbidstatus = item.FForbidStatus, MaterialProperti = item.FErpClsID, ProductionWorkshop = item.FWorkShopId, ProduceUnit = item.FPRODUCEUNITID, SubconUnit = item.FSUBCONUNITID, CreateOrg = Convert.ToDecimal(item.FCreateOrgId), UseOrg = Convert.ToDecimal(item.FUseOrgId), LossPercent = item.FLOSSPERCENT, MnemonicCode = item.FMnemonicCode, ExpPeriod = item.FExpPeriod, //ColorName = item.FColor, CreateDate = DateTime.Now, Type=item.Type, //20250412 是否根据工厂不同修改不同编码 Company = "1000", Factory = "1000", /// /// 接口字段调整:标准版接口新增字段。 /// /// /// 修改人:<池南骏> /// 修改日期:<2024-12-31> /// 修改说明: /// - 原代码:空 /// - 修改后: /// FOLDNUMBER = item.FOldNumber, FMINSTOCK = item.FMinStock, FFINISHRECEIPTSHORTRATE = item.FFinishReceiptShortRate, FDEFAULTVENDOR = item.FDefaultVendor, FDOCUMENTSTATUS = item.FDocumentStatus, FMFGPOLICYID = item.FMfgPolicyId, FBOMUNITID = item.FBOMUnitId, FISKITTING = item.FIsKitting, FISCOBY = item.FIsCoby, FOVERCONTROLMODE = item.FOverControlMode, F_MJBH = item.F_MJBH, //20250407 yhj 焕媄新增字段 F_TJ =item.F_TJ, F_KZ =item.F_KZ, F_SC =item.F_SC, F_HSFX =item.F_HSFX, F_KCKZ =item.F_KCKZ, F_XSKZ =item.F_XSKZ, F_CRM =item.F_CRM, F_CGKZ =item.F_CGKZ, F_WWLX =item.F_WWLX, F_JYSZ =item.F_JYSZ, F_FJZQ =item.F_FJZQ, F_SCLX =item.F_SCLX, F_ZZSTLX =item.F_ZZSTLX, F_DCSL =item.F_DCSL, F_BZGS =item.F_BZGS, WLFZMC=item.F_FZMC, MJBM =item.MJBM, Khwlbm =item.KHWLBM, Ys=item.YS, NesxGx=item.NEXT_GX, }; } private bool UpdateItemStatusBatch(SqlSugarScope db, List itemList, string status) { var ids = itemList.Select(it => it.Id).ToArray(); var result = db.Updateable() .SetColumns(s => s.Fforbidstatus == status) .Where(s => ids.Contains(s.Id)).ExecuteCommand(); if (result > 0) return true; throw new NotImplementedException(status == "A" ? "启用失败" : "禁用失败"); } private bool InsertItemBatch(SqlSugarScope db, List itemList) { var insertRange = db.Insertable(itemList).ExecuteCommand(); if (insertRange > 0) return true; throw new NotImplementedException("插入失败"); } private bool DeleteItemBatch(SqlSugarScope db, List itemList) { var ids = itemList.Select(it => it.Id).ToArray(); var deleteByIds = db.Deleteable().In(ids).ExecuteCommand(); if (deleteByIds > 0) return true; throw new NotImplementedException("删除失败"); } /// /// "插入或更新的方法"调整:修改为先删除再插入。 /// /// /// 修改人:池南骏 /// 修改日期:2024-12-31 /// 修改说明:` /// /// 原代码: //private bool InsertOrUpdate(SqlSugarScope db, MesItems entity) //{ // var exists = db.Queryable().Any(e => e.Id == entity.Id); // if (exists) // { // var update = db.Updateable(entity).ExecuteCommand(); // if (update > 0) // return true; // } // else // { // var insert = db.Insertable(entity).ExecuteCommand(); // if (insert > 0) // return true; // } // return false; //} private bool InsertOrUpdate(SqlSugarScope db, MesItems entity) { db.Deleteable() .Where(s => s.Id == entity.Id) .ExecuteCommand(); var insert = db.Insertable(entity).ExecuteCommand(); return insert > 0; } private bool InsertOrUpdateBatch(SqlSugarScope db, List itemList) { foreach (var entity in itemList) if (!InsertOrUpdate(db, entity)) return false; return true; } }