using FineUIPro;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace BLL
{
public static class TwOutputdetailService
{
#region 获取列表
///
/// 记录数
///
public static int Count
{
get;
set;
}
public static IQueryable GetByModle(Model.Tw_InOutDetailOutput table)
{
var q = from x in Funs.DB.Tw_OutputDetail
join y in Funs.DB.HJGL_Pipeline_Component on x.PipelineComponentId equals y.PipelineComponentId into yy
from y in yy.DefaultIfEmpty()
join mat in Funs.DB.HJGL_MaterialCodeLib on x.MaterialCode equals mat.MaterialCode into mm
from mat in mm.DefaultIfEmpty()
join master in Funs.DB.Tw_OutputMaster on x.OutputMasterId equals master.Id into masters
from master in masters.DefaultIfEmpty()
join stock in Funs.DB.Tw_MaterialStock on new { x.MaterialCode, master.WarehouseId, master.ProjectId } equals new { MaterialCode = stock.PipeLineMatCode, stock.WarehouseId, stock.ProjectId } into st
from stock in st.DefaultIfEmpty()
where
(string.IsNullOrEmpty(table.Id) || x.Id.Contains(table.Id)) &&
(string.IsNullOrEmpty(table.OutputMasterId) || x.OutputMasterId.Contains(table.OutputMasterId)) &&
(string.IsNullOrEmpty(table.PipelineComponentId) || x.PipelineComponentId.Contains(table.PipelineComponentId)) &&
(string.IsNullOrEmpty(table.MaterialCode) || x.MaterialCode.Contains(table.MaterialCode)) &&
(table.TypeInt == null || master.TypeInt == table.TypeInt)
select new Model.Tw_InOutDetailOutput
{
Id = x.Id,
OutputMasterId = x.OutputMasterId,
CusBillCode = master.CusBillCode,
TypeInt = master.TypeInt,
PipelineComponentId = x.PipelineComponentId,
MaterialCode = x.MaterialCode,
Code = mat.Code,
HeatNo = mat.HeatNo,
BatchNo = mat.BatchNo,
PlanNum = x.PlanNum,
ActNum = x.ActNum,
PipelineComponentCode = y.PipelineComponentCode,
MaterialName = mat.MaterialName,
StockNum = stock.StockNum ?? 0,
DiffNum = (x.ActNum ?? 0) - (x.PlanNum ?? 0),
MaterialDef = mat.MaterialDef
}
;
return q;
}
///
/// 获取分页列表
///
///
///
///
public static IEnumerable GetListData(Model.Tw_InOutDetailOutput table, Grid grid1)
{
var q = GetByModle(table);
Count = q.Count();
if (Count == 0)
{
return null;
}
q = q.Skip(grid1.PageSize * grid1.PageIndex).Take(grid1.PageSize);
// q = SortConditionHelper.SortingAndPaging(q, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
return from x in q
select x;
}
#endregion
public static Model.Tw_OutputDetail GetById(string Id)
{
return Funs.DB.Tw_OutputDetail.FirstOrDefault(x => x.Id == Id);
}
///
/// 根据明细Id获取对应的出库主表信息
///
///
///
public static Model.Tw_InOutMasterOutput GetInOutMasterById(string Id)
{
var detail = Funs.DB.Tw_OutputDetail.FirstOrDefault(x => x.Id == Id);
if (detail == null) return null;
Model.Tw_InOutMasterOutput fliter = new Model.Tw_InOutMasterOutput
{
Id = detail.OutputMasterId
};
var result= TwOutputmasterService.GetListData(fliter).FirstOrDefault();
return result;
}
public static void Add(Model.Tw_OutputDetail newtable)
{
Model.Tw_OutputDetail table = new Model.Tw_OutputDetail
{
Id = newtable.Id,
OutputMasterId = newtable.OutputMasterId,
PipelineComponentId = newtable.PipelineComponentId,
MaterialCode = newtable.MaterialCode,
PlanNum = newtable.PlanNum,
ActNum = newtable.ActNum,
};
Funs.DB.Tw_OutputDetail.InsertOnSubmit(table);
Funs.DB.SubmitChanges();
}
public static void Update(Model.Tw_OutputDetail newtable)
{
Model.Tw_OutputDetail table = Funs.DB.Tw_OutputDetail.FirstOrDefault(x => x.Id == newtable.Id);
if (table != null)
{
table.Id = newtable.Id;
table.OutputMasterId = newtable.OutputMasterId;
table.PipelineComponentId = newtable.PipelineComponentId;
table.MaterialCode = newtable.MaterialCode;
table.PlanNum = newtable.PlanNum;
table.ActNum = newtable.ActNum;
Funs.DB.SubmitChanges();
}
}
public static void DeleteById(string Id)
{
Model.Tw_OutputDetail table = Funs.DB.Tw_OutputDetail.FirstOrDefault(x => x.Id == Id);
if (table != null)
{
Funs.DB.Tw_OutputDetail.DeleteOnSubmit(table);
Funs.DB.SubmitChanges();
}
}
public static IEnumerable GetPrintListByOutputMasterIds(List outputMasterIds)
{
var q = from x in Funs.DB.Tw_OutputDetail
join y in Funs.DB.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode into materials
from y in materials.DefaultIfEmpty()
join master in Funs.DB.Tw_OutputMaster on x.OutputMasterId equals master.Id
join plan in Funs.DB.Tw_InOutPlanMaster on master.InOutPlanMasterId equals plan.Id into plans
from plan in plans.DefaultIfEmpty()
join warehouse in Funs.DB.Base_Warehouse on master.WarehouseId equals warehouse.WarehouseId into warehouses
from warehouse in warehouses.DefaultIfEmpty()
join person in Funs.DB.Person_Persons on master.CreateMan equals person.PersonId into persons
from person in persons.DefaultIfEmpty()
join unit in Funs.DB.Base_Unit on master.ReqUnitId equals unit.UnitId into units
from unit in units.DefaultIfEmpty()
where outputMasterIds.Contains(x.OutputMasterId)
orderby master.CusBillCode
select new
{
master.CusBillCode,
WarehouseName = warehouse == null ? master.WarehouseCode : warehouse.WarehouseName,
master.TypeInt,
CreateManName = person == null ? master.CreateMan : person.PersonName,
master.CreateDate,
材料主编码 = x.MaterialCode,
材料编码 = y.Code,
炉号 = y.HeatNo,
批号 = y.BatchNo,
材料名称 = y.MaterialName,
材料描述 = y.MaterialDef,
计划数量 = x.PlanNum,
实际数量 = x.ActNum,
master.WarehouseDate,
ReqUnitName = unit == null ? master.ReqUnitId : unit.UnitName,
Remark = plan == null ? null : plan.Remark
};
// 类型字典无法转换为 SQL,先完成数据库查询,再生成固定顺序的 Excel 列。
return q.ToList().Select(x => new
{
编号 = x.CusBillCode,
仓库 = x.WarehouseName,
类型 = TwConst.TypeIntMap.FirstOrDefault(y => y.Value == x.TypeInt).Key,
发起人 = x.CreateManName,
发起时间 = x.CreateDate,
x.材料主编码,
x.材料编码,
x.炉号,
x.批号,
x.材料名称,
x.材料描述,
x.计划数量,
x.实际数量,
出库时间 = x.WarehouseDate,
领用单位 = x.ReqUnitName,
备注 = x.Remark
}).ToList();
}
}
}