480 lines
17 KiB
C#
480 lines
17 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Aliyun.OSS;
|
|
using DOAN.Model;
|
|
using DOAN.Model.MES.base_;
|
|
using DOAN.Model.MES.dev;
|
|
using DOAN.Model.MES.mm.line;
|
|
using DOAN.Model.MES.mm.line.Dto;
|
|
using DOAN.Model.Mobile.Dto;
|
|
using DOAN.Repository;
|
|
using DOAN.Service.MES.mm.line.IService;
|
|
using Infrastructure.Attribute;
|
|
using Infrastructure.Extensions;
|
|
using SqlSugar;
|
|
|
|
namespace DOAN.Service.MES.mm.line
|
|
{
|
|
/// <summary>
|
|
/// mm_line_inventoryService业务层处理
|
|
/// </summary>
|
|
[AppService(
|
|
ServiceType = typeof(IMmLineInventoryService),
|
|
ServiceLifetime = LifeTime.Transient
|
|
)]
|
|
public class MmLineInventoryService : BaseService<MmLineInventory>, IMmLineInventoryService
|
|
{
|
|
/// <summary>
|
|
/// 查询mm_line_inventory列表
|
|
/// </summary>
|
|
/// <param name="parm"></param>
|
|
/// <returns></returns>
|
|
public PagedInfo<MmLineInventoryDto> GetList(MmLineInventoryQueryDto parm)
|
|
{
|
|
var predicate = Expressionable
|
|
.Create<MmLineInventory>()
|
|
.AndIF(!string.IsNullOrEmpty(parm.LineCode), o => o.LineCode == parm.LineCode)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.MaterialName),
|
|
o => o.MaterialName.Contains(parm.MaterialName)
|
|
)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.MaterialCode),
|
|
o => o.MaterialCode.Contains(parm.MaterialCode)
|
|
);
|
|
|
|
var response = Queryable()
|
|
.Where(predicate.ToExpression())
|
|
.ToPage<MmLineInventory, MmLineInventoryDto>(parm);
|
|
|
|
return response;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取详情
|
|
/// </summary>
|
|
/// <param name="Id"></param>
|
|
/// <returns></returns>
|
|
public MmLineInventory GetInfo(string Id)
|
|
{
|
|
var response = Queryable().Where(x => x.Id == Id).First();
|
|
|
|
return response;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加mm_line_inventory
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <returns></returns>
|
|
public MmLineInventory AddMmLineInventory(MmLineInventory model)
|
|
{
|
|
model.Id = XueHua;
|
|
return Context.Insertable(model).ExecuteReturnEntity();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 修改mm_line_inventory
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <returns></returns>
|
|
public int UpdateMmLineInventory(MmLineInventory model)
|
|
{
|
|
//var response = Update(w => w.Id == model.Id, it => new MmLineInventory()
|
|
//{
|
|
// LocationCode = model.LocationCode,
|
|
// MaterialCode = model.MaterialCode,
|
|
// MaterialName = model.MaterialName,
|
|
// Linecode = model.Linecode,
|
|
// Quantity = model.Quantity,
|
|
// Unit = model.Unit,
|
|
// LastStocktakingTime = model.LastStocktakingTime,
|
|
// LastStocktakingNum = model.LastStocktakingNum,
|
|
// Updatetime = model.Updatetime,
|
|
// Updateby = model.Updateby,
|
|
// Createtime = model.Createtime,
|
|
// Createby = model.Createby,
|
|
//});
|
|
//return response;
|
|
return Update(model, true);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 入库
|
|
/// </summary>
|
|
/// <param name="LineCode"></param>
|
|
/// <param name="MaterialCode"></param>
|
|
/// <param name="BatchCode"></param>
|
|
/// <param name="LocationCode"></param>
|
|
/// <param name="Quantity"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="Exception"></exception>
|
|
public int putInLineMaterial(
|
|
int DeviceType,
|
|
string LineCode,
|
|
string MaterialCode,
|
|
string BatchCode,
|
|
string LocationCode,
|
|
decimal Quantity
|
|
)
|
|
{
|
|
int result = 0;
|
|
string materialName = "";
|
|
if (string.IsNullOrEmpty(LineCode) || string.IsNullOrEmpty(MaterialCode))
|
|
{
|
|
throw new Exception("线别或物料编号不能为空");
|
|
}
|
|
BatchCode = "20250331001";
|
|
LocationCode = "001";
|
|
|
|
//根据线别,物料条码, 看库里有没有这条入库数据
|
|
MmLineInventory mmLineInventory = Queryable()
|
|
.Where(x => x.LineCode == LineCode && x.MaterialCode == MaterialCode)
|
|
.First();
|
|
//判断库存表有没有记录
|
|
if (mmLineInventory == null)
|
|
{
|
|
BaseMaterialBom baseMaterialBom = Context
|
|
.Queryable<BaseMaterialBom>()
|
|
.Where(o => o.SubInvCode == MaterialCode)
|
|
.First();
|
|
//根据物料编号去bom 表去查一下
|
|
if (baseMaterialBom == null)
|
|
{
|
|
throw new Exception("Bom表找不到这个物料");
|
|
}
|
|
materialName = baseMaterialBom.SubInvName;
|
|
//新增一条
|
|
result = AddMmLineInventory(
|
|
LocationCode,
|
|
MaterialCode,
|
|
materialName,
|
|
BatchCode,
|
|
LineCode,
|
|
Quantity,
|
|
"",
|
|
Quantity
|
|
);
|
|
if (result == 1)
|
|
{
|
|
OperationLogRecording(
|
|
DeviceType,
|
|
1,
|
|
3,
|
|
MaterialCode,
|
|
materialName,
|
|
LineCode,
|
|
0,
|
|
Quantity,
|
|
LocationCode
|
|
);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//修改
|
|
decimal begin = mmLineInventory.Quantity.Value;
|
|
mmLineInventory.Quantity = mmLineInventory.Quantity + Quantity;
|
|
mmLineInventory.Updatetime = DateTime.Now;
|
|
mmLineInventory.Updateby = "系统";
|
|
result = Context.Updateable(mmLineInventory).ExecuteCommand();
|
|
if (result == 1)
|
|
{
|
|
OperationLogRecording(
|
|
DeviceType,
|
|
2,
|
|
3,
|
|
MaterialCode,
|
|
materialName,
|
|
LineCode,
|
|
begin,
|
|
mmLineInventory.Quantity.Value,
|
|
LocationCode
|
|
);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 日志记录
|
|
/// </summary>
|
|
/// <param name="DeviceType">1PDA 2触摸屏</param>
|
|
/// <param name="type">1新增 2修改</param>
|
|
/// <param name="TransactionType">1出库 3入库 5盘点</param>
|
|
/// <param name="MaterialCode"></param>
|
|
/// <param name="MaterialName"></param>
|
|
/// <param name="LineCode"></param>
|
|
/// <param name="BeginQuantity"></param>
|
|
/// <param name="AfterQuantity"></param>
|
|
/// <param name="LocationCode"></param>
|
|
/// <returns></returns>
|
|
public int OperationLogRecording(
|
|
int DeviceType,
|
|
int type,
|
|
int TransactionType,
|
|
string MaterialCode,
|
|
string MaterialName,
|
|
string LineCode,
|
|
decimal BeginQuantity,
|
|
decimal AfterQuantity,
|
|
string LocationCode
|
|
)
|
|
{
|
|
MmLineTransactionLog mmLineTransactionLog =
|
|
new()
|
|
{
|
|
Id = XueHua,
|
|
TransactionType = TransactionType,
|
|
MaterialCode = MaterialCode,
|
|
MaterialName = MaterialName,
|
|
LineCode = LineCode,
|
|
Quantity = AfterQuantity,
|
|
LocationCode = LocationCode,
|
|
Createtime = DateTime.Now,
|
|
|
|
Createby = "系统"
|
|
};
|
|
string remark = "";
|
|
if (type == 1)
|
|
{
|
|
remark += "新增一条库存记录";
|
|
}
|
|
else
|
|
{
|
|
remark += "修改一条库存记录";
|
|
}
|
|
|
|
if (DeviceType == 1)
|
|
{
|
|
remark += "[来源PDA] ";
|
|
}
|
|
if (DeviceType == 2)
|
|
{
|
|
remark += "[来源触摸屏] ";
|
|
}
|
|
mmLineTransactionLog.Remark =
|
|
remark
|
|
+ string.Format(
|
|
@" ,变更前库存为:{0},变更后库存为:{1}",
|
|
BeginQuantity.ToString("00.00"),
|
|
AfterQuantity.ToString("00.00")
|
|
);
|
|
|
|
return Context.Insertable(mmLineTransactionLog).ExecuteCommand();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 出库
|
|
/// </summary>
|
|
/// <param name="LineCode"></param>
|
|
/// <param name="MaterialCode"></param>
|
|
/// <param name="BatchCode"></param>
|
|
/// <param name="LocationCode"></param>
|
|
/// <param name="Quantity"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="Exception"></exception>
|
|
public int outboundLineMaterial(
|
|
int DeviceType,
|
|
string LineCode,
|
|
string MaterialCode,
|
|
string BatchCode,
|
|
string LocationCode,
|
|
decimal Quantity
|
|
)
|
|
{
|
|
string materialName = "";
|
|
int result = 0;
|
|
if (string.IsNullOrEmpty(LineCode) || string.IsNullOrEmpty(MaterialCode))
|
|
{
|
|
throw new Exception("线别或物料编号不能为空");
|
|
}
|
|
if (Quantity < 0)
|
|
{
|
|
throw new Exception("出库数量不能小于0");
|
|
}
|
|
//根据线别,物料条码,批号 看库里有没有这条入库数据
|
|
MmLineInventory mmLineInventory = Queryable()
|
|
.Where(x => x.LineCode == LineCode && x.MaterialCode == MaterialCode)
|
|
.First();
|
|
//出库时,如果库存表找不到记录,先新增一条,再进行扣除
|
|
if (mmLineInventory == null)
|
|
{
|
|
BaseMaterialBom baseMaterialBom = Context
|
|
.Queryable<BaseMaterialBom>()
|
|
.Where(o => o.SubInvCode == MaterialCode)
|
|
.First();
|
|
//根据物料编号去bom 表去查一下
|
|
if (baseMaterialBom == null)
|
|
{
|
|
throw new Exception("Bom表找不到这个物料" + MaterialCode);
|
|
}
|
|
materialName = baseMaterialBom.SubInvName;
|
|
//新增一条
|
|
result = AddMmLineInventory(
|
|
LocationCode,
|
|
MaterialCode,
|
|
materialName,
|
|
BatchCode,
|
|
LineCode,
|
|
0,
|
|
"",
|
|
0
|
|
);
|
|
if (result == 1)
|
|
{
|
|
//记录日志
|
|
OperationLogRecording(
|
|
DeviceType,
|
|
1,
|
|
3,
|
|
MaterialCode,
|
|
materialName,
|
|
LineCode,
|
|
0,
|
|
0,
|
|
LocationCode
|
|
);
|
|
}
|
|
//查出来再进行扣除
|
|
MmLineInventory mmLineInventory1 = Queryable()
|
|
.Where(x => x.LineCode == LineCode && x.MaterialCode == MaterialCode)
|
|
.First();
|
|
|
|
decimal begin = mmLineInventory1.Quantity.Value;
|
|
mmLineInventory1.Quantity = mmLineInventory1.Quantity - Quantity;
|
|
mmLineInventory1.Updatetime = DateTime.Now;
|
|
mmLineInventory1.Updateby = "系统";
|
|
result = Context.Updateable(mmLineInventory1).ExecuteCommand();
|
|
if (result == 1)
|
|
{
|
|
//记录
|
|
OperationLogRecording(
|
|
DeviceType,
|
|
2,
|
|
1,
|
|
MaterialCode,
|
|
materialName,
|
|
LineCode,
|
|
begin,
|
|
mmLineInventory1.Quantity.Value,
|
|
LocationCode
|
|
);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
decimal begin = mmLineInventory.Quantity.Value;
|
|
mmLineInventory.Quantity = mmLineInventory.Quantity - Quantity;
|
|
mmLineInventory.Updatetime = DateTime.Now;
|
|
mmLineInventory.Updateby = "系统";
|
|
result = Context.Updateable(mmLineInventory).ExecuteCommand();
|
|
if (result == 1)
|
|
{
|
|
OperationLogRecording(
|
|
DeviceType,
|
|
2,
|
|
1,
|
|
MaterialCode,
|
|
materialName,
|
|
LineCode,
|
|
begin,
|
|
mmLineInventory.Quantity.Value,
|
|
LocationCode
|
|
);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 库存表新增
|
|
/// </summary>
|
|
/// <param name="LocationCode"></param>
|
|
/// <param name="MaterialCode"></param>
|
|
/// <param name="MaterialName"></param>
|
|
/// <param name="BatchCode"></param>
|
|
/// <param name="LineCode"></param>
|
|
/// <param name="Quantity"></param>
|
|
/// <param name="Unit"></param>
|
|
/// <param name="LastStocktakingNum"></param>
|
|
/// <returns></returns>
|
|
public int AddMmLineInventory(
|
|
string LocationCode,
|
|
string MaterialCode,
|
|
string MaterialName,
|
|
string BatchCode,
|
|
string LineCode,
|
|
decimal Quantity,
|
|
string Unit,
|
|
decimal LastStocktakingNum
|
|
)
|
|
{
|
|
//新增一条
|
|
MmLineInventory mmLineInventory1 = new MmLineInventory();
|
|
mmLineInventory1.Id = XueHua;
|
|
mmLineInventory1.LocationCode = LocationCode;
|
|
mmLineInventory1.MaterialCode = MaterialCode;
|
|
mmLineInventory1.MaterialName = MaterialName;
|
|
mmLineInventory1.BatchCode = BatchCode;
|
|
mmLineInventory1.LineCode = LineCode;
|
|
mmLineInventory1.Quantity = Quantity;
|
|
mmLineInventory1.Unit = Unit;
|
|
mmLineInventory1.LastStocktakingNum = Quantity;
|
|
mmLineInventory1.LastStocktakingTime = DateTime.Now;
|
|
mmLineInventory1.Createtime = DateTime.Now;
|
|
mmLineInventory1.Createby = "系统";
|
|
return Context.Insertable(mmLineInventory1).ExecuteCommand();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 盘点
|
|
/// </summary>
|
|
/// <param name="Id"></param>
|
|
/// <param name="Quantity"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="Exception"></exception>
|
|
public int stocktakeLineMaterial(string Id, decimal Quantity)
|
|
{
|
|
int result = 0;
|
|
if (string.IsNullOrEmpty(Id))
|
|
{
|
|
throw new Exception("Id不能为空");
|
|
}
|
|
if (Quantity < 0)
|
|
{
|
|
throw new Exception("盘点数量不能小于0");
|
|
}
|
|
MmLineInventory mmLineInventory = Queryable().Where(x => x.Id == Id).First();
|
|
if (mmLineInventory == null)
|
|
{
|
|
throw new Exception("查找不到数据");
|
|
}
|
|
decimal begin = mmLineInventory.Quantity.Value;
|
|
mmLineInventory.Quantity = Quantity;
|
|
mmLineInventory.Updatetime = DateTime.Now;
|
|
mmLineInventory.LastStocktakingNum = Quantity;
|
|
mmLineInventory.LastStocktakingTime = DateTime.Now;
|
|
mmLineInventory.Updateby = "系统";
|
|
result = Context.Updateable(mmLineInventory).ExecuteCommand();
|
|
if (result == 1)
|
|
{
|
|
OperationLogRecording(
|
|
3,
|
|
2,
|
|
5,
|
|
mmLineInventory.MaterialCode,
|
|
mmLineInventory.MaterialName,
|
|
mmLineInventory.LineCode,
|
|
begin,
|
|
Quantity,
|
|
mmLineInventory.LocationCode
|
|
);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|