物料模块功能优化,调整查询字段
This commit is contained in:
@@ -10,7 +10,7 @@ namespace DOAN.Model.BZFM.Dto
|
||||
public string MaterialCode { get; set; }
|
||||
|
||||
public string WarehouseName { get; set; }
|
||||
|
||||
public string LocationCode { get; set; }
|
||||
public string BatchNo { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace DOAN.Model.BZFM.Dto
|
||||
public string MaterialCode { get; set; }
|
||||
public string Specification { get; set; }
|
||||
public string TypeLabel { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Status { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -64,8 +64,6 @@ namespace DOAN.Model.BZFM.Dto
|
||||
|
||||
[Required(ErrorMessage = "物料编码不能为空")]
|
||||
public string MaterialCode { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "入库单号不能为空")]
|
||||
public string InboundNo { get; set; }
|
||||
|
||||
|
||||
@@ -100,7 +98,6 @@ namespace DOAN.Model.BZFM.Dto
|
||||
public string MaterialName { get; set; }
|
||||
[Required(ErrorMessage = "物料编码不能为空")]
|
||||
public string MaterialCode { get; set; }
|
||||
[Required(ErrorMessage = "入库单号不能为空")]
|
||||
public string InboundNo { get; set; }
|
||||
[ExcelColumn(Name = "入库类型")]
|
||||
public string TransactionTypeLabel { get; set; }
|
||||
|
||||
@@ -22,10 +22,7 @@ namespace DOAN.Model.BZFM.Dto
|
||||
/// </summary>
|
||||
public class MmRecordOutboundDto
|
||||
{
|
||||
[Required(ErrorMessage = "主键ID不能为空")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "出库单号不能为空")]
|
||||
public string OutboundNo { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "物料编码不能为空")]
|
||||
@@ -71,7 +68,6 @@ namespace DOAN.Model.BZFM.Dto
|
||||
/// </summary>
|
||||
public class OutboundReceiptDto
|
||||
{
|
||||
[Required(ErrorMessage = "出库单号不能为空")]
|
||||
public string OutboundNo { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "物料编码不能为空")]
|
||||
|
||||
@@ -7,8 +7,9 @@ namespace DOAN.Model.BZFM.Dto
|
||||
public class MmTransactionTypeQueryDto : PagerInfo
|
||||
{
|
||||
public string TypeName { get; set; }
|
||||
|
||||
public string TypeCode { get; set; }
|
||||
public string TransactionDirection { get; set; }
|
||||
public string Status { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -30,7 +30,6 @@ namespace DOAN.Service.BZFM
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取详情
|
||||
/// </summary>
|
||||
@@ -38,9 +37,7 @@ namespace DOAN.Service.BZFM
|
||||
/// <returns></returns>
|
||||
public MmInventory GetInfo(int Id)
|
||||
{
|
||||
var response = Queryable()
|
||||
.Where(x => x.Id == Id)
|
||||
.First();
|
||||
var response = Queryable().Where(x => x.Id == Id).First();
|
||||
|
||||
return response;
|
||||
}
|
||||
@@ -72,12 +69,25 @@ namespace DOAN.Service.BZFM
|
||||
/// <returns></returns>
|
||||
private static Expressionable<MmInventory> QueryExp(MmInventoryQueryDto parm)
|
||||
{
|
||||
var predicate = Expressionable.Create<MmInventory>()
|
||||
.AndIF(!string.IsNullOrEmpty(parm.WarehouseCode), m => m.WarehouseCode.Contains(parm.WarehouseCode))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), m => m.MaterialCode.Contains(parm.MaterialCode))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.WarehouseName), m => m.WarehouseName.Contains(parm.WarehouseName))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.BatchNo), m => m.BatchNo.Contains(parm.BatchNo))
|
||||
;
|
||||
var predicate = Expressionable
|
||||
.Create<MmInventory>()
|
||||
.AndIF(
|
||||
!string.IsNullOrEmpty(parm.MaterialCode),
|
||||
m => m.MaterialCode.Contains(parm.MaterialCode)
|
||||
)
|
||||
.AndIF(
|
||||
!string.IsNullOrEmpty(parm.WarehouseName),
|
||||
m => m.WarehouseName.Contains(parm.WarehouseName)
|
||||
)
|
||||
.AndIF(
|
||||
!string.IsNullOrEmpty(parm.WarehouseCode),
|
||||
m => m.WarehouseCode.Contains(parm.WarehouseCode)
|
||||
)
|
||||
.AndIF(
|
||||
!string.IsNullOrEmpty(parm.LocationCode),
|
||||
m => m.LocationCode.Contains(parm.LocationCode)
|
||||
)
|
||||
.AndIF(!string.IsNullOrEmpty(parm.BatchNo), m => m.BatchNo.Contains(parm.BatchNo));
|
||||
|
||||
return predicate;
|
||||
}
|
||||
@@ -86,30 +96,30 @@ namespace DOAN.Service.BZFM
|
||||
{
|
||||
try
|
||||
{
|
||||
return Context.Queryable<MmMaterial>()
|
||||
return Context
|
||||
.Queryable<MmMaterial>()
|
||||
.Where(it => it.Status == "启用")
|
||||
.Select(it => new MmMaterialOption
|
||||
{
|
||||
MaterialCode = it.MaterialCode,
|
||||
MaterialName = it.MaterialName,
|
||||
CategoryCode = it.CategoryCode,
|
||||
Specification = it.Specification
|
||||
Specification = it.Specification,
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<MmLocationOption> GetLocationOption()
|
||||
{
|
||||
try
|
||||
{
|
||||
return Context.Queryable<MmLocation>()
|
||||
return Context
|
||||
.Queryable<MmLocation>()
|
||||
.Where(it => it.Status == "启用")
|
||||
.Select(it => new MmLocationOption
|
||||
{
|
||||
@@ -117,13 +127,12 @@ namespace DOAN.Service.BZFM
|
||||
WarehouseName = it.WarehouseName,
|
||||
LocationCode = it.LocationCode,
|
||||
LocationName = it.LocationName,
|
||||
LocationType = it.LocationType
|
||||
LocationType = it.LocationType,
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
@@ -132,18 +141,18 @@ namespace DOAN.Service.BZFM
|
||||
{
|
||||
try
|
||||
{
|
||||
return Context.Queryable<MmTransactionType>()
|
||||
return Context
|
||||
.Queryable<MmTransactionType>()
|
||||
.Where(it => it.Status == "启用")
|
||||
.Select(it => new MmTransactionOption
|
||||
{
|
||||
Label = it.TypeName,
|
||||
Value = it.TypeCode
|
||||
Value = it.TypeCode,
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
@@ -158,20 +167,27 @@ namespace DOAN.Service.BZFM
|
||||
decimal delta = GetSignedQuantity(parm.ReceiptType, parm.Quantity);
|
||||
|
||||
// 校验物料和库位
|
||||
var mmMaterial = Context.Queryable<MmMaterial>().Where(it => it.MaterialCode == parm.MaterialCode).First();
|
||||
if (mmMaterial == null) return "物料不存在!";
|
||||
var mmMaterial = Context
|
||||
.Queryable<MmMaterial>()
|
||||
.Where(it => it.MaterialCode == parm.MaterialCode)
|
||||
.First();
|
||||
if (mmMaterial == null)
|
||||
return "物料不存在!";
|
||||
|
||||
var mmLocation = Context.Queryable<MmLocation>()
|
||||
var mmLocation = Context
|
||||
.Queryable<MmLocation>()
|
||||
.Where(it => it.WarehouseCode == parm.WarehouseCode)
|
||||
.Where(it => it.LocationCode == parm.LocationCode)
|
||||
.First();
|
||||
if (mmLocation == null) return "仓库编码或库位编码不存在!";
|
||||
if (mmLocation == null)
|
||||
return "仓库编码或库位编码不存在!";
|
||||
|
||||
// 启用事务
|
||||
Context.Ado.BeginTran();
|
||||
|
||||
// 获取现有库存(同物料、批次、库位)
|
||||
var mmInventory = Context.Queryable<MmInventory>()
|
||||
var mmInventory = Context
|
||||
.Queryable<MmInventory>()
|
||||
.Where(it => it.MaterialCode == parm.MaterialCode)
|
||||
.Where(it => it.BatchNo == parm.BatchNo)
|
||||
.Where(it => it.WarehouseCode == parm.WarehouseCode)
|
||||
@@ -195,13 +211,14 @@ namespace DOAN.Service.BZFM
|
||||
ExpiryDate = parm.ExpiryDate,
|
||||
LastUpdatedTime = null,
|
||||
ProductionDate = parm.ProductionDate,
|
||||
CreatedTime = nowDate
|
||||
CreatedTime = nowDate,
|
||||
};
|
||||
Context.Insertable(newInventory).ExecuteCommand();
|
||||
}
|
||||
else
|
||||
{
|
||||
Context.Updateable(mmInventory)
|
||||
Context
|
||||
.Updateable(mmInventory)
|
||||
.SetColumns(it => it.CurrentQty == it.CurrentQty + delta)
|
||||
.ExecuteCommand();
|
||||
}
|
||||
@@ -227,7 +244,7 @@ namespace DOAN.Service.BZFM
|
||||
ExpiryDate = parm.ExpiryDate,
|
||||
CreatedTime = nowDate,
|
||||
TransactionType = parm.TransactionType,
|
||||
Remarks = parm.Remarks
|
||||
Remarks = parm.Remarks,
|
||||
};
|
||||
Context.Insertable(newRecord).ExecuteCommand();
|
||||
|
||||
@@ -251,18 +268,25 @@ namespace DOAN.Service.BZFM
|
||||
// 计算有符号变动量(蓝单为正,红单为负)
|
||||
decimal delta = GetSignedQuantity(parm.ReceiptType, parm.Quantity);
|
||||
|
||||
var mmMaterial = Context.Queryable<MmMaterial>().Where(it => it.MaterialCode == parm.MaterialCode).First();
|
||||
if (mmMaterial == null) return "物料不存在!";
|
||||
var mmMaterial = Context
|
||||
.Queryable<MmMaterial>()
|
||||
.Where(it => it.MaterialCode == parm.MaterialCode)
|
||||
.First();
|
||||
if (mmMaterial == null)
|
||||
return "物料不存在!";
|
||||
|
||||
var mmLocation = Context.Queryable<MmLocation>()
|
||||
var mmLocation = Context
|
||||
.Queryable<MmLocation>()
|
||||
.Where(it => it.WarehouseCode == parm.WarehouseCode)
|
||||
.Where(it => it.LocationCode == parm.LocationCode)
|
||||
.First();
|
||||
if (mmLocation == null) return "仓库编码或库位编码不存在!";
|
||||
if (mmLocation == null)
|
||||
return "仓库编码或库位编码不存在!";
|
||||
|
||||
Context.Ado.BeginTran();
|
||||
|
||||
var mmInventory = Context.Queryable<MmInventory>()
|
||||
var mmInventory = Context
|
||||
.Queryable<MmInventory>()
|
||||
.Where(it => it.MaterialCode == parm.MaterialCode)
|
||||
.Where(it => it.BatchNo == parm.BatchNo)
|
||||
.Where(it => it.WarehouseCode == parm.WarehouseCode)
|
||||
@@ -283,7 +307,7 @@ namespace DOAN.Service.BZFM
|
||||
CurrentQty = -delta,
|
||||
Unit = parm.Unit,
|
||||
LastUpdatedTime = null,
|
||||
CreatedTime = nowDate
|
||||
CreatedTime = nowDate,
|
||||
};
|
||||
Context.Insertable(newInventory).ExecuteCommand();
|
||||
}
|
||||
@@ -295,7 +319,8 @@ namespace DOAN.Service.BZFM
|
||||
return "库存不足,无法出库";
|
||||
}
|
||||
|
||||
Context.Updateable(mmInventory)
|
||||
Context
|
||||
.Updateable(mmInventory)
|
||||
.SetColumns(it => it.CurrentQty == it.CurrentQty - delta)
|
||||
.ExecuteCommand();
|
||||
}
|
||||
@@ -316,7 +341,7 @@ namespace DOAN.Service.BZFM
|
||||
Unit = parm.Unit,
|
||||
CreatedTime = nowDate,
|
||||
TransactionType = parm.TransactionType,
|
||||
Remarks = parm.Remarks
|
||||
Remarks = parm.Remarks,
|
||||
};
|
||||
Context.Insertable(newRecord).ExecuteCommand();
|
||||
Context.Ado.CommitTran();
|
||||
@@ -354,7 +379,8 @@ namespace DOAN.Service.BZFM
|
||||
{
|
||||
if (prefix == "RK")
|
||||
{
|
||||
var last = Context.Queryable<MmRecordInbound>()
|
||||
var last = Context
|
||||
.Queryable<MmRecordInbound>()
|
||||
.Where(it => it.InboundNo.StartsWith(prefix + datePart))
|
||||
.OrderBy(it => it.InboundNo + " desc")
|
||||
.Select(it => it.InboundNo)
|
||||
@@ -372,7 +398,8 @@ namespace DOAN.Service.BZFM
|
||||
}
|
||||
else
|
||||
{
|
||||
var last = Context.Queryable<MmRecordOutbound>()
|
||||
var last = Context
|
||||
.Queryable<MmRecordOutbound>()
|
||||
.Where(it => it.OutboundNo.StartsWith(prefix + datePart))
|
||||
.OrderBy(it => it.OutboundNo + " desc")
|
||||
.Select(it => it.OutboundNo)
|
||||
@@ -394,6 +421,5 @@ namespace DOAN.Service.BZFM
|
||||
return baseNo + "001";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace DOAN.Service.BZFM
|
||||
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.OrderBy(it => it.LocationCode)
|
||||
.ToPage<MmLocation, MmLocationDto>(parm);
|
||||
|
||||
return response;
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace DOAN.Service.BZFM
|
||||
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.OrderBy(it => it.Type)
|
||||
.ToPage<MmMaterial, MmMaterialDto>(parm);
|
||||
|
||||
return response;
|
||||
@@ -76,7 +77,7 @@ namespace DOAN.Service.BZFM
|
||||
.AndIF(!string.IsNullOrEmpty(parm.MaterialName), m => m.MaterialName.Contains(parm.MaterialName))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), m => m.MaterialCode.Contains(parm.MaterialCode))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.Specification), m => m.Specification.Contains(parm.Specification))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.TypeLabel), m => m.Type == parm.TypeLabel)
|
||||
.AndIF(!string.IsNullOrEmpty(parm.Type), m => m.Type.Contains(parm.Type))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.Status), m => m.Status == parm.Status);
|
||||
return predicate;
|
||||
}
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Extensions;
|
||||
using DOAN.Model.BZFM.Dto;
|
||||
using DOAN.Model.BZFM;
|
||||
using DOAN.Model.BZFM.Dto;
|
||||
using DOAN.Repository;
|
||||
using DOAN.Service.BZFM.IBZFMService;
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Extensions;
|
||||
|
||||
namespace DOAN.Service.BZFM
|
||||
{
|
||||
/// <summary>
|
||||
/// 出入库类别对照表Service业务层处理
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(IMmTransactionTypeService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class MmTransactionTypeService : BaseService<MmTransactionType>, IMmTransactionTypeService
|
||||
[AppService(
|
||||
ServiceType = typeof(IMmTransactionTypeService),
|
||||
ServiceLifetime = LifeTime.Transient
|
||||
)]
|
||||
public class MmTransactionTypeService
|
||||
: BaseService<MmTransactionType>,
|
||||
IMmTransactionTypeService
|
||||
{
|
||||
/// <summary>
|
||||
/// 查询出入库类别对照表列表
|
||||
@@ -29,7 +34,6 @@ namespace DOAN.Service.BZFM
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取详情
|
||||
/// </summary>
|
||||
@@ -37,9 +41,7 @@ namespace DOAN.Service.BZFM
|
||||
/// <returns></returns>
|
||||
public MmTransactionType GetInfo(int Id)
|
||||
{
|
||||
var response = Queryable()
|
||||
.Where(x => x.Id == Id)
|
||||
.First();
|
||||
var response = Queryable().Where(x => x.Id == Id).First();
|
||||
|
||||
return response;
|
||||
}
|
||||
@@ -71,11 +73,22 @@ namespace DOAN.Service.BZFM
|
||||
/// <returns></returns>
|
||||
private static Expressionable<MmTransactionType> QueryExp(MmTransactionTypeQueryDto parm)
|
||||
{
|
||||
var predicate = Expressionable.Create<MmTransactionType>()
|
||||
.AndIF(!string.IsNullOrEmpty(parm.TypeName), it => it.TypeName.Contains(parm.TypeName))
|
||||
.AndIF(!string.IsNullOrEmpty(parm.TransactionDirection), it => it.TransactionDirection.Contains(parm.TransactionDirection));
|
||||
|
||||
var predicate = Expressionable
|
||||
.Create<MmTransactionType>()
|
||||
.AndIF(
|
||||
!string.IsNullOrEmpty(parm.TypeCode),
|
||||
it => it.TypeCode.Contains(parm.TypeCode)
|
||||
)
|
||||
.AndIF(
|
||||
!string.IsNullOrEmpty(parm.TypeName),
|
||||
it => it.TypeName.Contains(parm.TypeName)
|
||||
)
|
||||
.AndIF(
|
||||
!string.IsNullOrEmpty(parm.TransactionDirection),
|
||||
it => it.TransactionDirection.Contains(parm.TransactionDirection)
|
||||
)
|
||||
.AndIF(!string.IsNullOrEmpty(parm.Status), it => it.Status == parm.Status);
|
||||
return predicate;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user