/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Caching.Manual; using CoreCms.Net.Configuration; using CoreCms.Net.Model.Entities; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.Model.FromBody; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Helper; using SqlSugar; using CoreCms.Net.Model.Entities.baifenbingfa.puhuo; namespace CoreCms.Net.Repository { /// /// 库存操作表 接口实现 /// public class CoreCmsStockRepository : BaseRepository, ICoreCmsStockRepository { private readonly IUnitOfWork _unitOfWork; public CoreCmsStockRepository(IUnitOfWork unitOfWork) : base(unitOfWork) { _unitOfWork = unitOfWork; } #region 实现重写增删改查操作========================================================== /// /// 重写异步插入方法 /// /// 实体数据 /// public async Task InsertAsync(FMCreateStock entity, string username, CoreCmsDistribution distribution) { var jm = new AdminUiCallBack(); if (entity.items == null || !entity.items.Any()) { jm.msg = "至少选择一个货品哦"; return jm; } bool isRepeat = entity.items.GroupBy(i => i.productId).Any(g => g.Count() > 1); if (isRepeat) { jm.msg = "请勿提交相同货品"; return jm; } if (entity.items.Any(p => p.nums <= 0)) { jm.msg = "入库出库的货品数量不能为0"; return jm; } var stockModel = new CoreCmsStock(); if (entity.model.type == (int)GlobalEnumVars.StockType.In) { stockModel.id = await CreateCode(GlobalEnumVars.StockType.In.ToString()); } else if (entity.model.type == (int)GlobalEnumVars.StockType.Out) { stockModel.id = await CreateCode(GlobalEnumVars.StockType.Out.ToString()); } else if (entity.model.type == 3) { stockModel.id = await CreateCode(GlobalEnumVars.StockType.Out.ToString()); } else { jm.msg = "单据类型错误"; return jm; } stockModel.memo = entity.model.memo; stockModel.createTime = DateTime.Now; stockModel.manager = entity.model.manager; if (entity.model.type == 3 ) { if (stockModel.memo == "无") { stockModel.memo = ""; } stockModel.memo = distribution.name+ " 经销商铺货 " + stockModel.memo; stockModel.type = 2; } else { stockModel.type = entity.model.type; } var logs = new List(); var products = new List(); var index = 0; foreach (var item in entity.items) { index++; //判断此货品是否存在 var product = await DbClient.Queryable((p, good) => new JoinQueryInfos( JoinType.Left, p.goodsId == good.id)) .Select((p, good) => new CoreCmsProducts { id = p.id, goodsId = p.goodsId, barcode = p.barcode, sn = p.sn, price = p.price, costprice = p.costprice, mktprice = p.mktprice, marketable = p.marketable, weight = p.weight, stock = p.stock, freezeStock = p.freezeStock, spesDesc = p.spesDesc, isDefalut = p.isDefalut, images = p.images, isDel = p.isDel, name = good.name, bn = good.bn, isMarketable = good.isMarketable, unit = good.unit, distributionPrice = p.distributionPrice, CategoryID = good.goodsCategoryId, }).With(SqlWith.NoLock) .MergeTable() .Where(p => p.id == item.productId).FirstAsync(); if (product != null && item.nums > 0) { var stock = 0; if (entity.model.type == (int)GlobalEnumVars.StockType.In) { stock = product.stock + item.nums; } else if (entity.model.type == (int)GlobalEnumVars.StockType.Out) { stock = product.stock - item.nums; if (stock < 0) { jm.msg = $"第{index}个货品最大出库数量为:" + product.stock; return jm; } } else if (entity.model.type == 3) { stock = product.stock - item.nums; if (stock < 0) { jm.msg = $"第{index}个货品最大出库数量为:" + product.stock; return jm; } } product.nums = item.nums; product.stock = stock; products.Add(product); var log = new CoreCmsStockLog { stockId = stockModel.id, productId = product.id, goodsId = product.goodsId, nums = item.nums, sn = product.sn, bn = product.barcode, goodsName = product.name, spesDesc = product.spesDesc, createTime = DateTime.Now }; logs.Add(log); } else { jm.msg = $"请检查第{index}个货品或数量是否正确"; return jm; } } try { _unitOfWork.BeginTran(); var bl = await DbClient.Insertable(stockModel).ExecuteCommandAsync() > 0; if (products.Any()) { await DbClient.Updateable(products).ExecuteCommandAsync(); } if (logs.Any()) { await DbClient.Insertable(logs).ExecuteCommandAsync(); } //铺货 if (entity.model.type == 3) { if (products.Any() && distribution != null) { foreach (var products1 in products) { var puhuo = await DbClient.Queryable().Where(x => x.isdelete == false && x.productsId == products1.id && x.distributionId == entity.model.distributionId).FirstAsync(); if (puhuo != null) { puhuo.nums = puhuo.nums + products1.nums; puhuo.price = products1.distributionPrice; puhuo.amount = products1.distributionPrice * new decimal(puhuo.nums); puhuo.isdelete = false; //entity.createBy = username; puhuo.upDataBy = username; //entity.createTime = DateTime.Now; puhuo.upDataTime = DateTime.Now; await DbClient.Updateable(puhuo).ExecuteCommandAsync(); } else { puhuo = new Puhuo(); puhuo.distributionId = entity.model.distributionId; puhuo.distributionName = distribution.name; puhuo.areaCode = distribution.areaCode; puhuo.areaCodeName = distribution.areaName; puhuo.CategoryId = products1.CategoryID??0; //获取全部数据缓存 var categorie = await DbClient.Queryable().Where(x => x.id == puhuo.CategoryId).FirstAsync(); ; if (categorie != null) { puhuo.CategoryName = categorie.name; } puhuo.goodsId = products1.goodsId; puhuo.goodsName = products1.name; puhuo.productsId = products1.id; puhuo.productsName = products1.sn; puhuo.spesDesc = products1.spesDesc; puhuo.shoukuannums = 0; puhuo.shoukuanamount = 0; puhuo.nums = puhuo.nums + products1.nums; puhuo.price = products1.distributionPrice; puhuo.amount = products1.distributionPrice * new decimal(puhuo.nums); puhuo.isdelete = false; puhuo.createBy = username; puhuo.upDataBy = username; puhuo.createTime = DateTime.Now; puhuo.upDataTime = DateTime.Now; await DbClient.Insertable(puhuo).ExecuteCommandAsync(); } } } } jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure; _unitOfWork.CommitTran(); } catch (Exception e) { _unitOfWork.RollbackTran(); jm.code = 1; jm.msg = "处理异常"; jm.data = e; } return jm; } #endregion #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// 是否使用WITH(NOLOCK) /// public async Task> QueryPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false) { RefAsync totalCount = 0; List page; if (blUseNoLock) { page = await DbClient.Queryable((p, sUser) => new JoinQueryInfos( JoinType.Left, p.manager == sUser.id)) .Select((p, sUser) => new CoreCmsStock { id = p.id, type = p.type, manager = p.manager, memo = p.memo, createTime = p.createTime, managerName = sUser.nickName }) .With(SqlWith.NoLock) .MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .WhereIF(predicate != null, predicate) .ToPageListAsync(pageIndex, pageSize, totalCount); } else { page = await DbClient.Queryable((p, sUser) => new JoinQueryInfos(JoinType.Left, p.manager == sUser.id)) .Select((p, sUser) => new CoreCmsStock { id = p.id, type = p.type, manager = p.manager, memo = p.memo, createTime = p.createTime, managerName = sUser.nickName }) .MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .WhereIF(predicate != null, predicate) .ToPageListAsync(pageIndex, pageSize, totalCount); } var list = new PageList(page, pageIndex, pageSize, totalCount); return list; } #endregion /// /// 生成唯一单号 /// /// /// public async Task CreateCode(string type) { Random rand = new Random(); while (true) { var str = string.Empty; if (type == GlobalEnumVars.StockType.In.ToString()) { str = "sI"; } else if (type == GlobalEnumVars.StockType.Out.ToString()) { str = "sO"; } else { str = "sU"; } str += CommonHelper.Msectime() + rand.Next(0, 9); var bl = await DbClient.Queryable().AnyAsync(p => p.id == str); if (bl == false) { return str; } } } } }