using NewPdaSqlServer.DB;
|
using NewPdaSqlServer.Dto.service;
|
using NewPdaSqlServer.entity;
|
using NewPdaSqlServer.util;
|
using SqlSugar;
|
|
namespace NewPdaSqlServer.service.Warehouse;
|
|
public class MesItemQtManager : Repository<MesItemQt>
|
{
|
//当前类已经继承了 Repository 增、删、查、改的方法
|
/// <summary>
|
/// 获取未完成的退料单号列表
|
/// </summary>
|
/// <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();
|
}
|
|
/// <summary>
|
/// 获取待处理的退料单明细列表
|
/// </summary>
|
/// <param name="query">仓库查询参数,包含用户名和单据号</param>
|
/// <returns>待处理的退料单明细列表</returns>
|
public List<MesItemQtDatall> GetPendingQtList(WarehouseQuery query)
|
{
|
// 从查询参数中获取用户名和单据号
|
var c_User = query.userName;
|
var p_bill_no = query.billNo;
|
|
// 根据单据号查询退料单主表信息
|
var mesItemQt = Db.Queryable<MesItemQt>()
|
.Where(it => it.Qtck == p_bill_no)
|
.First();
|
|
// 如果未找到退料单,抛出异常
|
if (mesItemQt == null)
|
{
|
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();
|
|
return pendingList;
|
}
|
|
public (WarehouseQuery form, List<MesItemQtDatall> item, string message)
|
OutScanBarcode(
|
WarehouseQuery query)
|
{
|
var p_bill_no = query.billNo;
|
var p_item_barcode = query.barcode;
|
var c_user = query.userName;
|
var p_bill_type_id = 200;
|
var p_transaction_no = 202;
|
|
// 检查单据号是否为空
|
if (string.IsNullOrEmpty(p_bill_no))
|
{
|
throw new Exception("请选取单据号!");
|
}
|
|
// 检查是否重复扫描
|
var existingBarcode = Db.Queryable<MesInvItemOutCDetails>()
|
.Where(it =>
|
it.ItemBarcode == p_item_barcode && it.PbillNo == p_bill_no)
|
.Any();
|
|
if (existingBarcode)
|
{
|
throw new Exception("此条码已经扫码出库,勿重复扫描!");
|
}
|
|
// 获取条码信息
|
var barcode = Db.Queryable<MesInvItemBarcodes>()
|
.Where(it => it.ItemBarcode == p_item_barcode)
|
.First();
|
|
if (barcode == null)
|
{
|
throw new Exception($"mes中不存在此条码,请核对!{p_item_barcode}");
|
}
|
|
// 获取库存信息
|
var stock = Db.Queryable<MesInvItemStocks>()
|
.Where(it => it.ItemBarcode == p_item_barcode && it.Quantity > 0)
|
.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>()
|
// .Where(it => it.DepotSectionsCode == stock.DepotSectionsCode)
|
// .Any();
|
//
|
// if (isDepotSection)
|
// {
|
// throw new Exception($"在寄存仓位下的条码不可直接扫码发料{p_item_barcode}");
|
// }
|
|
// 获取其他出库单信息
|
var mesItemQt = Db.Queryable<MesItemQt>()
|
.Where(it => it.Qtck == p_bill_no)
|
.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>()
|
.Where(it =>
|
it.QtGuid == mesItemQt.Guid &&
|
it.ItemId == stock.ItemId.ToString())
|
.First();
|
|
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 pendingList = Db
|
.Queryable<MesItemQt, MesItemQtDatall, MesItems>(
|
(a, b, c) => new JoinQueryInfos(
|
JoinType.Left, a.Guid == b.QtGuid,
|
JoinType.Left, b.ItemId == c.Id.ToString()))
|
.Where((a, b, c) => a.Qtck == p_bill_no &&
|
(b.Qd007 ?? 0) - (b.Qd008 ?? 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 message =
|
$"请确认发料数量!!已带出满足其他出库单的发料数量 {remainingQty} 确认后请点击条码拆分";
|
|
query.itemNo = stock.ItemNo;
|
query.Num = stock.Quantity;
|
query.Fum = remainingQty;
|
|
return (query, pendingList, message);
|
}
|
|
var mesItemQtDatalls = new List<MesItemQtDatall>();
|
var mess = "";
|
UseTransaction(db =>
|
{
|
var commit = 0;
|
|
// 查找当天是否已存在出库单
|
var existingOut = Db.Queryable<MesInvItemOuts>()
|
.Where(it => it.PbillNo == p_bill_no
|
// && it.DepotCode == stock.DepotsCode
|
&& it.DepotId == stock.DepotId
|
&& it.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
|
DateTime.Now.Date.ToString("yyyy-MM-dd")
|
&& it.BillTypeId == p_bill_type_id
|
&& it.TransactionNo == p_transaction_no
|
&& it.Status == 0)
|
.First();
|
|
Guid outId;
|
string outNo;
|
|
if (existingOut == null)
|
{
|
// 创建新的出库单
|
outId = Guid.NewGuid();
|
outNo = BillNo.GetBillNo("INV_OUT_OTHER");
|
|
var mesItemQt = Db.Queryable<MesItemQt>()
|
.Where(it => it.Qtck == p_bill_no)
|
.First();
|
|
var newOut = new MesInvItemOuts
|
{
|
Guid = outId,
|
ItemOutNo = outNo,
|
TaskNo = p_bill_no,
|
Status = 0,
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
BillTypeId = p_bill_type_id,
|
TransactionNo = p_transaction_no,
|
DepotCode = stock.DepotsCode,
|
DepotId = stock.DepotsId.HasValue
|
? (int)stock.DepotsId
|
: null,
|
OutPart = mesItemQt.Qt012,
|
FType = 0,
|
WorkNo = p_bill_no,
|
OutType = "其他出库",
|
PbillNo = p_bill_no,
|
OutDate = DateTime.Now,
|
Nflag = 0,
|
Reason = mesItemQt.Qt010,
|
Remark = mesItemQt.Qt010
|
};
|
|
commit += db.Insertable(newOut).IgnoreColumns(true)
|
.ExecuteCommand();
|
}
|
else
|
{
|
outId = existingOut.Guid;
|
outNo = existingOut.ItemOutNo;
|
}
|
|
// 获取退料单明细信息
|
qtDetail = Db.Queryable<MesItemQtDatall>()
|
.Where(it =>
|
it.QtGuid == mesItemQt.Guid &&
|
it.ItemId == stock.ItemId.ToString())
|
.First();
|
|
if (qtDetail == null)
|
{
|
throw new Exception($"未找到对应的退料单明细信息");
|
}
|
|
// 检查是否已存在出库物料记录
|
var existingOutItem = Db.Queryable<MesInvItemOutItems>()
|
.Where(it =>
|
it.ItemOutId == outId && it.ItemId == barcode.ItemId)
|
.First();
|
|
if (existingOutItem == null)
|
{
|
// 创建新的出库物料记录
|
var newOutItem = new MesInvItemOutItems
|
{
|
Guid = Guid.NewGuid(),
|
ItemOutId = outId,
|
ItemNo = qtDetail.Qd002,
|
Quantity = stock.Quantity,
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
DepotCode = stock.DepotsCode,
|
TaskNo = p_bill_no,
|
WorkNo = p_bill_no,
|
QtOutId = qtDetail.Guid,
|
// WorkLine = qtDetail.Id,
|
// ErpItemNo = qtDetail.Qd012,
|
PbillNo = p_bill_no,
|
ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
|
? long.Parse(qtDetail.ItemId)
|
: null,
|
FType = 0,
|
// Unit = qtDetail.Qd009
|
};
|
|
commit += db.Insertable(newOutItem).IgnoreColumns(true)
|
.ExecuteCommand();
|
}
|
else
|
{
|
// 更新已存在的出库物料记录数量
|
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)
|
.ExecuteCommand();
|
}
|
|
// 创建出库条码明细记录
|
var outCDetail = new MesInvItemOutCDetails
|
{
|
ItemOutId = outId,
|
ItemBarcode = stock.ItemBarcode,
|
ItemNo = stock.ItemNo,
|
LotNo = stock.LotNo,
|
Quantity = stock.Quantity,
|
ForceOutFlag = 0,
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
DepotCode = stock.DepotsCode,
|
DepotId = stock.DepotsId.HasValue
|
? (int)stock.DepotsId
|
: null,
|
// DepotsCode = stock.DepotsCode,
|
// DepotSectionsCode = stock.DepotSectionsCode,
|
DepotSectionCode = stock.DepotSectionsCode,
|
BoardStyle = stock.BoardStyle,
|
TaskNo = p_bill_no,
|
WorkNo = p_bill_no,
|
// WorkLine = qtDetail.Id,
|
SuppNo = stock.SuppNo,
|
PbillNo = p_bill_no,
|
ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
|
? long.Parse(qtDetail.ItemId)
|
: null
|
};
|
|
commit += db.Insertable(outCDetail).IgnoreColumns(true)
|
.ExecuteCommand();
|
|
|
// 插入业务流水记录
|
var business = new MesInvBusiness2
|
{
|
Status = 1,
|
BillTypeId = p_bill_type_id,
|
TransactionCode = p_transaction_no.ToString(),
|
BusinessType = 1,
|
ItemBarcode = stock.ItemBarcode,
|
ItemNo = stock.ItemNo,
|
LotNo = stock.LotNo,
|
EpFlag = true,
|
Quantity = stock.Quantity,
|
FromInvDepotsCode = stock.DepotsCode,
|
FromInvDepotSectionsCode = stock.DepotSectionsCode,
|
Description = "其他出库",
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
TaskNo = p_bill_no,
|
BillNo = outNo,
|
WorkNo = p_bill_no,
|
// WorkLine = qtDetail.Id,
|
SuppId = stock.SuppId,
|
SuppNo = stock.SuppNo,
|
ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
|
? long.Parse(qtDetail.ItemId)
|
: null
|
};
|
|
commit += db.Insertable(business).IgnoreColumns(true)
|
.ExecuteCommand();
|
|
// 删除库存记录
|
commit += db.Deleteable<MesInvItemStocks>()
|
.Where(it => it.ItemBarcode == stock.ItemBarcode)
|
.ExecuteCommand();
|
|
// 更新退料单明细已完成数量
|
commit += db.Updateable<MesItemQtDatall>()
|
.SetColumns(it => it.Qd008 == (it.Qd008 ?? 0) + stock.Quantity)
|
.Where(it => it.Guid == qtDetail.Guid)
|
.ExecuteCommand();
|
|
// 检查明细是否完成,如果完成则更新状态
|
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>(
|
(a, b, c) => new JoinQueryInfos(
|
JoinType.Left, a.Guid == b.QtGuid,
|
JoinType.Left, b.ItemId == c.Id.ToString()))
|
.Where((a, b, c) => a.Qtck == p_bill_no &&
|
(b.Qd007 ?? 0) - (b.Qd008 ?? 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();
|
|
// 如果没有待处理明细,更新退料单状态为已完成
|
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.barcode = null;
|
query.itemNo = stock.ItemNo;
|
query.Num = stock.Quantity;
|
query.Fum = null;
|
|
if (commit < 5)
|
{
|
throw new Exception("更新失败");
|
}
|
|
return commit;
|
});
|
|
return (query, mesItemQtDatalls, mess);
|
}
|
|
public (WarehouseQuery form, List<MesItemQtDatall> item, string message)
|
PrintQtckBarcode(
|
WarehouseQuery query)
|
{
|
var p_bill_no = query.billNo;
|
var p_old_barcode = query.barcode;
|
var c_user = query.userName;
|
var p_qty = query.Fum;
|
var p_bill_type_id = 200;
|
var p_transaction_no = 202;
|
|
// 检查单据号是否为空
|
if (string.IsNullOrEmpty(p_bill_no))
|
{
|
throw new Exception("请选取单据号!");
|
}
|
|
// 检查数量是否有效
|
if (p_qty <= 0)
|
{
|
throw new Exception("请输入正确的发料数量!");
|
}
|
|
// 获取库存条码信息
|
var stock = Db.Queryable<MesInvItemStocks>()
|
.Where(it => it.ItemBarcode == p_old_barcode && it.Quantity > 0)
|
.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>()
|
.Where(it => it.ItemBarcode == p_old_barcode)
|
.First();
|
|
if (barcode == null)
|
{
|
throw new Exception($"mes中不存在此条码,请核对!{p_old_barcode}");
|
}
|
|
// 获取退料单信息
|
var mesItemQt = Db.Queryable<MesItemQt>()
|
.Where(it => it.Qtck == p_bill_no)
|
.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>()
|
.Where(it =>
|
it.QtGuid == mesItemQt.Guid &&
|
it.ItemId == stock.ItemId.ToString())
|
.First();
|
|
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>();
|
var newBarcode = string.Empty;
|
|
UseTransaction(db =>
|
{
|
var commit = 0;
|
|
// 如果需要拆分条码
|
if (totalQty > p_qty)
|
{
|
var mesItems = db.Queryable<MesItems>()
|
.Where(s => s.Id == stock.ItemId).First();
|
// 生成新条码号
|
newBarcode = BillNo.GetBillNo("TMBH(条码编号)", mesItems.ItemNo);
|
|
// 插入新条码记录
|
commit += db.Insertable(new MesInvItemBarcodes
|
{
|
Guid = Guid.NewGuid(),
|
ItemBarcode = newBarcode,
|
ItemNo = barcode.ItemNo,
|
LotNo = barcode.LotNo,
|
Quantity = p_qty,
|
TaskNo = barcode.TaskNo,
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
OldItemBarcode = p_old_barcode,
|
Mblnr = barcode.Mblnr,
|
Zeile = barcode.Zeile,
|
Barcodestatus = false,
|
Oldqty = Convert.ToInt64(p_qty.Value),
|
Unit = barcode.Unit,
|
LotDate = barcode.LotDate,
|
Memo = "其他出库拆分",
|
SuppNo = barcode.SuppNo,
|
ItemSname = barcode.ItemSname,
|
TrLotno = barcode.TrLotno,
|
BillNo = barcode.BillNo,
|
UrgentFlag = barcode.UrgentFlag,
|
InsDate = barcode.InsDate,
|
WorkNo = barcode.WorkNo,
|
WorkLine = barcode.WorkLine,
|
ComeFlg = 5,
|
EbelnK3id = barcode.EbelnK3id,
|
LineK3id = barcode.LineK3id,
|
ItemId = barcode.ItemId,
|
}).IgnoreColumns(true).ExecuteCommand();
|
|
// 更新原条码数量
|
commit += db.Updateable<MesInvItemBarcodes>()
|
.SetColumns(it => it.Quantity == it.Quantity - p_qty)
|
.Where(it => it.ItemBarcode == p_old_barcode)
|
.ExecuteCommand();
|
|
// 更新原库存数量
|
commit += db.Updateable<MesInvItemStocks>()
|
.SetColumns(it => it.Quantity == it.Quantity - p_qty)
|
.Where(it => it.ItemBarcode == p_old_barcode)
|
.ExecuteCommand();
|
|
// 插入新库存记录
|
commit += db.Insertable(new MesInvItemStocks
|
{
|
Guid = Guid.NewGuid(),
|
ItemBarcode = newBarcode,
|
ItemNo = stock.ItemNo,
|
LotNo = stock.LotNo,
|
Quantity = p_qty,
|
DepotsCode = stock.DepotsCode,
|
DepotSectionsCode = stock.DepotSectionsCode,
|
CheckDate = stock.CheckDate,
|
IndepDate = stock.IndepDate,
|
IqcStatus = stock.IqcStatus,
|
WorkNo = stock.WorkNo,
|
WorkLine = stock.WorkLine,
|
SuppNo = stock.SuppNo,
|
BillNo = stock.BillNo,
|
EbelnK3id = stock.EbelnK3id,
|
LineK3id = stock.LineK3id,
|
ItemId = stock.ItemId,
|
}).IgnoreColumns(true).ExecuteCommand();
|
|
|
// 插入业务流水记录
|
commit += db.Insertable(new MesInvBusiness2
|
{
|
Status = 1,
|
BillTypeId = p_bill_type_id,
|
TransactionCode = p_transaction_no.ToString(),
|
BusinessType = 1,
|
TaskNo = barcode.TaskNo,
|
BillNo = barcode.BillNo,
|
ItemBarcode = newBarcode,
|
ItemNo = barcode.ItemNo,
|
LotNo = barcode.LotNo,
|
EpFlag = true,
|
Quantity = p_qty,
|
FromInvDepotsCode = null,
|
FromInvDepotSectionsCode = null,
|
ToInvDepotsCode = stock.DepotsCode,
|
ToInvDepotSectionsCode = stock.DepotSectionsCode,
|
Description = "其他出库条码拆分",
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
Factory = "1000",
|
Company = "1000",
|
WorkNo = stock.WorkNo,
|
WorkLine = stock.WorkLine,
|
EbelnK3id = stock.EbelnK3id,
|
LineK3id = stock.LineK3id,
|
SuppId = stock.SuppId,
|
SuppNo = stock.SuppNo,
|
ItemId = stock.ItemId,
|
}).IgnoreColumns(true).ExecuteCommand();
|
}
|
else
|
{
|
newBarcode = p_old_barcode;
|
}
|
|
|
// 获取或创建出库单
|
var outRecord = db.Queryable<MesInvItemOuts>()
|
.Where(it => it.PbillNo == p_bill_no
|
&& it.DepotCode == stock.DepotsCode
|
&& it.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
|
DateTime.Now.Date.ToString("yyyy-MM-dd")
|
&& it.BillTypeId == p_bill_type_id
|
&& it.TransactionNo == p_transaction_no
|
&& it.Status == 0)
|
.First();
|
|
var outId = Guid.Empty;
|
var outNo = string.Empty;
|
|
if (outRecord == null)
|
{
|
outId = Guid.NewGuid();
|
outNo = BillNo.GetBillNo("INV_OUT_OTHER");
|
// 创建新出库单
|
commit += db.Insertable(new MesInvItemOuts
|
{
|
Guid = outId,
|
ItemOutNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}",
|
TaskNo = p_bill_no,
|
Status = 0,
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
BillTypeId = p_bill_type_id,
|
TransactionNo = p_transaction_no,
|
DepotCode = stock.DepotsCode,
|
OutPart = mesItemQt.Qt012,
|
FType = 0,
|
WorkNo = p_bill_no,
|
OutType = "其他出库",
|
BusinessType = "",
|
PbillNo = p_bill_no,
|
OutDate = DateTime.Now,
|
Nflag = 0,
|
Reason = mesItemQt.Qt010,
|
}).ExecuteReturnIdentity();
|
outNo = $"OUT-{DateTime.Now:yyyyMMddHHmmss}";
|
}
|
else
|
{
|
outId = outRecord.Guid;
|
outNo = outRecord.ItemOutNo;
|
}
|
|
// 检查并更新出库单明细
|
var outItem = db.Queryable<MesInvItemOutItems>()
|
.Where(it =>
|
it.ItemOutId == outId && it.ItemId == barcode.ItemId)
|
.First();
|
|
if (outItem == null)
|
{
|
// 插入新明细
|
db.Insertable(new MesInvItemOutItems
|
{
|
ItemOutId = outId,
|
ItemNo = qtDetail.Qd002,
|
Quantity = p_qty,
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
DepotCode = stock.DepotsCode,
|
TaskNo = p_bill_no,
|
WorkNo = p_bill_no,
|
QtOutId = qtDetail.Guid,
|
// WorkLine = qtDetail.Id.ToString(),
|
ErpItemNo = qtDetail.ItemNo,
|
PbillNo = p_bill_no,
|
ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
|
? long.Parse(qtDetail.ItemId)
|
: null,
|
FType = 0,
|
// Unit = qtDetail.Qd009
|
}).ExecuteCommand();
|
}
|
else
|
{
|
// 更新明细数量
|
db.Updateable<MesInvItemOutItems>()
|
.SetColumns(it =>
|
it.Quantity == (it.Quantity ?? 0) + p_qty)
|
.Where(it =>
|
it.ItemOutId == outId &&
|
it.ItemId == stock.ItemId &&
|
it.QtOutId == qtDetail.Guid)
|
.ExecuteCommand();
|
}
|
|
// 插入出库明细
|
db.Insertable(new MesInvItemOutCDetails
|
{
|
ItemOutId = outId,
|
ItemBarcode = newBarcode,
|
ItemNo = stock.ItemNo,
|
LotNo = stock.LotNo,
|
Quantity = p_qty,
|
ForceOutFlag = 0,
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
DepotCode = stock.DepotsCode,
|
DepotSectionCode = stock.DepotSectionsCode,
|
Factory = "1000",
|
Company = "1000",
|
BoardStyle = stock.BoardStyle,
|
TaskNo = p_bill_no,
|
WorkNo = p_bill_no,
|
// WorkLine = qtDetail.Id.ToString(),
|
SuppNo = stock.SuppNo,
|
PbillNo = p_bill_no,
|
ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
|
? long.Parse(qtDetail.ItemId)
|
: null
|
}).IgnoreColumns(true).ExecuteCommand();
|
|
// 插入业务记录
|
db.Insertable(new MesInvBusiness2
|
{
|
Status = 1,
|
BillTypeId = p_bill_type_id,
|
TransactionCode = p_transaction_no.ToString(),
|
BusinessType = 1,
|
ItemBarcode = newBarcode,
|
ItemNo = stock.ItemNo,
|
LotNo = stock.LotNo,
|
EpFlag = true,
|
Quantity = p_qty,
|
FromInvDepotsCode = stock.DepotsCode,
|
FromInvDepotSectionsCode = stock.DepotSectionsCode,
|
Description = "其他出库",
|
CreateBy = c_user,
|
CreateDate = DateTime.Now,
|
LastupdateBy = c_user,
|
LastupdateDate = DateTime.Now,
|
Factory = "1000",
|
Company = "1000",
|
TaskNo = p_bill_no,
|
BillNo = outNo,
|
WorkNo = p_bill_no,
|
// WorkLine = qtDetail.Id.ToString(),
|
SuppId = stock.SuppId,
|
SuppNo = stock.SuppNo,
|
ItemId = !string.IsNullOrEmpty(qtDetail.ItemId)
|
? long.Parse(qtDetail.ItemId)
|
: null
|
}).IgnoreColumns(true).ExecuteCommand();
|
|
// 删除库存记录
|
db.Deleteable<MesInvItemStocks>()
|
.Where(it => it.ItemBarcode == newBarcode)
|
.ExecuteCommand();
|
|
// 更新退料单明细
|
db.Updateable<MesItemQtDatall>()
|
.SetColumns(it => it.Qd008 == (it.Qd008 ?? 0) + (int)p_qty)
|
.SetColumnsIF(
|
(qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0) == p_qty,
|
it => it.Qd011 == 1)
|
.Where(it => it.Guid == qtDetail.Guid)
|
.ExecuteCommand();
|
|
// 检查是否所有明细都已完成
|
var hasUnfinished = db.Queryable<MesItemQtDatall>()
|
.Where(it => it.Qd011 == 0)
|
.Any();
|
|
// 如果所有明细完成,更新退料单状态
|
if (!hasUnfinished)
|
{
|
db.Updateable<MesItemQt>()
|
.SetColumns(it => it.Qt014 == true)
|
.Where(it => it.Qtck == p_bill_no)
|
.ExecuteCommand();
|
}
|
|
// 获取剩余待处理明细
|
mesItemQtDatalls = db
|
.Queryable<MesItemQt, MesItemQtDatall, MesItems>(
|
(a, b, c) => new JoinQueryInfos(
|
JoinType.Left, a.Guid == b.QtGuid,
|
JoinType.Left, b.ItemId == c.Id.ToString()))
|
.Where((a, b, c) => a.Qtck == p_bill_no &&
|
(b.Qd007 ?? 0) - (b.Qd008 ?? 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();
|
|
message = $"操作成功!拆分条码:{newBarcode} 数量:{p_qty}已出库";
|
|
return commit;
|
});
|
return (query, mesItemQtDatalls, message);
|
}
|
}
|