using Newtonsoft.Json;
using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Linq;
using Tiger.Business.SqlSugarHepler;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Entitys.WMS.DTOS;
namespace Tiger.Business.WMS
{
///
///
///
public class ProductOutputBusiness : IProductOutputBusiness
{
///
/// 成品出库
///
///
///
///
public int GetProductOutputInfo(ProductOutputDTO input)
{
//var db = Biz.Db;// 数据库链接地址
var db = Biz.DataSource["WMS57"].Client;
var snLst = input.details.Select(i => i.SN).Distinct().ToList();
var inData = db.Queryable().Where(i => snLst.Contains(i.SN)).ToList();// 获取库存信息数据
var insnData = inData.Select(i => i.SN).Distinct();
var nosnData = snLst.Except(insnData).ToList();
if (nosnData.Any())
{
throw new Exception($"未能查询到{string.Join(",", nosnData)} 数据的库存信息,请确认当前数据是否入库!");
}
var masterData = db.Queryable().Where(i => i.BILLCODE == input.Order).First();
if (masterData.IsNullOrEmpty())
{
throw new Exception($"未能查询到出库单:{input.Order}\t信息,请确认!");
}
// 表身数据
var dtlData = db.Queryable().Where(i => i.BILLCODE == input.Order).ToList();
var Data = ChangeDTL(dtlData, input.details.Count());// 更新DTL表身数据状态
// SN明细表
var snData = new List();
foreach (var item in input.details)
{
snData.Add(new BIZ_ERP_SALE_OUT_SN()
{
AUTH_ORG = input.AuthORG,
ORDER_NO = input.Order,
SN = item.SN,
MES_BILLCODE = item.MES_BILLCODE,
ITEM_CODE = input.ItemCode
});
}
foreach (var item in inData)
{
item.STATUS = WMS_ITEM.STATUSs.Returned.GetValue();// 更新库存信息数据的状态
}
int res = 0;
try
{
BizSqlsugar.CreateTran(() =>
{
if (snData.Any())
{
BizSqlsugar.InsertDataTable(snData, db);// 更新SN明细表
}
if (Data.Any())
{
BizSqlsugar.UpdateDataTable(Data, db);// 更新DTL表
}
if (inData.Any())
{
BizSqlsugar.UpdateDataTable(inData, db);// 更新库存信息状态
}
}, db);
}
catch (Exception)
{
}
var outdtlData = db.Queryable().Where(i => i.BILLCODE == input.Order && i.LINESTATUS != WMS_ITEM.STATUSs.Returned.GetValue()).ToList();
if (!outdtlData.Any())
{
masterData.STATUS = BIZ_ERP_PROD_OUT.STATUSs.COMPLETE.GetValue();
db.Updateable(masterData).ExecuteCommand();
}
return res;
}
///
/// 更新明细数据的出库数量
///
///
///
///
public List ChangeDTL(List input, decimal Count)
{
var model = new List();
var data = input.Where(i => i.QTY < i.PRQTY).OrderBy(i => i.BILLLINE).ToList();
foreach (var item in data)
{
var prqty = item.PRQTY;
if (prqty >= Count + item.QTY)
{
item.QTY = Count + item.QTY;
model.Add(item);
return model;// 如果当前传入数量小于当前需求数量,则直接更新
}
else
{
Count -= item.QTY;
item.QTY = prqty;
item.LINESTATUS = WMS_ITEM.STATUSs.Returned.GetValue();
model.Add(item);// 否则循环更新多条数量
}
}
return model;
}
}
}