Files
BarCode-Api/src/BarCode.Web.Repositories/BoxMarkRepositories.cs
2025-04-30 17:01:05 +08:00

313 lines
14 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 BarCode.Web.Core.Dto;
using BarCode.Web.Core.Dto.Erp;
using BarCode.Web.Domain.Entitys;
using BarCode.Web.Domain.Infrastructure;
using BarCode.Web.Domain.IService.Public;
using BarCode.Web.Domain.Values.Single;
using BarCode.Web.Repositories.Configuration;
using BarCode.Web.Core.Dto.Login;
namespace BarCode.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, LoginInDto loginInfo)
{
//1.获取物料集合和组织集合和供应商的集合
var materials = new List<ErpMaterialDto>();
var materials_result = await _erpService.BillQueryForMaterial();
if (materials_result.IsSuccess)
materials = materials_result.Data.ToList();
List<string> materialNumbs = new List<string>();
//物料集合;模糊查询后的物料集合
if (!string.IsNullOrEmpty(dto.Material))
materialNumbs = materials.Where(w => w.MaterialNumber.Contains(dto.Material) || w.MaterialName.Contains(dto.Material) || w.Specifications.Contains(dto.Material)).Select(x => x.MaterialNumber).ToList();
List<int> cr_ids = new List<int>();
if (!string.IsNullOrEmpty(dto.Creator))
{
cr_ids = await _basicsRepositories.GetUserIdsAsync(dto.Creator, loginInfo.UserInfo.CompanyId);
}
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 (loginInfo.UserInfo.IsAdmin != true && !string.IsNullOrEmpty(dto.OrgCode))
{
var rec_type = dto.OrgCode.Substring(0, 1);
var rec_code = dto.OrgCode.Substring(2, dto.OrgCode.Length - 2);
if (rec_type.Equals("s"))//供应商
query = query.Where(w => rec_code == w.order.SupplierCode);
else//查其他单据(组织)
query = query.Where(w => rec_code == w.order.OrgCode);
}
////编号查询
//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.BeginBillNo) && dto.BeginBillNo.ToString().Length >= 13)
{
var begYMD = Convert.ToInt32(dto.BeginBillNo.Substring(2, 6));
var begNo = Convert.ToInt32(dto.BeginBillNo.Substring(8));
query = query.Where(w => w.detail.FirstBillNo >= begYMD
&& w.detail.LastBillNo >= begNo);
}
if (!string.IsNullOrEmpty(dto.EndBillNo) && dto.EndBillNo.ToString().Length >= 13)
{
var endYMD = Convert.ToInt32(dto.EndBillNo.Substring(2, 6));
var endNo = Convert.ToInt32(dto.EndBillNo.Substring(8));
query = query.Where(w => w.detail.FirstBillNo <= endYMD
&& w.detail.LastBillNo <= endNo);
}
//订单号查询
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));
}
}
//物料ID在模糊后的物料
if (!string.IsNullOrEmpty(dto.Material))
{
query = query.Where(w => materialNumbs.Contains(w.order.MaterialNumber));
}
if (!string.IsNullOrEmpty(dto.Creator))
query = query.Where(w => cr_ids.Contains(w.order.CreatorId));
if (dto.CreateBeginDate != null)
query = query.Where(w => w.order.CreateTime.Date >= dto.CreateBeginDate.Value);
if (dto.CreateEndDate != null)
query = query.Where(w => w.order.CreateTime.Date <= dto.CreateEndDate.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.Users, loginInfo.UserInfo.CompanyId, s.order.CreatorId),
CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = s.order.Remark,
ProductQty=s.order.ProductQty,
BeginNumber=s.detail.BeginNumber,
EndNumber=s.detail.EndNumber
}).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.Users, companyId, s.order.CreatorId),
CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = s.order.Remark,
ProductQty = s.order.ProductQty,
BeginNumber = s.detail.BeginNumber,
EndNumber = s.detail.EndNumber
}).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;
}
}
}