| | |
| | | using MES.Service.DB; |
| | | using MES.Service.Dto.service; |
| | | using MES.Service.Modes; |
| | | using MES.Service.util; |
| | | using SqlSugar; |
| | | |
| | | namespace MES.Service.service.Warehouse; |
| | |
| | | |
| | | //这里面写的代码不会给覆盖,如果要重新生成请删除 MesInvItemBarcodesManager.cs |
| | | |
| | | #region 生产领料条码验证 |
| | | |
| | | #region 教学方法 |
| | | |
| | | /// <summary> |
| | | /// 仓储方法满足不了复杂业务需求,业务代码请在这里面定义方法 |
| | | /// </summary> |
| | | public void Study() |
| | | //生产领料条码验证合理性 |
| | | private bool PdaProdPickItemCkBar(string cBarcode, string cDaa001) |
| | | { |
| | | /*********查询*********/ |
| | | |
| | | var data1 = base.GetById(1); //根据ID查询 |
| | | var data2 = base.GetList(); //查询所有 |
| | | var data3 = base.GetList(it => 1 == 1); //根据条件查询 |
| | | //var data4 = base.GetSingle(it => 1 == 1);//根据条件查询一条,如果超过一条会报错 |
| | | |
| | | var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 分页查询 |
| | | var data5 = base.GetPageList(it => 1 == 1, p); |
| | | Console.Write(p.TotalCount); //返回总数 |
| | | |
| | | var data6 = |
| | | base.GetPageList(it => 1 == 1, p, |
| | | it => SqlFunc.GetRandom()); // 分页查询加排序 |
| | | Console.Write(p.TotalCount); //返回总数 |
| | | |
| | | var conModels = new List<IConditionalModel>(); //组装条件查询作为条件实现 分页查询加排序 |
| | | conModels.Add(new ConditionalModel |
| | | try |
| | | { |
| | | FieldName = typeof(MesInvItemBarcodes).GetProperties()[0].Name, |
| | | ConditionalType = ConditionalType.Equal, FieldValue = "1" |
| | | }); //id=1 |
| | | var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom()); |
| | | // 1. 检查条码是否为空 |
| | | if (string.IsNullOrEmpty(cBarcode)) |
| | | { |
| | | throw new Exception("请输入条码!"); |
| | | } |
| | | |
| | | AsQueryable().Where(x => 1 == 1) |
| | | .ToList(); //支持了转换成queryable,我们可以用queryable实现复杂功能 |
| | | // 2. 检查条码是否存在于 MesInvItemBarcodes 表中 |
| | | int tempNum = Db.Queryable<MesInvItemBarcodes>() |
| | | .Where(it => it.ItemBarcode == cBarcode) |
| | | .Count(); |
| | | if (tempNum == 0) |
| | | { |
| | | throw new Exception("条码不存在!"); |
| | | } |
| | | |
| | | // 3. 检查条码是否存在于 MesInvItemStocks 表中 |
| | | tempNum = Db.Queryable<MesInvItemStocks>() |
| | | .Where(it => it.ItemBarcode == cBarcode) |
| | | .Count(); |
| | | if (tempNum == 0) |
| | | { |
| | | throw new Exception("库存中无此条码!"); |
| | | } |
| | | |
| | | /*********插入*********/ |
| | | var insertData = new MesInvItemBarcodes(); //测试参数 |
| | | var insertArray = new[] { insertData }; |
| | | base.Insert(insertData); //插入 |
| | | base.InsertRange(insertArray); //批量插入 |
| | | var id = base.InsertReturnIdentity(insertData); //插入返回自增列 |
| | | AsInsertable(insertData).ExecuteCommand(); //我们可以转成 Insertable实现复杂插入 |
| | | // 4. 获取 MesInvItemBarcodes 的数据 |
| | | var mesInvItemBarcodes = Db.Queryable<MesInvItemBarcodes>() |
| | | .Where(it => it.ItemBarcode == cBarcode) |
| | | .First(); |
| | | if (mesInvItemBarcodes == null) |
| | | { |
| | | throw new Exception("条码不存在!"); |
| | | } |
| | | |
| | | // 5. 检查条码数量是否为 0 |
| | | if (mesInvItemBarcodes.Quantity == 0) |
| | | { |
| | | throw new Exception("此条码数量为0!"); |
| | | } |
| | | |
| | | /*********更新*********/ |
| | | var updateData = new MesInvItemBarcodes(); //测试参数 |
| | | var updateArray = new[] { updateData }; //测试参数 |
| | | base.Update(updateData); //根据实体更新 |
| | | base.UpdateRange(updateArray); //批量更新 |
| | | //base.Update(it => new MesInvItemBarcodes() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 只更新ClassName列和CreateTime列,其它列不更新,条件id=1 |
| | | AsUpdateable(updateData).ExecuteCommand(); //转成Updateable可以实现复杂的插入 |
| | | // 6. 检查条码状态 |
| | | if (mesInvItemBarcodes.Barcodestatus == 1 || |
| | | mesInvItemBarcodes.Hbdytm == 1) |
| | | { |
| | | throw new Exception("无效条码!"); |
| | | } |
| | | |
| | | // 7. 检查条码是否被冻结 |
| | | if (mesInvItemBarcodes.Visable == 1) |
| | | { |
| | | throw new Exception("条码冻结!"); |
| | | } |
| | | |
| | | /*********删除*********/ |
| | | var deldata = new MesInvItemBarcodes(); //测试参数 |
| | | base.Delete(deldata); //根据实体删除 |
| | | base.DeleteById(1); //根据主键删除 |
| | | base.DeleteById(new[] { 1, 2 }); //根据主键数组删除 |
| | | base.Delete(it => 1 == 2); //根据条件删除 |
| | | AsDeleteable().Where(it => 1 == 2) |
| | | .ExecuteCommand(); //转成Deleteable实现复杂的操作 |
| | | // 8. 检查条码是否作废 |
| | | if (mesInvItemBarcodes.Location == 2) |
| | | { |
| | | throw new Exception("条码作废!"); |
| | | } |
| | | |
| | | // 9. 检查投料单是否需要此物料 |
| | | tempNum = Db.Queryable<Womdab>() |
| | | .Where(it => |
| | | it.Dab001 == cDaa001 && it.Dab003 == |
| | | mesInvItemBarcodes.ItemId.ToString()) |
| | | .Count(); |
| | | if (tempNum == 0) |
| | | { |
| | | throw new Exception("投料单不需要此物料!"); |
| | | } |
| | | |
| | | string sql = |
| | | "SELECT COUNT(1) FROM WOMDAB WHERE DAB001='" + cDaa001 + |
| | | "' AND DAB003='" + mesInvItemBarcodes.ItemId + |
| | | "' AND DAB017=(SELECT DEPOTS_CODE FROM MES_INV_ITEM_STOCKS WHERE ITEM_BARCODE='" + |
| | | cBarcode + "')"; |
| | | |
| | | // 10. 检查发料仓库是否正确 |
| | | tempNum = Db.Ado.SqlQuerySingle<int>(sql); |
| | | if (tempNum == 0) |
| | | { |
| | | throw new Exception("发料仓库有误!"); |
| | | } |
| | | |
| | | // 11. 成功,返回结果 |
| | | return true; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 捕获异常并重新抛出 |
| | | throw new Exception($"报错: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | public decimal? GetBarCodesQuan(WarehouseQuery query) |
| | | { |
| | | if (!PdaProdPickItemCkBar(query.barcode, query.daa001)) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | var invItemBarcodes = Db.Queryable<MesInvItemBarcodes>() |
| | | .Where(s => s.ItemBarcode == query.barcode).First(); |
| | | |
| | | if (invItemBarcodes == null) |
| | | { |
| | | throw new Exception("条码不存在!"); |
| | | } |
| | | |
| | | return invItemBarcodes.Quantity; |
| | | } |
| | | |
| | | //生产领料保存 |
| | | public string PrcRfPdaProdPickItem3(WarehouseQuery query) |
| | | { |
| | | var (factory, company) = UserUtil.GetFactory(query.userName); |
| | | var param = new ProdPickParams |
| | | { |
| | | CUser = query.userName, |
| | | CBarcode = query.barcode, |
| | | CDaa001 = query.daa001, |
| | | CNum = query.Num, |
| | | PiFactory = factory, |
| | | PiCompany = company |
| | | }; |
| | | |
| | | // 检查发料数量是否合法 |
| | | if (param.CNum <= 0) |
| | | { |
| | | throw new Exception("发料数量不能小于等于0!"); |
| | | } |
| | | |
| | | // 检查条码是否存在 |
| | | param.CInvItemBarcodes = Db.Queryable<MesInvItemBarcodes>() |
| | | .Where(it => it.ItemBarcode == param.CBarcode) |
| | | .First(); |
| | | if (param.CInvItemBarcodes == null) |
| | | { |
| | | throw new Exception("条码不存在!"); |
| | | } |
| | | |
| | | // 检查条码是否已入库 |
| | | param.CInvItemStocks = Db.Queryable<MesInvItemStocks>() |
| | | .Where(it => it.ItemBarcode == param.CBarcode) |
| | | .First(); |
| | | if (param.CInvItemStocks == null) |
| | | { |
| | | throw new Exception("条码未入库!"); |
| | | } |
| | | |
| | | // 检查工单号是否存在 |
| | | param.CWomdaa = Db.Queryable<Womdaa>() |
| | | .Where(it => it.Daa001 == param.CDaa001) |
| | | .First(); |
| | | if (param.CWomdaa == null) |
| | | { |
| | | throw new Exception("不存在此工单!"); |
| | | } |
| | | |
| | | // 检查发料数量是否超出条码数量 |
| | | if (param.CNum > param.CInvItemBarcodes.Quantity) |
| | | { |
| | | throw new Exception("发料数量不能大于条码数量!"); |
| | | } |
| | | |
| | | // 检查条码合法性 |
| | | if (!PdaProdPickItemCkBar(param.CBarcode, param.CDaa001)) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | // 计算剩余可发数量 |
| | | decimal? tempNum = CalculateRemainingQuantity(param.CDaa001, |
| | | param.CInvItemBarcodes.ItemId); |
| | | if (param.CNum > tempNum) |
| | | { |
| | | throw new Exception("发料数量不能大于对应物料的未发料数量!"); |
| | | } |
| | | |
| | | // 工单部门名称 |
| | | param.CDepart = Db.Queryable<SysDepartment>() |
| | | .Where(dep => dep.Id.ToString() == param.CWomdaa.Daa013) |
| | | .Select(dep => dep.Departmentname) |
| | | .First(); |
| | | |
| | | // 生成新条码 |
| | | param.NewBarcode = GenerateNewBarcode(param.CBarcode); |
| | | |
| | | UseTransaction(db => |
| | | { |
| | | // 对出库单的操作 |
| | | var (outId, outBill) = HandleInventoryOut(db, param); |
| | | param.COutId = outId; |
| | | param.OutBill = outBill; |
| | | |
| | | // 更新条码数据 |
| | | UpdateBarcodeData(db, param); |
| | | |
| | | // 生成打印条码并插入到 mes_rf_prnbarcode |
| | | GenerateAndInsertPrintBarcode(db, param); |
| | | |
| | | return 1; |
| | | }); |
| | | |
| | | return "001"; |
| | | } |
| | | |
| | | private void UpdateBarcodeData(SqlSugarScope db, ProdPickParams param) |
| | | { |
| | | // 更新条码数据 |
| | | db.Updateable<MesInvItemBarcodes>() |
| | | .SetColumns(it => new MesInvItemBarcodes |
| | | { Oldqty = it.Quantity, Quantity = it.Quantity - param.CNum }) |
| | | .Where(it => it.ItemBarcode == param.CBarcode) |
| | | .ExecuteCommand(); |
| | | |
| | | // 插入新的条码记录 |
| | | db.Insertable(new MesInvItemBarcodes |
| | | { |
| | | ItemNo = param.CInvItemBarcodes.ItemNo, |
| | | ItemId = param.CInvItemBarcodes.ItemId, |
| | | CreateBy = param.CUser, |
| | | CreateDate = DateTime.Now, |
| | | TaskNo = param.CDaa001, |
| | | WorkNo = param.CWomdaa.Daa021, |
| | | SuppNo = param.CInvItemBarcodes.SuppNo, |
| | | Mblnr = param.CInvItemBarcodes.Mblnr, |
| | | Zeile = param.CInvItemBarcodes.Zeile, |
| | | Factory = param.CInvItemBarcodes.Factory, |
| | | Company = param.CInvItemBarcodes.Company, |
| | | EbelnK3id = param.CInvItemBarcodes.EbelnK3id, |
| | | LineK3id = param.CInvItemBarcodes.LineK3id, |
| | | Quantity = param.CNum, |
| | | Oldqty = param.CNum, |
| | | ItemBarcode = param.NewBarcode, |
| | | Unit = param.CInvItemBarcodes.Unit, |
| | | LotDate = param.CInvItemBarcodes.LotDate, |
| | | Memo = "生产领料", |
| | | ItemSname = param.CInvItemBarcodes.ItemSname, |
| | | TrLotno = param.CInvItemBarcodes.TrLotno, |
| | | BillNo = param.CInvItemBarcodes.BillNo, |
| | | InsDate = param.CInvItemBarcodes.InsDate, |
| | | WorkLine = param.CInvItemBarcodes.WorkLine, |
| | | ComeFlg = 6, |
| | | OldItemBarcode = param.CBarcode |
| | | }).ExecuteCommand(); |
| | | |
| | | // 更新条码库存 |
| | | db.Updateable<MesInvItemStocks>() |
| | | .SetColumns(it => new MesInvItemStocks |
| | | { Quantity = it.Quantity - param.CNum }) |
| | | .Where(it => it.ItemBarcode == param.CBarcode) |
| | | .ExecuteCommand(); |
| | | |
| | | // 插入出库条码明细表 |
| | | db.Insertable(new MesInvItemOutCDetails |
| | | { |
| | | ItemOutId = param.COutId, |
| | | ItemNo = param.CInvItemBarcodes.ItemNo, |
| | | ItemId = param.CInvItemBarcodes.ItemId, |
| | | CreateBy = param.CUser, |
| | | CreateDate = DateTime.Now, |
| | | DepotCode = param.CInvItemStocks.DepotsCode, |
| | | DepotSectionCode = param.CInvItemStocks.DepotSectionsCode, |
| | | TaskNo = param.CDaa001, |
| | | WorkNo = param.CWomdaa.Daa021, |
| | | SuppNo = param.CInvItemBarcodes.SuppNo, |
| | | PbillNo = param.OutBill, |
| | | Factory = param.PiFactory, |
| | | Company = param.PiCompany, |
| | | EbelnK3id = param.CInvItemStocks.EbelnK3id, |
| | | LineK3id = param.CInvItemStocks.LineK3id, |
| | | Quantity = param.CNum, |
| | | ItemBarcode = param.NewBarcode |
| | | }).ExecuteCommand(); |
| | | |
| | | // 插入到 MesInvBusiness2 表 |
| | | db.Insertable(new MesInvBusiness2 |
| | | { |
| | | Status = 1, |
| | | BillTypeId = 200, |
| | | ItemNo = param.CInvItemBarcodes.ItemNo, |
| | | ItemId = param.CInvItemBarcodes.ItemId, |
| | | CreateBy = param.CUser, |
| | | CreateDate = DateTime.Now, |
| | | TaskNo = param.CDaa001, |
| | | WorkNo = param.CWomdaa.Daa021, |
| | | SuppNo = param.CInvItemBarcodes.SuppNo, |
| | | Factory = param.PiFactory, |
| | | Company = param.PiCompany, |
| | | EbelnK3id = param.CInvItemStocks.EbelnK3id, |
| | | LineK3id = param.CInvItemStocks.LineK3id, |
| | | Quantity = param.CNum, |
| | | ItemBarcode = param.CBarcode |
| | | }).ExecuteCommand(); |
| | | } |
| | | |
| | | private void GenerateAndInsertPrintBarcode(SqlSugarScope db, |
| | | ProdPickParams param) |
| | | { |
| | | string cSupName = null; |
| | | if (!string.IsNullOrEmpty(param.CInvItemBarcodes.SuppNo)) |
| | | { |
| | | cSupName = db.Queryable<MesSupplier>() |
| | | .Where(it => it.SuppNo == param.CInvItemBarcodes.SuppNo) |
| | | .Select(it => it.SuppName) |
| | | .First(); |
| | | } |
| | | |
| | | int cId = |
| | | db.Ado.GetInt( |
| | | "SELECT F_GETSEQNEXTVALUE('MES_RF_PRNBARCODE') FROM dual"); |
| | | |
| | | // 插入打印条码记录 |
| | | db.Insertable(new MesRfPrnbarcode |
| | | { |
| | | Id = cId, |
| | | Forder = "1", |
| | | Fno = "1", |
| | | CreateDate = DateTime.Now, |
| | | Strp1 = param.CBarcode, |
| | | Strp2 = cSupName ?? " ", |
| | | Strp3 = param.CInvItemBarcodes.ItemNo, |
| | | Strp4 = GetItemName(param.CInvItemBarcodes.ItemId) ?? " ", |
| | | Strp5 = |
| | | $"{param.CInvItemBarcodes.Quantity - param.CNum} {GetUnitName(param.CInvItemBarcodes.Unit)}", |
| | | Strp6 = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | Strp7 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", |
| | | Strp8 = param.CBarcode, |
| | | Strp9 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", |
| | | Strp10 = param.CBarcode, |
| | | Strp11 = param.CBarcode, |
| | | Strp12 = param.CBarcode |
| | | }).ExecuteCommand(); |
| | | |
| | | db.Insertable(new MesRfPrnbarcode |
| | | { |
| | | Id = cId, |
| | | Forder = "1", |
| | | Fno = "1", |
| | | CreateDate = DateTime.Now, |
| | | Strp1 = param.NewBarcode, |
| | | Strp2 = cSupName ?? " ", |
| | | Strp3 = param.CInvItemBarcodes.ItemNo, |
| | | Strp4 = GetItemName(param.CInvItemBarcodes.ItemId) ?? " ", |
| | | Strp5 = $"{param.CNum} {GetUnitName(param.CInvItemBarcodes.Unit)}", |
| | | Strp6 = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | Strp7 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", |
| | | Strp8 = param.NewBarcode, |
| | | Strp9 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", |
| | | Strp10 = param.NewBarcode, |
| | | Strp11 = param.NewBarcode, |
| | | Strp12 = param.NewBarcode |
| | | }).ExecuteCommand(); |
| | | } |
| | | |
| | | private (int OutId, string OutBill) HandleInventoryOut(SqlSugarScope db, |
| | | ProdPickParams param) |
| | | { |
| | | // 处理出库单的插入或更新逻辑 |
| | | var tempNum = db.Queryable<MesInvItemOuts>() |
| | | .Where(it => it.TaskNo == param.CDaa001 && it.Status == 0) |
| | | .Count(); |
| | | |
| | | int cOutId = 0; |
| | | string cOutBill; |
| | | |
| | | if (tempNum == 0) |
| | | { |
| | | string sql = |
| | | "SELECT COUNT(1) FROM MES_INV_ITEM_OUTS WHERE TRUNC(CREATE_DATE)=TRUNC(SYSDATE);"; |
| | | int todayCount = db.Ado.SqlQuerySingle<int>(sql); |
| | | |
| | | cOutBill = $"P{DateTime.Now:yyyyMMdd}{(todayCount + 1):D4}"; |
| | | |
| | | // 插入新的出库单 |
| | | db.Insertable(new MesInvItemOuts |
| | | { |
| | | ItemOutNo = cOutBill, |
| | | TaskNo = param.CDaa001, |
| | | Status = 0, |
| | | CreateBy = param.CUser, |
| | | CreateDate = DateTime.Now, |
| | | WorkNo = param.CWomdaa.Daa021, |
| | | OutType = "生产领料", |
| | | BoardItem = param.CWomdaa.Daa002, |
| | | PbillNo = param.CDaa001, |
| | | BillTypeId = 200, |
| | | TransactionNo = 201, |
| | | Company = param.PiCompany, |
| | | Factory = param.PiFactory, |
| | | Remark = "生产领料", |
| | | DepotCode = param.CInvItemStocks.DepotsCode, |
| | | OutDate = DateTime.Now, |
| | | OutPart = param.CDepart |
| | | }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | // 获取现有出库单号 |
| | | var outItem = db.Queryable<MesInvItemOuts>() |
| | | .Where(it => it.TaskNo == param.CDaa001 && it.Status == 0) |
| | | .Select(it => new { it.ItemOutNo, it.Id }) |
| | | .First(); |
| | | |
| | | cOutBill = outItem.ItemOutNo; |
| | | cOutId = Convert.ToInt32(outItem.Id); |
| | | } |
| | | |
| | | // 插入或更新从表 |
| | | InsertOrUpdateOutItems(db, cOutId, param); |
| | | |
| | | return (cOutId, cOutBill); |
| | | } |
| | | |
| | | private void InsertOrUpdateOutItems(SqlSugarScope db, int cOutId, |
| | | ProdPickParams param) |
| | | { |
| | | var tempNum = db.Queryable<MesInvItemOutItems>() |
| | | .Where(it => |
| | | it.ItemId == param.CInvItemBarcodes.ItemId && |
| | | it.ItemOutId == cOutId) |
| | | .Count(); |
| | | |
| | | decimal? cNumTemp = param.CNum; |
| | | |
| | | string sql = |
| | | "SELECT B.Id, NVL(A.YF, 0) yfl, B.DAB006 - NVL(A.YF, 0) Qty FROM WOMDAB B LEFT JOIN (SELECT SUM(QUANTITY) YF, ITEM_DABID FROM MES_INV_ITEM_OUT_ITEMS GROUP BY ITEM_DABID) A ON A.ITEM_DABID = B.ID WHERE DAB003 = '" + |
| | | param.CInvItemBarcodes.ItemId + "' AND DAB001 = '" + param.CDaa001 + |
| | | "' ORDER BY TO_NUMBER(DAB002)"; |
| | | |
| | | var womdabList = db.Ado.SqlQuery<DabResult>(sql); |
| | | |
| | | foreach (var item in womdabList) |
| | | { |
| | | if (item.Qty <= 0) continue; |
| | | var itemDabid = item.Id; |
| | | if (cNumTemp <= item.Qty) |
| | | { |
| | | if (tempNum == 0) |
| | | { |
| | | // 插入新的发料记录 |
| | | db.Insertable(new MesInvItemOutItems |
| | | { |
| | | ItemOutId = cOutId, |
| | | Quantity = cNumTemp, |
| | | ItemDabid = itemDabid, |
| | | ItemId = param.CInvItemBarcodes.ItemId, |
| | | ItemNo = param.CInvItemBarcodes.ItemNo, |
| | | CreateBy = param.CUser, |
| | | CreateDate = DateTime.Now, |
| | | Factory = param.PiFactory, |
| | | Company = param.PiCompany, |
| | | DepotCode = param.CInvItemStocks.DepotsCode, |
| | | TaskNo = param.CDaa001, |
| | | EbelnK3id = param.CInvItemBarcodes.EbelnK3id, |
| | | LineK3id = param.CInvItemBarcodes.LineK3id, |
| | | PbillNo = param.CDaa001, |
| | | WorkNo = param.CInvItemStocks.WorkNo, |
| | | WorkLine = param.CInvItemStocks.WorkLine, |
| | | DepotSectionCode = |
| | | param.CInvItemStocks.DepotSectionsCode |
| | | }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | // 更新现有发料记录的数量 |
| | | db.Updateable<MesInvItemOutItems>() |
| | | .SetColumns(it => new MesInvItemOutItems |
| | | { Quantity = it.Quantity + cNumTemp }) |
| | | .Where(it => |
| | | it.ItemOutId == cOutId && |
| | | it.ItemDabid == itemDabid) |
| | | .ExecuteCommand(); |
| | | } |
| | | |
| | | // 更新 WOMDAB 表的发料数量 |
| | | db.Updateable<Womdab>() |
| | | .SetColumns(it => new Womdab |
| | | { Dab007 = item.Yfl + cNumTemp }) |
| | | .Where(it => it.Id == itemDabid) |
| | | .ExecuteCommand(); |
| | | |
| | | break; |
| | | } |
| | | |
| | | // 插入剩余的发料记录 |
| | | db.Insertable(new MesInvItemOutItems |
| | | { |
| | | ItemOutId = cOutId, |
| | | Quantity = item.Qty, |
| | | ItemDabid = itemDabid, |
| | | ItemId = param.CInvItemBarcodes.ItemId, |
| | | ItemNo = param.CInvItemBarcodes.ItemNo, |
| | | CreateBy = param.CUser, |
| | | CreateDate = DateTime.Now, |
| | | Factory = param.PiFactory, |
| | | Company = param.PiCompany, |
| | | DepotCode = param.CInvItemStocks.DepotsCode, |
| | | TaskNo = param.CDaa001, |
| | | EbelnK3id = param.CInvItemBarcodes.EbelnK3id, |
| | | LineK3id = param.CInvItemBarcodes.LineK3id, |
| | | PbillNo = param.CDaa001, |
| | | WorkNo = param.CInvItemStocks.WorkNo, |
| | | WorkLine = param.CInvItemStocks.WorkLine, |
| | | DepotSectionCode = param.CInvItemStocks.DepotSectionsCode |
| | | }).ExecuteCommand(); |
| | | |
| | | cNumTemp -= item.Qty; |
| | | |
| | | // 更新 WOMDAB 表的发料数量 |
| | | db.Updateable<Womdab>() |
| | | .SetColumns(it => new Womdab { Dab007 = it.Dab006 }) |
| | | .Where(it => it.Id == itemDabid) |
| | | .ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | private string GenerateNewBarcode(string oldBarcode) |
| | | { |
| | | // 生成新的条码逻辑 |
| | | int count = Db.Queryable<MesInvItemBarcodes>() |
| | | .Where(b => b.OldItemBarcode == oldBarcode).Count(); |
| | | return $"{oldBarcode}-{count + 1}"; |
| | | } |
| | | |
| | | private decimal? CalculateRemainingQuantity( |
| | | string cDaa001, decimal? itemId) |
| | | { |
| | | // 计算剩余可发数量 |
| | | var womdab = Db.Queryable<Womdab, Womdaa>((b, a) => new JoinQueryInfos( |
| | | JoinType.Left, b.Pid == a.Id)) |
| | | .Where((b, a) => |
| | | a.Daa001 == cDaa001 && b.Dab003 == itemId.ToString()) |
| | | .Select(b => new |
| | | { |
| | | TotalQuantity = SqlFunc.AggregateMax(b.Dab006), |
| | | IssuedQuantity = SqlFunc.AggregateMax(b.Dab007) |
| | | }) |
| | | .First(); |
| | | |
| | | return womdab.TotalQuantity - womdab.IssuedQuantity; |
| | | } |
| | | |
| | | private static string GetItemName(decimal? pId) |
| | | { |
| | | try |
| | | { |
| | | if (pId == null) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | // 查询物料名称 |
| | | string itemName = Db.Queryable<MesItems>() |
| | | .Where(it => it.Id == pId) |
| | | .Select(it => it.ItemName) |
| | | .First(); |
| | | |
| | | return itemName; |
| | | } |
| | | catch (Exception) |
| | | { |
| | | throw new Exception("未找到物料名称,物料id号为" + pId); |
| | | } |
| | | } |
| | | |
| | | private string GetUnitName(string? pId) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(pId)) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | // 查询单位名称是否存在 |
| | | int tempNum = Db.Queryable<MesUnit>() |
| | | .Where(it => it.Id.ToString() == pId) |
| | | .Count(); |
| | | |
| | | string unitName; |
| | | |
| | | if (tempNum != 0) |
| | | { |
| | | // 如果在 MES_UNIT 表中找到单位名称 |
| | | unitName = Db.Queryable<MesUnit>() |
| | | .Where(it => it.Id.ToString() == pId) |
| | | .Select(it => it.Fname) |
| | | .First(); |
| | | } |
| | | else |
| | | { |
| | | // 如果在 MES_UNIT 表中找不到,在 MES_ITEMS 表中查找相关联的单位名称 |
| | | unitName = Db.Queryable<MesItems, MesUnit>((i, u) => |
| | | new JoinQueryInfos( |
| | | JoinType.Left, i.ItemUnit == u.Id.ToString())) |
| | | .Where((i, u) => i.Id.ToString() == pId) |
| | | .Select((i, u) => u.Fname) |
| | | .First(); |
| | | } |
| | | |
| | | return unitName; |
| | | } |
| | | catch (Exception) |
| | | { |
| | | throw new Exception("单位名称未找到,物料id号为" + pId); |
| | | } |
| | | } |
| | | |
| | | private string GetItemModel(decimal? pId) |
| | | { |
| | | try |
| | | { |
| | | if (pId == null) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | // 查询物料规格 |
| | | string itemModel = Db.Queryable<MesItems>() |
| | | .Where(it => it.Id == pId) |
| | | .Select(it => it.ItemModel) |
| | | .First(); |
| | | |
| | | return itemModel; |
| | | } |
| | | catch (Exception) |
| | | { |
| | | throw new Exception("未找到物料型号,物料id号为" + pId); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | |
| | | public class ProdPickParams |
| | | { |
| | | public string? CUser { get; set; } |
| | | public string? CBarcode { get; set; } |
| | | public string? CDaa001 { get; set; } |
| | | public decimal? CNum { get; set; } |
| | | public MesInvItemBarcodes? CInvItemBarcodes { get; set; } |
| | | public MesInvItemStocks? CInvItemStocks { get; set; } |
| | | public Womdaa? CWomdaa { get; set; } |
| | | public string? NewBarcode { get; set; } |
| | | public string? PiCompany { get; set; } |
| | | public string? PiFactory { get; set; } |
| | | public string? CDepart { get; set; } |
| | | public int? COutId { get; set; } |
| | | public string? OutBill { get; set; } |
| | | } |
| | | |
| | | public class DabResult |
| | | { |
| | | public decimal? Id { get; set; } |
| | | public decimal? Yfl { get; set; } |
| | | public decimal? Qty { get; set; } |
| | | } |