| | |
| | | using NewPdaSqlServer.DB; |
| | | using NewPdaSqlServer.Dto.service; |
| | | using NewPdaSqlServer.entity; |
| | | using NewPdaSqlServer.entity.Base; |
| | | using NewPdaSqlServer.util; |
| | | using SqlSugar; |
| | | |
| | |
| | | /// <returns>退料单号列表</returns> |
| | | public List<string> GetPendingQtList() |
| | | { |
| | | return Db.Queryable<MesItemQt>() |
| | | .Where(it => |
| | | (it.Qt015 ?? false) == true && (it.Qt014 ?? false) == false) |
| | | .OrderByDescending(it => it.Qtck) |
| | | .Select(it => it.Qtck) |
| | | .ToList(); |
| | | const string sql = @"SELECT qtck |
| | | FROM MES_ITEM_QT |
| | | WHERE qt015 = 1 |
| | | AND qt026 = 1 |
| | | AND QT029 = 1 |
| | | AND qt032 = 1 |
| | | AND QT014 = 0 "; |
| | | |
| | | return Db.Ado.SqlQuery<string>(sql); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取待处理的退料单明细列表 |
| | | /// 获取待处理的退料单明细列表 |
| | | /// </summary> |
| | | /// <param name="query">仓库查询参数,包含用户名和单据号</param> |
| | | /// <returns>待处理的退料单明细列表</returns> |
| | | public List<MesItemQtDatall> GetPendingQtList(WarehouseQuery query) |
| | | public ProductionPickDto GetPendingQtList(WarehouseQuery query) |
| | | { |
| | | // 从查询参数中获取用户名和单据号 |
| | | var c_User = query.userName; |
| | |
| | | .First(); |
| | | |
| | | // 如果未找到退料单,抛出异常 |
| | | if (mesItemQt == null) |
| | | { |
| | | throw new Exception($"未查询到此其他入库申请单 {p_bill_no}"); |
| | | } |
| | | if (mesItemQt == null) throw new Exception($"未查询到此其他入库申请单 {p_bill_no}"); |
| | | |
| | | // 检查退料单的审核状态(Qt015),未审核则抛出异常 |
| | | if (mesItemQt.Qt015 == false) |
| | | { |
| | | throw new Exception($"其他出库申请单 {p_bill_no} 未审核,请确认!"); |
| | | } |
| | | //// 检查退料单的审核状态(Qt015),未审核则抛出异常 |
| | | //if (mesItemQt.Qt015 == false) |
| | | // throw new Exception($"其他出库申请单 {p_bill_no} 未审核,请确认!"); |
| | | |
| | | // 检查退料单的完结状态(Qt014),已完结则抛出异常 |
| | | if (mesItemQt.Qt014 == true) |
| | | { |
| | | throw new Exception($"其他出库申请单 {p_bill_no} 已完结,请确认!"); |
| | | } |
| | | |
| | | // 联表查询获取未完成的明细列表 |
| | | // 关联表: |
| | | // - MesItemQt: 退料单主表(a) |
| | | // - MesItemQtDatall: 退料单明细表(b) |
| | | // - MesItems: 物料基础信息表(c) |
| | | var pendingList = Db.Queryable<MesItemQt, MesItemQtDatall, MesItems>( |
| | | (a, b, c) => |
| | | new JoinQueryInfos( |
| | | JoinType.Left, a.Guid == b.QtGuid, // 主表和明细表通过Guid关联 |
| | | JoinType.Left, |
| | | b.ItemId == c.Id.ToString())) // 明细表和物料表通过ItemId关联 |
| | | .Where((a, b, c) => |
| | | a.Qtck == p_bill_no && // 匹配单据号 |
| | | (b.Qd007 ?? 0) - (b.Qd008 ?? 0) > |
| | | 0) // 计划数量减去已完成数量大于0的记录(即未完成的记录) |
| | | .OrderBy((a, b, c) => c.ItemNo) // 按物料编号排序 |
| | | .Select((a, b, c) => new MesItemQtDatall |
| | | { |
| | | Qd002 = b.Qd002, // 明细行号 |
| | | Qt011 = a.Qt011, // 退料原因 |
| | | ItemNo = c.ItemNo, // 物料编号 |
| | | Qd007 = b.Qd007 ?? 0, // 计划数量 |
| | | Qd008 = b.Qd008 ?? 0 // 已完成数量 |
| | | }) |
| | | .ToList(); |
| | | var sql = @"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel, |
| | | ISNULL(A.qd007,0) FQty,ISNULL(A.qd008,0) SQty,ISNULL(A.qd007,0) - ISNULL(A.qd008,0) DSQty, |
| | | dbo.F_QX_GETRECODEPOTSE(A.itemId,'','','') as RecoKw |
| | | FROM MES_ITEM_QT_DATALL A |
| | | LEFT JOIN MES_ITEM_QT B ON A.qtGuid = B.guid |
| | | LEFT JOIN MES_ITEMS C ON A.itemId = C.item_id |
| | | WHERE B.qtck = @billNo AND (qt015 = 1 AND qt026 =1 AND QT029 = 1 AND qt032 = 1)"; |
| | | |
| | | return pendingList; |
| | | var sqlParams = new List<SugarParameter> { |
| | | new("@billNo", query.billNo) |
| | | }; |
| | | |
| | | var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql, sqlParams); |
| | | |
| | | // 检查退料单的完结状态(Qt014),已完结则抛出异常 |
| | | if (womdabs.Count < 1) |
| | | throw new Exception($"该其他出库申请单 {p_bill_no} 未全部审核,请确认!"); |
| | | |
| | | var DS_list = womdabs.Where(s => s.DSQty > 0).ToList(); |
| | | |
| | | var YS_list = womdabs.Where(s => s.SQty > 0).ToList(); |
| | | |
| | | var dto = new ProductionPickDto |
| | | { |
| | | //daa001 = womdaa.Daa001, |
| | | //PlanNo = womcaa.Caa020, |
| | | items = DS_list, |
| | | Ysitems = YS_list |
| | | }; |
| | | |
| | | return dto; |
| | | } |
| | | |
| | | public (WarehouseQuery form, List<MesItemQtDatall> item, string message) |
| | |
| | | var p_transaction_no = 202; |
| | | |
| | | // 检查单据号是否为空 |
| | | if (string.IsNullOrEmpty(p_bill_no)) |
| | | { |
| | | throw new Exception("请选取单据号!"); |
| | | } |
| | | if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("请选取单据号!"); |
| | | |
| | | // 检查是否重复扫描 |
| | | var existingBarcode = Db.Queryable<MesInvItemOutCDetails>() |
| | |
| | | it.ItemBarcode == p_item_barcode && it.PbillNo == p_bill_no) |
| | | .Any(); |
| | | |
| | | if (existingBarcode) |
| | | { |
| | | throw new Exception("此条码已经扫码出库,勿重复扫描!"); |
| | | } |
| | | if (existingBarcode) throw new Exception("此条码已经扫码出库,勿重复扫描!"); |
| | | |
| | | // 获取条码信息 |
| | | var barcode = Db.Queryable<MesInvItemBarcodes>() |
| | |
| | | .First(); |
| | | |
| | | if (barcode == null) |
| | | { |
| | | throw new Exception($"mes中不存在此条码,请核对!{p_item_barcode}"); |
| | | } |
| | | |
| | | // 获取库存信息 |
| | | var stock = Db.Queryable<MesInvItemStocks>() |
| | |
| | | .First(); |
| | | |
| | | if (stock == null) |
| | | { |
| | | throw new Exception($"库存中无此条码,请检查条码是否未入库或已出库!{p_item_barcode}"); |
| | | } |
| | | |
| | | |
| | | if (string.IsNullOrEmpty(stock.DepotsCode)) |
| | | { |
| | | throw new Exception($"调拨中的条码不可发料,请先完成调拨单据{p_item_barcode}"); |
| | | } |
| | | |
| | | if (stock.DepotsCode is "S006" or "S005") |
| | | { |
| | | throw new Exception($"条码在不良品仓下 不可发料{p_item_barcode}"); |
| | | } |
| | | |
| | | // 检查是否在寄存仓位 |
| | | // var isDepotSection = Db.Queryable<MesJcDepot>() |
| | |
| | | |
| | | // 获取其他出库单信息 |
| | | var mesItemQt = Db.Queryable<MesItemQt>() |
| | | .Where(it => it.Qtck == p_bill_no) |
| | | .Where(it => it.Qtck == p_bill_no && it.Qt015 == true && it.Qt026 == true && it.Qt029 == true && it.Qt032 == true) |
| | | .First(); |
| | | |
| | | if (mesItemQt == null) |
| | | { |
| | | throw new Exception($"其他出库申请单 {p_bill_no} 不存在,请确认!"); |
| | | } |
| | | |
| | | // 检查仓库是否一致 |
| | | if (mesItemQt.Qt011 != stock.DepotsCode) |
| | | { |
| | | if (Convert.ToInt32(mesItemQt.Qt008) != stock.DepotId) |
| | | throw new Exception( |
| | | $"扫码出货仓库{stock.DepotsCode}与其他出库申请仓库{mesItemQt.Qt011}不一致,请核对!"); |
| | | } |
| | | $"扫码出货仓库id{mesItemQt.Qt008}与其他出库申请仓库{stock.DepotId}不一致,请核对!"); |
| | | |
| | | // 获取出库单明细 |
| | | var qtDetail = Db.Queryable<MesItemQtDatall>() |
| | |
| | | it.ItemId == stock.ItemId.ToString()) |
| | | .First(); |
| | | |
| | | if (qtDetail == null) |
| | | { |
| | | throw new Exception("扫码物料非本次出库申请物料,请核对!"); |
| | | } |
| | | if (qtDetail == null) throw new Exception("扫码物料非本次出库申请物料,请核对!"); |
| | | |
| | | // 检查剩余数量 |
| | | var remainingQty = (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0); |
| | | if (remainingQty <= 0) |
| | | { |
| | | throw new Exception($"申请物料 {barcode.ItemNo} 已出库完成!"); |
| | | } |
| | | |
| | | // 检查数量是否超出 |
| | | if (stock.Quantity > remainingQty) |
| | |
| | | |
| | | // 查找当天是否已存在出库单 |
| | | var existingOut = Db.Queryable<MesInvItemOuts>() |
| | | .Where(it => it.PbillNo == p_bill_no |
| | | .Where(it => it.TaskNo == p_bill_no |
| | | // && it.DepotCode == stock.DepotsCode |
| | | && it.DepotId == stock.DepotId |
| | | && it.OutDate.Value.Date.ToString("yyyy-MM-dd") == |
| | |
| | | { |
| | | // 创建新的出库单 |
| | | outId = Guid.NewGuid(); |
| | | outNo = BillNo.GetBillNo("INV_OUT_OTHER"); |
| | | outNo = BillNo.GetBillNo("QTCK(其他出库)"); |
| | | |
| | | var mesItemQt = Db.Queryable<MesItemQt>() |
| | | .Where(it => it.Qtck == p_bill_no) |
| | |
| | | BillTypeId = p_bill_type_id, |
| | | TransactionNo = p_transaction_no, |
| | | DepotCode = stock.DepotsCode, |
| | | DepotId = stock.DepotsId.HasValue |
| | | ? (int)stock.DepotsId |
| | | DepotId = stock.DepotId.HasValue |
| | | ? (int)stock.DepotId |
| | | : null, |
| | | OutPart = mesItemQt.Qt012, |
| | | FType = 0, |
| | | WorkNo = p_bill_no, |
| | | //WorkNo = p_bill_no, |
| | | OutType = "其他出库", |
| | | PbillNo = p_bill_no, |
| | | //PbillNo = p_bill_no, |
| | | OutDate = DateTime.Now, |
| | | Nflag = 0, |
| | | Reason = mesItemQt.Qt010, |
| | |
| | | it.ItemId == stock.ItemId.ToString()) |
| | | .First(); |
| | | |
| | | if (qtDetail == null) |
| | | { |
| | | throw new Exception($"未找到对应的退料单明细信息"); |
| | | } |
| | | if (qtDetail == null) throw new Exception("未找到对应的退料单明细信息"); |
| | | |
| | | // 检查是否已存在出库物料记录 |
| | | var existingOutItem = Db.Queryable<MesInvItemOutItems>() |
| | | .Where(it => |
| | | it.ItemOutId == outId && it.ItemId == barcode.ItemId) |
| | | it.ItemOutId == outId && it.ItemId == barcode.ItemId && it.ItemDabid == qtDetail.Guid) |
| | | .First(); |
| | | |
| | | if (existingOutItem == null) |
| | |
| | | Guid = Guid.NewGuid(), |
| | | ItemOutId = outId, |
| | | ItemNo = qtDetail.Qd002, |
| | | Quantity = stock.Quantity, |
| | | Quantity = qtDetail.Qd007, |
| | | TlQty = stock.Quantity, |
| | | CreateBy = c_user, |
| | | CreateDate = DateTime.Now, |
| | | LastupdateBy = c_user, |
| | |
| | | ? long.Parse(qtDetail.ItemId) |
| | | : null, |
| | | FType = 0, |
| | | AboutGuid = qtDetail.Guid, |
| | | ItemDabid = qtDetail.Guid |
| | | // Unit = qtDetail.Qd009 |
| | | }; |
| | | |
| | |
| | | // 更新已存在的出库物料记录数量 |
| | | commit += db.Updateable<MesInvItemOutItems>() |
| | | .SetColumns(it => |
| | | it.Quantity == (it.Quantity ?? 0) + stock.Quantity) |
| | | .Where(it => it.ItemOutId == outId && |
| | | it.ItemId == barcode.ItemId && |
| | | it.QtOutId == qtDetail.Guid) |
| | | it.TlQty == (it.TlQty ?? 0) + stock.Quantity) |
| | | .Where(it => it.ItemOutId == outId && it.ItemId == barcode.ItemId && it.ItemDabid == qtDetail.Guid) |
| | | .ExecuteCommand(); |
| | | } |
| | | |
| | |
| | | LastupdateBy = c_user, |
| | | LastupdateDate = DateTime.Now, |
| | | DepotCode = stock.DepotsCode, |
| | | DepotId = stock.DepotsId.HasValue |
| | | ? (int)stock.DepotsId |
| | | DepotId = stock.DepotId.HasValue |
| | | ? (int)stock.DepotId |
| | | : null, |
| | | // DepotsCode = stock.DepotsCode, |
| | | // DepotSectionsCode = stock.DepotSectionsCode, |
| | |
| | | |
| | | // 检查明细是否完成,如果完成则更新状态 |
| | | if ((qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0) == stock.Quantity) |
| | | { |
| | | commit += db.Updateable<MesItemQtDatall>() |
| | | .SetColumns(it => it.Qd011 == 1) |
| | | .Where(it => it.Guid == qtDetail.Guid) |
| | | .ExecuteCommand(); |
| | | } |
| | | |
| | | mesItemQtDatalls = Db |
| | | .Queryable<MesItemQt, MesItemQtDatall, MesItems>( |
| | |
| | | |
| | | // 如果没有待处理明细,更新退料单状态为已完成 |
| | | if (CollectionUtil.IsNullOrEmpty(mesItemQtDatalls)) |
| | | { |
| | | db.Updateable<MesItemQt>() |
| | | .SetColumns(it => it.Qt014 == true) |
| | | .Where(it => it.Qtck == p_bill_no) |
| | | .ExecuteCommand(); |
| | | } |
| | | |
| | | // 构建返回消息 |
| | | mess = $"扫码成功!条码 {p_item_barcode} 数量 {stock.Quantity} 已出库"; |
| | |
| | | query.Num = stock.Quantity; |
| | | query.Fum = null; |
| | | |
| | | if (commit < 5) |
| | | { |
| | | throw new Exception("更新失败"); |
| | | } |
| | | // 创建 插入日志 |
| | | var logService = new LogService(); |
| | | var LogMsg = "【PDA】其他出库。条码【" + query.barcode + "】数量【"+ stock.Quantity.ToString() + "】 出库单号【" + outNo + "】"; |
| | | logService.CreateLog(db, query.userName, mesItemQt.Guid.ToString(), "MES_ITEM_QT", LogMsg, mesItemQt.Qtck); |
| | | |
| | | if (commit < 5) throw new Exception("更新失败"); |
| | | |
| | | return commit; |
| | | }); |
| | |
| | | var p_transaction_no = 202; |
| | | |
| | | // 检查单据号是否为空 |
| | | if (string.IsNullOrEmpty(p_bill_no)) |
| | | { |
| | | throw new Exception("请选取单据号!"); |
| | | } |
| | | if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("请选取单据号!"); |
| | | |
| | | // 检查数量是否有效 |
| | | if (p_qty <= 0) |
| | | { |
| | | throw new Exception("请输入正确的发料数量!"); |
| | | } |
| | | if (p_qty <= 0) throw new Exception("请输入正确的发料数量!"); |
| | | |
| | | // 获取库存条码信息 |
| | | var stock = Db.Queryable<MesInvItemStocks>() |
| | |
| | | .First(); |
| | | |
| | | if (stock == null) |
| | | { |
| | | throw new Exception($"库存中无此条码,请检查条码是否未入库或已出库!{p_old_barcode}"); |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(stock.DepotsCode)) |
| | | { |
| | | throw new Exception($"调拨中的条码不可发料,请先完成调拨单据{p_old_barcode}"); |
| | | } |
| | | |
| | | if (stock.DepotsCode is "S006" or "S005") |
| | | { |
| | | throw new Exception($"条码在不良品仓下 不可发料{p_old_barcode}"); |
| | | } |
| | | |
| | | // 获取条码信息 |
| | | var barcode = Db.Queryable<MesInvItemBarcodes>() |
| | |
| | | .First(); |
| | | |
| | | if (barcode == null) |
| | | { |
| | | throw new Exception($"mes中不存在此条码,请核对!{p_old_barcode}"); |
| | | } |
| | | |
| | | // 获取退料单信息 |
| | | var mesItemQt = Db.Queryable<MesItemQt>() |
| | |
| | | .First(); |
| | | |
| | | if (mesItemQt == null) |
| | | { |
| | | throw new Exception($"其他出库申请单 {p_bill_no} 不存在,请确认!"); |
| | | } |
| | | |
| | | if (mesItemQt.Qt011 != stock.DepotsCode) |
| | | { |
| | | throw new Exception( |
| | | $"扫码出货仓库{stock.DepotsCode}与其他出库申请仓库{mesItemQt.Qt011}不一致,请核对!"); |
| | | } |
| | | |
| | | // 获取退料单明细 |
| | | var qtDetail = Db.Queryable<MesItemQtDatall>() |
| | |
| | | it.ItemId == stock.ItemId.ToString()) |
| | | .First(); |
| | | |
| | | if (qtDetail == null) |
| | | { |
| | | throw new Exception("扫码物料非本次出库申请物料,请核对!"); |
| | | } |
| | | if (qtDetail == null) throw new Exception("扫码物料非本次出库申请物料,请核对!"); |
| | | |
| | | var remainingQty = (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0); |
| | | |
| | | if (remainingQty <= 0) |
| | | { |
| | | throw new Exception($"申请物料 {barcode.ItemNo} 已出库完成!"); |
| | | } |
| | | |
| | | if (p_qty > remainingQty) |
| | | { |
| | | throw new Exception( |
| | | $"输入的拆分数量 {p_qty} 不可大于剩余需发数量 {remainingQty} 请修改"); |
| | | } |
| | | |
| | | var totalQty = Db.Queryable<MesInvItemStocks>() |
| | | .Where(it => it.ItemBarcode == p_old_barcode && it.Quantity > 0) |
| | | .Sum(it => it.Quantity); |
| | | |
| | | if (totalQty < p_qty) |
| | | { |
| | | throw new Exception($"输入的发料数量 {p_qty} 不可大于条码数量 {totalQty} 请修改"); |
| | | } |
| | | |
| | | var message = string.Empty; |
| | | var mesItemQtDatalls = new List<MesItemQtDatall>(); |
| | |
| | | ComeFlg = 5, |
| | | EbelnK3id = barcode.EbelnK3id, |
| | | LineK3id = barcode.LineK3id, |
| | | ItemId = barcode.ItemId, |
| | | ItemId = barcode.ItemId |
| | | }).IgnoreColumns(true).ExecuteCommand(); |
| | | |
| | | // 更新原条码数量 |
| | |
| | | BillNo = stock.BillNo, |
| | | EbelnK3id = stock.EbelnK3id, |
| | | LineK3id = stock.LineK3id, |
| | | ItemId = stock.ItemId, |
| | | ItemId = stock.ItemId |
| | | }).IgnoreColumns(true).ExecuteCommand(); |
| | | |
| | | |
| | |
| | | LineK3id = stock.LineK3id, |
| | | SuppId = stock.SuppId, |
| | | SuppNo = stock.SuppNo, |
| | | ItemId = stock.ItemId, |
| | | ItemId = stock.ItemId |
| | | }).IgnoreColumns(true).ExecuteCommand(); |
| | | } |
| | | else |
| | |
| | | commit += db.Insertable(new MesInvItemOuts |
| | | { |
| | | Guid = outId, |
| | | ItemOutNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}", |
| | | ItemOutNo = outNo, |
| | | TaskNo = p_bill_no, |
| | | Status = 0, |
| | | CreateBy = c_user, |
| | |
| | | PbillNo = p_bill_no, |
| | | OutDate = DateTime.Now, |
| | | Nflag = 0, |
| | | Reason = mesItemQt.Qt010, |
| | | Reason = mesItemQt.Qt010 |
| | | }).ExecuteReturnIdentity(); |
| | | outNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}"; |
| | | } |
| | | else |
| | | { |
| | |
| | | .First(); |
| | | |
| | | if (outItem == null) |
| | | { |
| | | // 插入新明细 |
| | | db.Insertable(new MesInvItemOutItems |
| | | { |
| | |
| | | ItemId = !string.IsNullOrEmpty(qtDetail.ItemId) |
| | | ? long.Parse(qtDetail.ItemId) |
| | | : null, |
| | | FType = 0, |
| | | FType = 0 |
| | | // Unit = qtDetail.Qd009 |
| | | }).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | // 更新明细数量 |
| | | db.Updateable<MesInvItemOutItems>() |
| | | .SetColumns(it => |
| | |
| | | it.ItemId == stock.ItemId && |
| | | it.QtOutId == qtDetail.Guid) |
| | | .ExecuteCommand(); |
| | | } |
| | | |
| | | // 插入出库明细 |
| | | db.Insertable(new MesInvItemOutCDetails |
| | |
| | | |
| | | // 如果所有明细完成,更新退料单状态 |
| | | if (!hasUnfinished) |
| | | { |
| | | db.Updateable<MesItemQt>() |
| | | .SetColumns(it => it.Qt014 == true) |
| | | .Where(it => it.Qtck == p_bill_no) |
| | | .ExecuteCommand(); |
| | | } |
| | | |
| | | // 获取剩余待处理明细 |
| | | mesItemQtDatalls = db |