| | |
| | | using MES.Service.Modes; |
| | | using MES.Service.util; |
| | | using SqlSugar; |
| | | using System.Data; |
| | | |
| | | namespace MES.Service.service; |
| | | |
| | | /// <summary> |
| | | /// 生产订单 |
| | | /// </summary> |
| | | public class WomcaaManager : Repository<Womcaa> |
| | | { |
| | | //当前类已经继承了 Repository 增、删、查、改的方法 |
| | |
| | | if (StringUtil.CheckGuid(mesWomcaa.Guid)) |
| | | base.DeleteById(mesWomcaa.Guid); |
| | | |
| | | //if (mesWomcabs.Count > 0) |
| | | // db.Deleteable<Womcab>() |
| | | // .Where(s => s.Pid == mesWomcaa.Erpid).ExecuteCommand(); |
| | | |
| | | // 在插入 mesWomcabs 之前,先删除所有 Guid 已存在的记录 |
| | | //var guids = mesWomcabs.Select(x => x.Guid).ToList(); |
| | | //if (guids.Count > 0) |
| | | //{ |
| | | // db.Deleteable<Womcab>().In(x => x.Guid, guids).ExecuteCommand(); |
| | | //} |
| | | if (mesWomcabs.Count > 0) |
| | | { |
| | | // 先按 Pid 删除 |
| | | db.Deleteable<Womcab>() |
| | | .Where(s => s.Pid == mesWomcaa.Erpid).ExecuteCommand(); |
| | | |
| | | // // 再按 Guid 删除,彻底避免主键冲突 |
| | | // var guids = mesWomcabs.Select(x => x.Guid).ToList(); |
| | | // db.Deleteable<Womcab>().In(x => x.Guid, guids).ExecuteCommand(); |
| | | } |
| | | |
| | | //// 检查 Guid 是否唯一 |
| | | //if (mesWomcabs.Select(x => x.Guid).Distinct().Count() != mesWomcabs.Count) |
| | | // throw new Exception("即将插入的Womcab数据中存在重复的Guid,请检查数据生成逻辑。"); |
| | | |
| | | //单条插入忽略空字段 |
| | | var orUpdate = db.Insertable(mesWomcaa) |
| | |
| | | var entity = new Womcaa |
| | | { |
| | | Erpid = Convert.ToInt32(dto.Id), /// ERPID |
| | | Caa001 = PPBOMNO, /// 单号 |
| | | Caa021 = dto.FWorkShopID, /// 工作车间 |
| | | |
| | | SrcBillType = dto.FSrcBillType, /// 工单单别 |
| | | Caa001=dto.FBillNo, /// 工单单号 |
| | | //Caa001 = PPBOMNO, /// 单号 |
| | | Caa021 = dto.FWorkShopID0, /// 工作中心 |
| | | //Caa021 = dto.FWorkShopID, /// 工作车间 |
| | | RoutingId = dto.FRoutingId, /// 工艺路线 |
| | | WorkShopId = dto.FREMWorkShopId, /// 产线 |
| | | DepotCode = dto.FStockId, /// 仓库 |
| | | CreateDate = dto.FDate, /// 单据日期 |
| | | |
| | | Caa004 = dto.FBILLTYPE, /// 单据类型 |
| | | Caa023 = dto.FStatus, /// 状态 完工,未完工 |
| | | Caa006 = dto.FMaterialId, /// 产品编码 |
| | |
| | | Mtono = dto.FMTONO, /// 计划跟踪号 |
| | | Lot = dto.FLot, /// 批号 |
| | | Caa013 = dto.FBomId, /// BOM版次 |
| | | |
| | | Caa015 = dto.F_UNW_Text_xsddh, /// 订单单号 |
| | | Caa015Head = dto.xsddh_type, /// 订单单别 |
| | | CreateType = dto.FCreateType, /// 生成方式 |
| | | SrcBillType = dto.FSrcBillType, /// 源单类型 |
| | | SrcBillNo = dto.FSrcBillNo, /// 源单编号 |
| | | SrcBillentryseq = dto.FSrcBillEntrySeq, /// 源单分录行号 |
| | | SaleOrderNo = dto.FSaleOrderNo, /// 需求单据号 |
| | | SaleOrderEntryseq = dto.FSaleOrderEntrySeq, /// 需求单据行号 |
| | | ForceCloserid = dto.FForceCloserId, /// 结案人 |
| | | CloseType = dto.FCloseType, /// 结案类型 |
| | | SrcSplitBillno = dto.FSrcSplitBillNo, /// 源拆分订单编号 |
| | | Caa016 = dto.FDESCRIPTION, /// 备注 |
| | | |
| | | Caa018 = !string.IsNullOrEmpty(dto.PLAN_ID) |
| | | ? Convert.ToInt32(dto.PLAN_ID) |
| | |
| | | ? Convert.ToInt32(dto.PLAN_SEQ) |
| | | : null, /// ERP源单行号 |
| | | Caa020 = dto.PLAN_NUM, /// ERP源单单号(任务单号) |
| | | //Caa015 = dto.F_UNW_Text_xsddh, /// 销售订单号 |
| | | |
| | | ForceCloserid = dto.FForceCloserId, /// 结案人 |
| | | CloseType = dto.FCloseType, /// 结案类型 |
| | | SrcSplitBillno = dto.FSrcSplitBillNo, /// 源拆分订单编号 |
| | | Caa016 = dto.FMemoItem, /// 备注 |
| | | |
| | | SrcBillNo = dto.FSrcBillNo, /// 源单编号 |
| | | SrcBillentryseq = dto.FSrcBillEntrySeq, /// 源单分录行号 |
| | | SaleOrderNo = dto.FSaleOrderNo, /// 需求单据号 |
| | | SaleOrderEntryseq = dto.FSaleOrderEntrySeq, /// 需求单据行号 |
| | | |
| | | |
| | | CustNumber = dto.CustNumber, /// 客户编号 |
| | | ErpSczz = Convert.ToInt32(dto.FPrdOrgId), /// 生产组织ID |
| | | ErpWtzz = Convert.ToInt32(dto.FEnTrustOrgId), /// 委托组织ID |
| | | Btbz = dto.Btbz, /// 委托组织ID |
| | | //Caa015Head = dto.F_XIFG_Integer_tzk, /// 销售订单行号 |
| | | |
| | | //MainProductNo = dto.F_XIFG_Base_w5c, /// 主产品编码 |
| | | // MainProductQty = |
| | | // Convert.ToInt32(dto.F_XIFG_Qty_yrr), /// 主产品生产数量 |
| | |
| | | // PackingListNumber = dto.F_XIFG_Text_yrr, /// 包装单号 |
| | | // CustomerName = dto.F_XIFG_Text_qtr1, /// 客户名称 |
| | | // Customer = dto.F_XIFG_Base_83g1, /// 客户 |
| | | Caa0111 = dto.FPlanFinishDate, /// 预计完工时间备份 |
| | | Typea = dto.TypeA, /// 预计完工时间备份 |
| | | //Caa0111 = dto.FPlanFinishDate, /// 预计完工时间备份 |
| | | //Typea = dto.TypeA, /// 预计完工时间备份 |
| | | //Typeb = dto.TypeB /// 预计完工时间备份 |
| | | SynchronousDate = DateTime.Now, |
| | | DocumentStatus = dto.FDocumentStatus |
| | | }; |
| | | |
| | | //工作中心编码转ID,Caa021 = dto.FWorkShopID0 |
| | | var entityCaa021 = Db.Queryable<SysDepartment>() |
| | | .Where(x => x.Departmentcode == dto.FWorkShopID0) |
| | | .Select(x => x.Id.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityCaa021)) |
| | | { |
| | | entity.Caa021 = entityCaa021; |
| | | } |
| | | else |
| | | { |
| | | entity.Caa021 = "0"; |
| | | } |
| | | |
| | | //仓库编码转ID,DepotCode = dto.FStockId, |
| | | var entityDepotCode = Db.Queryable<MesDepots>() |
| | | .Where(x => x.DepotCode == dto.FStockId) |
| | | .Select(x => x.DepotId.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityDepotCode)) |
| | | { |
| | | entity.DepotCode = entityDepotCode; |
| | | } |
| | | else |
| | | { |
| | | entity.DepotCode = "0"; |
| | | } |
| | | |
| | | //产品(物料)编码转ID,Caa006 = dto.FMaterialId, /// |
| | | var entityCaa006 = Db.Queryable<MesItems>() |
| | | .Where(x => x.ItemNo == dto.FMaterialId) |
| | | .Select(x => x.Id.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityCaa006)) |
| | | { |
| | | entity.Caa006 = entityCaa006; |
| | | } |
| | | else |
| | | { |
| | | entity.Caa006 = "0"; |
| | | } |
| | | |
| | | //单位编码转ID,Caa009 = dto.FUnitId, |
| | | var entityCaa009 = Db.Queryable<MesUnit>() |
| | | .Where(x => x.Fnumber == dto.FUnitId) |
| | | .Select(x => x.Id.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityCaa009)) |
| | | { |
| | | entity.Caa009 = entityCaa009; |
| | | } |
| | | else |
| | | { |
| | | entity.Caa009 = "0"; |
| | | } |
| | | |
| | | //计划员编码转ID,PlanId = dto.FPlannerID, |
| | | var entityPlanId = Db.Queryable<MesStaff>() |
| | | .Where(x => x.StaffNo == dto.FPlannerID) |
| | | .Select(x => x.Id.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityPlanId)) |
| | | { |
| | | entity.PlanId = entityPlanId; |
| | | } |
| | | else |
| | | { |
| | | entity.PlanId = "0"; |
| | | } |
| | | |
| | | //结案人编码转ID,ForceCloserid = dto.FForceCloserId, |
| | | var entityForceCloserid = Db.Queryable<MesStaff>() |
| | | .Where(x => x.StaffNo == dto.FForceCloserId) |
| | | .Select(x => x.Id.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityForceCloserid)) |
| | | { |
| | | entity.ForceCloserid = entityForceCloserid; |
| | | } |
| | | else |
| | | { |
| | | entity.ForceCloserid = "0"; |
| | | } |
| | | |
| | | //客户编码转ID,CustNumber = dto.CustNumber, |
| | | var entityCustNumber = Db.Queryable<MesStaff>() |
| | | .Where(x => x.StaffNo == dto.CustNumber) |
| | | .Select(x => x.Id.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityCustNumber)) |
| | | { |
| | | entity.CustNumber = entityCustNumber; |
| | | } |
| | | else |
| | | { |
| | | entity.CustNumber = "0"; |
| | | } |
| | | |
| | | //根据单号+单别,获取对应的id |
| | | var singleId = Db.Queryable<Womcaa>() |
| | | .Where(x => x.SrcBillType == dto.FSrcBillType && x.Caa001 == dto.FBillNo) |
| | | .Select(x => x.Erpid) |
| | | .First(); |
| | | |
| | | //如果没有则生成一个新的id |
| | | if (singleId == null || string.IsNullOrWhiteSpace(singleId.ToString())) |
| | | { |
| | | entity.Erpid = (int)GenerateNewId(); |
| | | //entity.Erpid = GenerateNewId().ToString(); |
| | | //rohIn.id = GenerateNewId().ToString("0"); |
| | | } |
| | | else//如果有则使用已有的id |
| | | { |
| | | entity.Erpid = Convert.ToInt32(singleId); |
| | | //entity.Erpid = singleId.ToString(); |
| | | } |
| | | |
| | | var single = base.GetSingle(it => it.Erpid == entity.Erpid); |
| | | if (single != null) entity.Guid = single.Guid; |
| | |
| | | { |
| | | Erpid = Convert.ToInt32(dto.Id), /// ERPID |
| | | Cab001 = dto.FBillNo, /// 工单单号 |
| | | Cab002 = Convert.ToInt32(dto.FSeq), /// 序号 |
| | | Cab003 = dto.FMaterialID, /// 材料编码 |
| | | //Cab002 = Convert.ToInt32(dto.FSeq), /// 序号 |
| | | Cab002 = Convert.ToInt32(dto.FBillNoType), /// 序号 |
| | | Cab003 = dto.FMaterialID2, /// 材料编码 |
| | | Cab006 = !string.IsNullOrEmpty(dto.FNeedQty) |
| | | ? Convert.ToDecimal(dto.FNeedQty) |
| | | : null, /// 需领用量 |
| | |
| | | Lot = dto.FLot, /// 批号 |
| | | DepotCode = dto.FStockID, /// 仓库 |
| | | IssueType = dto.FIssueType, /// 发料方式 |
| | | // Cab008 = dto.F_UNW_Text_tpgy, /// 工艺 |
| | | Cab008 = dto.F_UNW_Text_tpgy, /// 工艺 |
| | | Cab009 = dto.FUnitID, /// 单位 |
| | | SupplyType = dto.FSupplyType, /// 供应类型(C采购 Z自制 W委外) |
| | | Cab012 = !string.IsNullOrEmpty(dto.FStdQty) |
| | |
| | | // ParentItemName = dto.F_XIFG_Base_apv /// 父项物料名称 |
| | | }; |
| | | |
| | | //仓库编码转ID,DepotCode = dto.FStockID, |
| | | var entityDepotCode = Db.Queryable<MesDepots>() |
| | | .Where(x => x.DepotCode == dto.FStockID) |
| | | .Select(x => x.DepotId.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityDepotCode)) |
| | | { |
| | | womcab.DepotCode = entityDepotCode; |
| | | } |
| | | else |
| | | { |
| | | womcab.DepotCode = "0"; |
| | | } |
| | | |
| | | //单位编码转ID,Cab009 = dto.FUnitID, |
| | | var entityCab009 = Db.Queryable<MesUnit>() |
| | | .Where(x => x.Fnumber == dto.FUnitID) |
| | | .Select(x => x.Id.ToString()) |
| | | .First(); |
| | | if (!string.IsNullOrWhiteSpace(entityCab009)) |
| | | { |
| | | womcab.Cab009 = entityCab009; |
| | | } |
| | | else |
| | | { |
| | | womcab.Cab009 = "0"; |
| | | } |
| | | |
| | | //根据单号+单别+材料品号,获取对应的id |
| | | var singleId = Db.Queryable<Womcab>() |
| | | .Where(x => x.Cab001 == dto.FBillNo && x.Cab003 == dto.FMaterialID2 && x.Cab002 == Convert.ToInt32(dto.FBillNoType)) |
| | | .Select(x => x.Erpid) |
| | | .First(); |
| | | |
| | | if (singleId == null)//如果没有则生成一个新的id |
| | | { |
| | | //entity.EbelnK3id = GenerateNewId2().ToString(); |
| | | womcab.Erpid = (int)GenerateNewId2(); |
| | | } |
| | | else//如果有则使用已有的id |
| | | { |
| | | //entity.EbelnK3id = singleId.EbelnK3id; |
| | | womcab.Erpid = singleId; |
| | | } |
| | | |
| | | var entity = Db.Queryable<Womcab>() |
| | | .Where(s => s.Eid == womcab.Eid).Single(); |
| | | if (entity != null) womcab.Guid = entity.Guid; |
| | | .Where(s => s.Cab001 == womcab.Cab001 && s.Cab002 == womcab.Cab002 && s.Cab003 == womcab.Cab003) |
| | | .Single(); |
| | | if (entity != null) |
| | | womcab.Guid = entity.Guid; |
| | | else |
| | | womcab.Guid = Guid.NewGuid(); // 确保每条新数据唯一 |
| | | |
| | | womcabList.Add(womcab); |
| | | } |
| | | |
| | | return womcabList; |
| | | } |
| | | |
| | | ///// <summary> |
| | | ///// 生成新的主表ID,确保不重复 |
| | | ///// </summary> |
| | | //private decimal GenerateNewId() |
| | | //{ |
| | | // // 处理空表的情况,从1开始 |
| | | // var maxId = Db.Queryable<Womcaa>().Max(x => (decimal?)x.Erpid) ?? 0; |
| | | // var newId = maxId + 1; |
| | | |
| | | // // 双重检查,确保生成的ID不存在 |
| | | // while (Db.Queryable<Womcaa>().Where(x => x.Erpid == newId).Any()) |
| | | // { |
| | | // newId++; |
| | | // } |
| | | |
| | | // return newId; |
| | | //} |
| | | |
| | | /// <summary> |
| | | /// 生成新的主表ID,通过数据库序列获取唯一ID |
| | | /// </summary> |
| | | private decimal GenerateNewId() |
| | | { |
| | | try |
| | | { |
| | | // 替换为: |
| | | var sequenceValueObj = Db.Ado.GetScalar("SELECT NEXT VALUE FOR MES_WOMCAB_IN_seq"); |
| | | var sequenceValue = Convert.ToDecimal(sequenceValueObj); |
| | | // 验证序列值是否有效 |
| | | if (sequenceValue <= 0) |
| | | { |
| | | throw new InvalidOperationException($"数据库序列 MES_WOMCAB_IN_seq 返回了无效的值: {sequenceValue}"); |
| | | } |
| | | |
| | | return sequenceValue; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 记录异常信息 |
| | | Console.WriteLine($"调用数据库序列 MES_WOMCAB_IN_seq 失败: {ex.Message}"); |
| | | |
| | | // 向上层抛出明确的异常信息 |
| | | throw new InvalidOperationException($"生成子表ID失败,无法获取数据库序列值: {ex.Message}", ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 生成新的子表ID,通过数据库序列获取唯一ID |
| | | /// </summary> |
| | | private decimal GenerateNewId2() |
| | | { |
| | | try |
| | | { |
| | | // 替换为: |
| | | var sequenceValueObj = Db.Ado.GetScalar("SELECT NEXT VALUE FOR MES_WOMCAB_IN_DATA_seq"); |
| | | var sequenceValue = Convert.ToDecimal(sequenceValueObj); |
| | | // 验证序列值是否有效 |
| | | if (sequenceValue <= 0) |
| | | { |
| | | throw new InvalidOperationException($"数据库序列 MES_WOMCAB_IN_DATA_seq 返回了无效的值: {sequenceValue}"); |
| | | } |
| | | |
| | | return sequenceValue; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 记录异常信息 |
| | | Console.WriteLine($"调用数据库序列 MES_WOMCAB_IN_DATA_seq 失败: {ex.Message}"); |
| | | |
| | | // 向上层抛出明确的异常信息 |
| | | throw new InvalidOperationException($"生成子表ID失败,无法获取数据库序列值: {ex.Message}", ex); |
| | | } |
| | | } |
| | | //唯一键组合:主表就是工单单别+工单单号,子表是工单单号+工单单号+材料品号 |
| | | |
| | | /// <summary> |
| | | /// 整单删除,调用存储过程 |
| | | /// </summary> |
| | | /// <param name="billNo">单号</param> |
| | | /// <returns>被删除的单号</returns> |
| | | public (int outSum, string outMsg) Delete(string FBillNo, string FBillTypeID) |
| | | { |
| | | try |
| | | { |
| | | var outMsg = string.Empty; |
| | | var outSum = 0; |
| | | |
| | | var parameters = new List<SugarParameter> |
| | | { |
| | | new SugarParameter("@FBillNo", FBillNo), |
| | | new SugarParameter("@FBillTypeID", FBillTypeID), |
| | | new SugarParameter("@outMsg", outMsg, typeof(string), ParameterDirection.Output, 2500), |
| | | new SugarParameter("@outSum", outSum, typeof(int), ParameterDirection.Output) |
| | | }; |
| | | |
| | | Db.Ado.UseStoredProcedure().ExecuteCommand("ERP_DeleteWomcaaByBillNo", parameters); |
| | | |
| | | outMsg = parameters[2].Value?.ToString() ?? ""; |
| | | outSum = parameters[3].Value != null ? Convert.ToInt32(parameters[index: 3].Value) : -1; |
| | | return (outSum, outMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new InvalidOperationException($"调用存储过程 ERP_DeleteWomcaaByBillNo 失败: {ex.Message}", ex); |
| | | } |
| | | } |
| | | } |