using BPA.SAAS.Manage.Application.DataBase.Dtos.GoodsTechnology; using BPA.SAAS.Manage.Application.DataBase.Interface; using BPA.SAAS.Manage.Comm.Const; using BPA.SAAS.Manage.Core.Base; using BPA.SAAS.Manage.Core.DataBase; using BPA.SAAS.Manage.Core.Device; using BPA.SAAS.Manage.Core.Product; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BPA.SAAS.Manage.Application.DataBase.Services { public class GoodsTechnologyService: IGoodsTechnologyService, ITransient { ISqlSugarClient _db; public GoodsTechnologyService(ISqlSugarClient db) { _db = db; } #region 商品工艺(新版本工艺制作) /// /// 添加商品工艺 /// /// /// public async Task UpdateGoodsTechnologyAction(List inputDto) { try { var addlist = new List(); var list = _db.Queryable().Where(x => x.DeviceId == inputDto[0].DeviceId && x.GoodsId == inputDto[0].GoodsId && x.GoodsAttributeId == inputDto[0].GoodsAttributeId).ToList(); _db.Ado.BeginTran(); _db.Deleteable(list).ExecuteCommand(); //var list = _db.Queryable().Where(x => x.GroupId == groupId && x.IsDeleted == 0).ToList(); for (int i = 0; i < inputDto.Count; i++) { var goodsinfo = _db.Queryable().Where(x => x.Id == inputDto[i].GoodsId).First(); var maxsort = _db.Queryable().Where(x => x.GoodsId == inputDto[i].GoodsId && x.DeviceId == inputDto[i].DeviceId).Max(x => x.Sort); var data = new BPA_GoodsTechnologyAction() { Id = string.IsNullOrEmpty(inputDto[i].Id) ? Guid.NewGuid().ToString() : inputDto[i].Id, GoodsId = inputDto[i].GoodsId, ActionJson = inputDto[i].ActionJson, StepName = inputDto[i].StepName, ChnologyId = inputDto[i].ChnologyId, CreateAt = DateTime.Now, WarehousrTemplateId = inputDto[i].WarehousrTemplateId, IsDeleted = 0, GoodsAttributeId = inputDto[i].GoodsAttributeId, Sort = string.IsNullOrWhiteSpace(inputDto[i].Sort.ToString()) ? maxsort + (i + 1) : Convert.ToInt32(inputDto[i].Sort.ToString()), IsBatch = inputDto[i].IsBatch, DeviceId = inputDto[i].DeviceId, }; if (!goodsinfo.IsAttrubute) { var sx = _db.Queryable((a, b) => new JoinQueryInfos( JoinType.Left, a.GoodsAttributeId == b.Id)).Where((a, b) => b.AttributeName == "默认属性").Select((a, b) => new BPA_GoodsAttributeValue() { Id = a.Id.SelectAll() }).First(); data.GoodsAttributeId = sx?.Id; } addlist.Add(data); } var res = await _db.Insertable(addlist).CallEntityMethod(m => m.Create()).ExecuteCommandAsync(); _db.Ado.CommitTran(); return res > 0; } catch (Exception e) { _db.Ado.RollbackTran(); throw Oops.Oh("保存失败"); } } public async Task AddGoodsTechnologyAction(List inputDto) { try { var addlist = new List(); for (int i = 0; i < inputDto.Count; i++) { var goodsinfo = _db.Queryable().Where(x => x.Id == inputDto[i].GoodsId).First(); var maxsort = _db.Queryable().Where(x => x.GoodsId == inputDto[i].GoodsId && x.DeviceId == inputDto[i].DeviceId).Max(x => x.Sort); var data = new BPA_GoodsTechnologyAction() { Id = string.IsNullOrEmpty(inputDto[i].Id) ? Guid.NewGuid().ToString() : inputDto[i].Id, GoodsId = inputDto[i].GoodsId, ActionJson = inputDto[i].ActionJson, StepName = inputDto[i].StepName, ChnologyId = inputDto[i].ChnologyId, CreateAt = DateTime.Now, IsDeleted = 0, WarehousrTemplateId = inputDto[i].WarehousrTemplateId, GoodsAttributeId = inputDto[i].GoodsAttributeId, Sort = string.IsNullOrWhiteSpace(inputDto[i].Sort.ToString()) ? maxsort + (i + 1) : Convert.ToInt32(inputDto[i].Sort.ToString()), IsBatch = inputDto[i].IsBatch, DeviceId = inputDto[i].DeviceId, }; if (!goodsinfo.IsAttrubute) { var sx = _db.Queryable((a, b) => new JoinQueryInfos( JoinType.Left, a.GoodsAttributeId == b.Id)).Where((a, b) => b.AttributeName == "默认属性").Select((a, b) => new BPA_GoodsAttributeValue() { Id = a.Id.SelectAll() }).First(); data.GoodsAttributeId = sx?.Id; } addlist.Add(data); } var res = await _db.Insertable(addlist).CallEntityMethod(m => m.Create()).ExecuteCommandAsync(); return res > 0; } catch (Exception e) { throw Oops.Oh("保存失败"); } } public async Task> GetGoodsTechnologyAction(string goodsId) { List goodsTechnologyActionListViews = new List(); var list = _db.Queryable().Where(x => x.GoodsId == goodsId) .Select(x => new GoodsTechnologyActionView() { Id = x.Id.SelectAll(), }).OrderBy(x => x.Sort, OrderByType.Asc).ToList(); var Devicelist = await _db.Queryable().ToListAsync(); var GoodsAttributeValue = await _db.Queryable().ToListAsync(); var sf = list.GroupBy(x => x.GoodsAttributeId).ToList(); var sf1 = list.GroupBy(x => x.WarehousrTemplateId).ToList(); for (int i = 0; i < sf.Count; i++) { var sd = GoodsAttributeValue?.Where(x => sf[i].Key.Contains(x.Id)).Select(x => x.AttributeValue).ToArray(); var sdw = GoodsAttributeValue?.Where(x => sf[i].Key.Contains(x.Id)).Select(x => x.Id).ToArray(); var nane =string.Join('-', sd); var s = sf[i].AsQueryable().ToList().GroupBy(x => x.DeviceId).ToList(); for (int t = 0; t < s.Count; t++) { GoodsTechnologyActionListView item = new() { DeviceId = s[t].Key, WarehousrTemplateId = sf1[t].Key, GoodsAttributeId = string.Join(',', sdw), DeviceName = Devicelist?.FirstOrDefault(x => x.Id == s[t].Key).DeviceName+ "【"+ nane+"】", Data = s[t].AsQueryable().ToList(), }; goodsTechnologyActionListViews.Add(item); } } return goodsTechnologyActionListViews; } public async Task DeleteGoodsTechnologyAction(string id) { var item = await _db.Queryable().Where(x => x.Id == id).FirstAsync(); if (item != null) { var res = await _db.Deleteable(item).ExecuteCommandAsync() > 0; var list = _db.Queryable().Where(x =>x.GoodsId == item.GoodsId && x.DeviceId == item.DeviceId).OrderBy(x => x.Sort, OrderByType.Asc).ToList(); var uplist = new List(); for (int i = 0; i < list.Count; i++) { list[i].Sort = i + 1; uplist.Add(list[i]); } if (uplist.Count > 0) { await _db.Updateable(uplist).ExecuteCommandAsync(); } return true; } else { throw Oops.Oh("找不到相关数据,删除失败"); } } public async Task DeleteGoodsTechnologyAction(GoodsTechnologDelete dto) { var item = await _db.Queryable().Where(x => x.DeviceId == dto.devideId && x.GoodsId == dto.goodsId && x.GoodsAttributeId== dto.goodsAttributeId).ToListAsync(); if (item.Count > 0) { return await _db.Deleteable(item).ExecuteCommandAsync() > 0; } else { throw Oops.Oh("找不到相关数据,删除失败"); } } public async Task> GetDeviceTechnology() { var list = await _db.Queryable().Select(x => new DeviceGoodsTechnologyView() { Id = x.Id.SelectAll(), }).Mapper(a => { //a.GoodsTechnologyInfo = _db.Queryable().Where(d => d.DeviceVersionKey == a.ProductVersionId && d.Type==1).Select(d => new GoodsTechnologyInfo() //{ // DeviceTechnologyId = d.Id, // DeviceVersionKey = d.DeviceVersionKey, // Name = d.Name, //}).ToList(); }).ToListAsync(); return list; } #endregion } }