using Dm; using MathNet.Numerics.RootFinding; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Emit; using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; using wms.sqlsugar.model.fj; using WMS.BZModels; using WMS.BZModels.Dto.FJ.BillMachInfoDtos; using WMS.BZSqlSugar; using WMS.Info; using WMS.Info.Models; using static System.Runtime.CompilerServices.RuntimeHelpers; namespace WMS.BZServices.FJ { public class BillMachinfoService { private readonly Repository _billMachinfoRepository; private readonly Repository _baseWarehouseRepository; private readonly Repository _baseWareareaRepository; public BillMachinfoService(Repository billMachinfoRepository, Repository baseWarehouseRepository, Repository baseWareareaRepository) { _billMachinfoRepository = billMachinfoRepository; _baseWarehouseRepository = baseWarehouseRepository; _baseWareareaRepository = baseWareareaRepository; } public PagedInfo GetPageList(Pagination pagination, BillMachinfoQueryDto billDocsinfoQueryDto) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.Name), (billMachinfo, warehouse, warearea) => billMachinfo.Name.Contains(billDocsinfoQueryDto.Name)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.KeyWord), (billMachinfo, warehouse, warearea) => billMachinfo.MachNo.Contains(billDocsinfoQueryDto.KeyWord) || billMachinfo.Name.Contains(billDocsinfoQueryDto.KeyWord) || billMachinfo.Station.Contains(billDocsinfoQueryDto.KeyWord) || billMachinfo.GrpCode.Contains(billDocsinfoQueryDto.KeyWord)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.WarehouseId), (billMachinfo, warehouse, warearea) => billMachinfo.WarehouseId.ToString().Contains(billDocsinfoQueryDto.WarehouseId)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.MachNo), (billMachinfo, warehouse, warearea) => billMachinfo.MachNo.Contains(billDocsinfoQueryDto.MachNo)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.Station), (billMachinfo, warehouse, warearea) => billMachinfo.Station.Contains(billDocsinfoQueryDto.Station)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.GrpCode), (billMachinfo, warehouse, warearea) => billMachinfo.GrpCode.Contains(billDocsinfoQueryDto.GrpCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.BillCode), (billMachinfo, warehouse, warearea) => billMachinfo.BillCode.Equals(billDocsinfoQueryDto.BillCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.WareDirect), (billMachinfo, warehouse, warearea) => billMachinfo.WareDirect.Equals(billDocsinfoQueryDto.WareDirect)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.WareAreaId), (billMachinfo, warehouse, warearea) => billMachinfo.WareAreaId.Equals(billDocsinfoQueryDto.WareAreaId)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.Direction), (billMachinfo, warehouse, warearea) => billMachinfo.Direction.Contains(billDocsinfoQueryDto.Direction)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.WorkOrder), (billMachinfo, warehouse, warearea) => billMachinfo.WorkOrder.Equals(billDocsinfoQueryDto.WorkOrder)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.SetGrpCode), (billMachinfo, warehouse, warearea) => billMachinfo.SetGrpCode.Equals(billDocsinfoQueryDto.SetGrpCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.ProBillCode), (billMachinfo, warehouse, warearea) => billMachinfo.ProBillCode.Equals(billDocsinfoQueryDto.ProBillCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.ProWorkOrder), (billMachinfo, warehouse, warearea) => billMachinfo.ProWorkOrder.Equals(billDocsinfoQueryDto.ProWorkOrder)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.ProSetGrpCode), (billMachinfo, warehouse, warearea) => billMachinfo.ProSetGrpCode.Equals(billDocsinfoQueryDto.ProSetGrpCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.MacTypeCode), (billMachinfo, warehouse, warearea) => billMachinfo.MacTypeCode.Equals(billDocsinfoQueryDto.MacTypeCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billDocsinfoQueryDto?.MacTypeName), (billMachinfo, warehouse, warearea) => billMachinfo.MacTypeName.Contains(billDocsinfoQueryDto.MacTypeName)); var list = _billMachinfoRepository.Context.Queryable((billMachinfo, warehouse, warearea) => new object[] { JoinType.Left,billMachinfo.WarehouseId == warehouse.Id , JoinType.Left, warehouse.Id==warearea.WarehouseId}).Where(predicate.ToExpression()) .Select((billMachinfo, warehouse, warearea) => new BillMachinfoDto { Id = billMachinfo.Id.ToString(), WarehouseName = warehouse.Name, WarehouseId = billMachinfo.WarehouseId.ToString(), WarehouseCode = billMachinfo.WarehouseCode, WarehouseSort = billMachinfo.WarehouseSort, WareDirect = billMachinfo.WareDirect, WareAreaId = billMachinfo.WareAreaId.ToString(), IsStop = billMachinfo.IsStop, MachNo = billMachinfo.MachNo, Name = billMachinfo.Name, GrpCode = billMachinfo.GrpCode, Station = billMachinfo.Station, Direction = billMachinfo.Direction, BillCode = billMachinfo.BillCode, WorkOrder = billMachinfo.WorkOrder, SetGrpCode = billMachinfo.SetGrpCode, ProBillCode = billMachinfo.ProBillCode, ProWorkOrder = billMachinfo.ProWorkOrder, ProSetGrpCode = billMachinfo.ProSetGrpCode, Memo = billMachinfo.Memo, AddWho = billMachinfo.AddWho, EditWho = billMachinfo.EditWho, AddTime = billMachinfo.AddTime, EditTime = billMachinfo.EditTime, MacTypeCode = billMachinfo.MacTypeCode, MacTypeName = billMachinfo.MacTypeName, AgvPoint = billMachinfo.AgvPoint, NearestWarehouseName = billMachinfo.NearestWarehouseName }).MergeTable().ToPage(pagination); return list; } public void Save(LoginUserInfo loginUser, string keyValue, BillMachinfo entity) { if (string.IsNullOrWhiteSpace(entity.Name)) { throw new ArgumentException("机台名称不能为空"); } var warehouse = _baseWarehouseRepository.Queryable().First(o => o.Id == entity.WarehouseId); if (warehouse == null) { throw new ArgumentException("仓库不存在!"); } var warearea = _baseWareareaRepository.Queryable().First(o => o.Id == entity.WareAreaId); if (keyValue.IsEmpty() || keyValue == "undefined") { var mat = _billMachinfoRepository.Count(p => p.MachNo == entity.MachNo); if (mat > 0) { throw new ArgumentException("机台号已存在"); } entity.WarehouseId = warehouse.Id; entity.WarehouseCode = warehouse.Code; entity.WareAreaId = warearea == null ? 0 : warearea.Id; entity.AddTime = DateTime.Now; entity.AddWho = loginUser.UserNo; entity.EditTime = DateTime.Now; entity.EditWho = loginUser.UserNo; entity.IsStop = 0; _billMachinfoRepository.Insert(entity); } else { if (!long.TryParse(keyValue, out var id)) { throw BZSysExCore.ThrowFailException("机台id错误!"); } var mat = _billMachinfoRepository.Count(p => p.MachNo == entity.MachNo && p.Id != id); if (mat > 0) { throw new ArgumentException("机台号已存在"); } entity.WarehouseId = warehouse.Id; entity.WarehouseCode = warehouse.Code; entity.WareAreaId = warearea == null ? 0 : warearea.Id; entity.EditTime = DateTime.Now; entity.EditWho = loginUser.UserNo; //注意更新的列。 _billMachinfoRepository.AsUpdateable(entity).UpdateColumns(it => new { it.Name, it.WarehouseId, it.WarehouseCode, it.WareAreaId, it.EditTime, it.EditWho, it.MachNo, it.WareDirect, it.GrpCode, it.Station, it.Direction, it.MacTypeCode, it.MacTypeName, it.NearestWarehouseName }).IgnoreColumns(it => it.AddTime).IgnoreColumns(it => it.AddWho).IgnoreColumns(ignoreAllNullColumns: true).Where(it => it.Id == id).ExecuteCommand(); } } public void Delete(long id) { var entity = _billMachinfoRepository.GetSingle(o => o.Id == id); if (entity == null) { throw BZSysExCore.ThrowFailException("机台不存在!"); } _billMachinfoRepository.Deleteable().Where(it => it.Id == id).ExecuteCommand(); } public void SaveWareDirect(LoginUserInfo loginUser, SaveWareDirectDto Data) { if (Data.Ids != null && Data.Ids.Length == 0) { throw BZSysExCore.ThrowFailException("没有选择数据!"); } if (string.IsNullOrEmpty(Data.WarehouseId)) { throw BZSysExCore.ThrowFailException("仓库不能为空!"); } var wearhouse = _baseWarehouseRepository.Queryable().First(o => o.Id.Equals(Data.WarehouseId)); if (wearhouse == null) { throw BZSysExCore.ThrowFailException("仓库不存在!"); } var wareDirect = "N"; if (wearhouse.Name.Contains("南")) { wareDirect = "S"; } var lists = _billMachinfoRepository.Queryable().Where(o => Data.Ids.Contains(o.Id.ToString())).ToList(); if (lists == null || lists.Count == 0) { throw BZSysExCore.ThrowFailException("没有机台数据!"); } lists.ForEach(it => { it.EditTime = DateTime.Now; it.EditWho = loginUser.UserNo; it.WarehouseId = wearhouse.Id; it.WarehouseCode = wearhouse.Code; it.WareDirect = wareDirect; }); _billMachinfoRepository.UpdateRange(lists); } } }