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
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class ProductOutputBusiness : IProductOutputBusiness
|
{
|
/// <summary>
|
/// 成品出库
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
/// <exception cref="NotImplementedException"></exception>
|
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<WMS_ITEM>().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<BIZ_ERP_SALE_OUT>().Where(i => i.BILLCODE == input.Order).First();
|
if (masterData.IsNullOrEmpty())
|
{
|
throw new Exception($"未能查询到出库单:{input.Order}\t信息,请确认!");
|
}
|
|
// 表身数据
|
var dtlData = db.Queryable<BIZ_ERP_SALE_OUT_DTL>().Where(i => i.BILLCODE == input.Order).ToList();
|
var Data = ChangeDTL(dtlData, input.details.Count());// 更新DTL表身数据状态
|
// SN明细表
|
var snData = new List<BIZ_ERP_SALE_OUT_SN>();
|
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<BIZ_ERP_SALE_OUT_DTL>().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;
|
}
|
|
/// <summary>
|
/// 更新明细数据的出库数量
|
/// </summary>
|
/// <param name="input"></param>
|
/// <param name="Count"></param>
|
/// <returns></returns>
|
public List<BIZ_ERP_SALE_OUT_DTL> ChangeDTL(List<BIZ_ERP_SALE_OUT_DTL> input, decimal Count)
|
{
|
var model = new List<BIZ_ERP_SALE_OUT_DTL>();
|
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;
|
}
|
}
|
}
|