Files
WMS-Api/src/WMS.Web.Repositories/BoxMarkRepositories.cs
tongfei a802b6e29c 优化
2024-03-16 16:11:21 +08:00

291 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto;
using WMS.Web.Core.Dto.Erp;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Values.Single;
using WMS.Web.Repositories.Configuration;
namespace WMS.Web.Repositories
{
/// <summary>
/// 箱唛-仓储
/// </summary>
public class BoxMarkRepositories : IBoxMarkRepositories
{
private readonly ILoginRepositories _loginRepositories;
private readonly RepositoryDbContext _context;
private readonly ISingleDataService _singleDataService;
private readonly IErpService _erpService;
private readonly IErpBasicDataExtendService _erpBasicDataExtendService;
private readonly IBasicsRepositories _basicsRepositories;
public BoxMarkRepositories(RepositoryDbContext context,
IErpService erpService,
ILoginRepositories loginRepositories,
ISingleDataService singleDataService,
IBasicsRepositories basicsRepositories,
IErpBasicDataExtendService erpBasicDataExtendService)
{
_context = context;
_erpService = erpService;
_basicsRepositories = basicsRepositories;
_loginRepositories = loginRepositories;
_singleDataService = singleDataService;
_erpBasicDataExtendService = erpBasicDataExtendService;
}
/// <summary>
/// 列表-分页
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<(List<BoxMarkQueryResponse> list, int total)> GetPagedList(BoxMarkQueryRequest dto, int companyId)
{
//1.获取物料集合和组织集合和供应商的集合
var materials = new List<ErpMaterialDto>();
var materials_result = await _erpService.BillQueryForMaterial();
if (materials_result.IsSuccess)
materials = materials_result.Data.ToList();
//物料集合;模糊查询后的物料集合
if (!string.IsNullOrEmpty(dto.Material))
materials = materials.Where(w => w.MaterialNumber.Contains(dto.Material) || w.MaterialName.Contains(dto.Material) || w.Specifications.Contains(dto.Material)).ToList();
if (companyId == 0)
companyId = _loginRepositories.CompanyId;
List<int> cr_ids = new List<int>();
if (!string.IsNullOrEmpty(dto.Creator))
{
var staffList = await _basicsRepositories.GetStaffListAsync(companyId);
if (staffList != null)
cr_ids = staffList.Where(w => w.Name.Contains(dto.Creator)).Select(s => s.Id).ToList();
}
var query = _context.BoxMarkBillNo
.GroupJoin(_context.BoxMark, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders })
.SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order })
.OrderByDescending(x => x.order.Id).ThenByDescending(x => x.detail.FirstBillNo).ThenByDescending(x => x.detail.LastBillNo)
.Where(adv => 1 == 1);
//编号查询
if (!string.IsNullOrEmpty(dto.BeginBillNo) &&
!string.IsNullOrEmpty(dto.EndBillNo))
{
if (dto.BeginBillNo.ToString().Length >= 13 && dto.EndBillNo.ToString().Length >= 13)
{
var begYMD = Convert.ToInt32(dto.BeginBillNo.Substring(2, 6));
var endYMD = Convert.ToInt32(dto.EndBillNo.Substring(2, 6));
var begNo = Convert.ToInt32(dto.BeginBillNo.Substring(8));
var endNo = Convert.ToInt32(dto.EndBillNo.Substring(8));
query = query.Where(w => w.detail.FirstBillNo >= begYMD && w.detail.FirstBillNo <= endYMD && w.detail.LastBillNo >= begNo && w.detail.LastBillNo <= endNo);
}
else
query = query.Where(w => w.detail.BillNo == dto.BeginBillNo || w.detail.BillNo == dto.EndBillNo);
}
else if (!string.IsNullOrEmpty(dto.BeginBillNo))
query = query.Where(w => w.detail.BillNo == dto.BeginBillNo);
else if (!string.IsNullOrEmpty(dto.EndBillNo))
query = query.Where(w => w.detail.BillNo == dto.EndBillNo);
//订单号查询
if (!string.IsNullOrEmpty(dto.OrderBillNos))
{
var orderBNS = dto.OrderBillNos.Replace("", ",");
var orderBillNoList = orderBNS.Split(",").Where(x => !string.IsNullOrEmpty(x)).ToList();
if (orderBillNoList != null && orderBillNoList.Count != 0)
{
query = query.Where(w => orderBillNoList.Contains(w.order.OrderBillNo));
}
}
List<string> mNumber = new List<string>();
//物料ID在模糊后的物料
if (!string.IsNullOrEmpty(dto.Material))
{
if (materials != null)
mNumber = materials.Where(w => w.MaterialNumber.Contains(dto.Material)
|| w.MaterialName.Contains(dto.Material)
|| w.Specifications.Contains(dto.Material)
).Select(s => s.MaterialNumber).ToList();
query = query.Where(w => mNumber.Contains(w.order.MaterialNumber));
}
if (!string.IsNullOrEmpty(dto.Creator))
query = query.Where(w => cr_ids.Contains(w.order.CreatorId));
if (dto.BeginDate != null)
query = query.Where(w => w.order.CreateTime.Date >= dto.BeginDate.Value);
if (dto.EndDate != null)
query = query.Where(w => w.order.CreateTime.Date <= dto.EndDate.Value);
int total = await query.CountAsync();
var list = await query.Select(s => new BoxMarkQueryResponse()
{
Id = s.order.Id,
DetailId=s.detail.Id,
BillNo = s.detail.BillNo,
OrderBillNo = s.order.OrderBillNo,
MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.order.MaterialNumber),
MaterialNumber = s.order.MaterialNumber,
Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.order.MaterialNumber),
BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.order.MaterialNumber),
CratingQty = s.order.CratingQty,
CratingNetWeightQty = s.order.CratingNetWeightQty,
CratingGrossWeightQty = s.order.CratingGrossWeightQty,
TailboxQty = s.order.TailboxQty,
TailboxNetWeightQty = s.order.TailboxNetWeightQty,
TailboxGrossWeightQty = s.order.TailboxGrossWeightQty,
IsTail=s.detail.IsTail,
Sort = s.detail.Sort,
Creator = _singleDataService.GetSingleData(SingleAction.Staffs, companyId, s.order.CreatorId),
CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = s.order.Remark,
ProductQty=s.order.ProductQty,
}).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();
return (list, total);
}
/// <summary>
/// 新增
/// </summary>
/// <param name="entity"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<BoxMark> Add(BoxMark entity, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
try
{
await _context.BoxMark.AddAsync(entity);
await _context.SaveChangesAsync();
if (_transaction != null)
_transaction.Commit();
return entity;
}
catch (Exception ex)
{
if (_transaction != null)
_transaction.Rollback();
return null;
}
}
/// <summary>
/// 详情-根据最新的ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<BoxMark> GetBy()
{
var entity = await _context.BoxMark.OrderByDescending(x => x.Id).FirstOrDefaultAsync();
return entity;
}
/// <summary>
/// 列表-详情信息列表
/// </summary>
/// <param name="id"></param>
/// <param name="companyId"></param>
/// <returns></returns>
public async Task<List<BoxMarkQueryResponse>> GetListInfoBy(int id, int companyId)
{
//1.获取物料集合和组织集合和供应商的集合
var materials = new List<ErpMaterialDto>();
var materials_result = await _erpService.BillQueryForMaterial();
if (materials_result.IsSuccess)
materials = materials_result.Data.ToList();
var query = _context.BoxMarkBillNo
.GroupJoin(_context.BoxMark, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders })
.SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order })
.OrderByDescending(x => x.order.Id).ThenByDescending(x => x.detail.FirstBillNo).ThenByDescending(x => x.detail.LastBillNo)
.Where(adv => adv.order.Id == id);
var list = await query.Select(s => new BoxMarkQueryResponse()
{
Id = s.order.Id,
DetailId = s.detail.Id,
BillNo = s.detail.BillNo,
OrderBillNo = s.order.OrderBillNo,
MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.order.MaterialNumber),
MaterialNumber = s.order.MaterialNumber,
Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.order.MaterialNumber),
BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.order.MaterialNumber),
CratingQty = s.order.CratingQty,
CratingNetWeightQty = s.order.CratingNetWeightQty,
CratingGrossWeightQty = s.order.CratingGrossWeightQty,
TailboxQty = s.order.TailboxQty,
TailboxNetWeightQty = s.order.TailboxNetWeightQty,
TailboxGrossWeightQty = s.order.TailboxGrossWeightQty,
IsTail = s.detail.IsTail,
Sort=s.detail.Sort,
Creator = _singleDataService.GetSingleData(SingleAction.Staffs, companyId, s.order.CreatorId),
CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = s.order.Remark,
ProductQty = s.order.ProductQty,
}).ToListAsync();
return list;
}
/// <summary>
/// 详情-根据最新的ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<BoxMarkBillNo> GetLastBillNo()
{
var entity = await _context.BoxMarkBillNo.OrderByDescending(x => x.Id).FirstOrDefaultAsync();
return entity;
}
/// <summary>
/// 批量删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<bool> DeleteRange(List<int> ids, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
try
{
var list = await _context.BoxMark.Include(x=>x.BillNos).Where(f => ids.Contains(f.Id)).ToListAsync();
_context.BoxMark.RemoveRange(list);
await _context.SaveChangesAsync();
if (_transaction != null)
_transaction.Commit();
}
catch (Exception ex)
{
if (_transaction != null)
_transaction.Rollback();
return false;
}
return true;
}
}
}