|
- using BPA.Franchisee.Application.FranchiseeCenter.GoodsServices;
- using BPA.SAAS.Manage.Application.DataBase.Dtos.Batching;
- using BPA.SAAS.Manage.Application.DataBase.Dtos.Bom;
- using BPA.SAAS.Manage.Application.DataBase.Dtos.Goods;
- using BPA.SAAS.Manage.Application.DataBase.Dtos.GoodsAttribute;
- using BPA.SAAS.Manage.Application.DataBase.Interface;
- using BPA.SAAS.Manage.Application.System.Dtos;
- using BPA.SAAS.Manage.Application.System.Interface;
- using BPA.SAAS.Manage.Application.System.Services;
- using BPA.SAAS.Manage.Comm.Const;
- using BPA.SAAS.Manage.Comm.Enum;
- using BPA.SAAS.Manage.Comm.Util;
- 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 Furion.ClayObject.Extensions;
- using Newtonsoft.Json;
- using Npoi.Mapper;
- using NPOI.HSSF.UserModel;
- using NPOI.SS.UserModel;
- using NPOI.SS.Util;
- using NPOI.XSSF.UserModel;
- using Org.BouncyCastle.Asn1.Cms;
- using System;
- using System.Collections;
- using System.ComponentModel.DataAnnotations.Schema;
- using System.Data;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace BPA.SAAS.Manage.Application.DataBase.Services
- {
- public class GoodsService: IGoodsService, ITransient
- {
- private readonly ISqlSugarClient _db;
- IGoodsAttributeService _goodsAttributeService;
- ISystemConfigService _SystemConfigService;
- public GoodsService(ISqlSugarClient db, IGoodsAttributeService goodsAttributeService, ISystemConfigService SystemConfigService)
- {
- _db=db;
- _goodsAttributeService=goodsAttributeService;
- _SystemConfigService = SystemConfigService;
- }
- /// <summary>
- /// 分页查询
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- public async Task<PageUtil> GetGoodsPage(GoodsQueryDto dto)
- {
- List<IConditionalModel> conModels = new List<IConditionalModel>();
- #region 条件查询
- if (!string.IsNullOrEmpty(dto.Name))
- {
- conModels.Add(new ConditionalModel() { FieldName = "a.Name", ConditionalType = ConditionalType.Like, FieldValue = dto.Name });
- }
-
- if (!string.IsNullOrEmpty(dto.GoodsTypeName))
- {
- conModels.Add(new ConditionalModel() { FieldName = "a.GoodsTypeId", ConditionalType = ConditionalType.Equal, FieldValue = dto.GoodsTypeName });
- }
-
- if (!string.IsNullOrEmpty(dto.Status))
- {
- conModels.Add(new ConditionalModel() { FieldName = "a.Status", ConditionalType = ConditionalType.Like, FieldValue = dto.Status });
- }
- if (!string.IsNullOrEmpty(dto.Descritption))
- {
- conModels.Add(new ConditionalModel() { FieldName = "a.Descritption", ConditionalType = ConditionalType.Like, FieldValue = dto.Descritption });
- }
- #endregion
-
- RefAsync<int> total = 0;
- var res =await _db.Queryable<BPA_GoodsInfo, BPA_GoodsType>((a, b) => new JoinQueryInfos(
- JoinType.Left, a.GoodsTypeId == b.Id
- ))
- .WhereIF(!string.IsNullOrWhiteSpace(dto.Code), (a, b) => a.Code.Contains(dto.Code))
- // .WhereIF(dto.CreateAt.HasValue, (a, b) => SqlFunc.DateIsSame(a.CreateAt, Convert.ToDateTime(dto.CreateAt), DateType.Day))
-
- .Where(conModels)
- .OrderBy(a => a.CreateAt, OrderByType.Desc)
- .Select((a, b) => new
- {
- Id = a.Id,
- Code = a.Code,
- Name = a.Name,
- Price = a.Price,
- ImgUrl = a.ImgUrl,
- Status = a.Status,
- GoodsTypeId = b.IsDeleted == 0 ? a.GoodsTypeId : "",
- GoodsTypeName = b.IsDeleted == 0 ? b.Name : "",
- Descritption = a.Descritption,
- IsDeleted = a.IsDeleted,
- a.GroupId,
- // CreateAt = a.CreateAt,
- GoodsUintId = a.GoodsUintId,
- ForeignKeyRe = a.ForeignKeyRe,
- Design = a.Design,
- IsWeigh = a.IsWeigh,
- DefaultMate = a.DefaultMate,
- IsAttrubute = a.IsAttrubute,
- Goodstechnology = SqlFunc.Subqueryable<BPA_GoodsTechnologyAction>().Where(p => p.GoodsId == a.Id).WhereIF(!string.IsNullOrWhiteSpace(dto.DeviceId),p=>p.DeviceId== dto.DeviceId).ToList(),
- })
-
- .ToPageListAsync(dto.Current, dto.PageSize, total);
- PageUtil util = new PageUtil()
- {
- Total = total,
- Data = res
- };
- return util;
- }
-
- /// <summary>
- /// 查询所有商品
- /// </summary>
- /// <returns></returns>
- public async Task<List<BPA_GoodsInfo>> GetGoodsList()
- {
- var res = await _db.Queryable<BPA_GoodsInfo>().ToListAsync();
- return res;
- }
- /// <summary>
- /// 添加商品
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- public async Task<bool> AddGoods(GoodsDto dto)
- {
- if (string.IsNullOrWhiteSpace(dto.Id))
- {
- var resEntity = new BPA_GoodsInfo();
- resEntity.Id = Guid.NewGuid().ToString();
- resEntity.GoodsTypeId = dto.GoodsTypeId;
- resEntity.Name = dto.Name;
- resEntity.Descritption = dto.Descritption;
- resEntity.ImgUrl = dto.ImgUrl;
- resEntity.Price = dto.Price;
- resEntity.IsWeigh = dto.IsWeigh;
- resEntity.GoodsUintId = dto.GoodsUintId;
- resEntity.IsAttrubute = dto.IsAttrubute;
- resEntity.Code = GetNumber2(8);
- var data = _db.Queryable<BPA_GoodsInfo>().Max(x => x.AutoKey);
- //if (data == 0) data = 1000;
- //else data = data + 1;
- // resEntity.AutoKey = data;
- var res = await _db.Insertable(resEntity).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- return res > 0;
- }
- else
- {
- return await UpdateGoods(dto);
- }
-
- }
-
- /// <summary>
- /// 更新商品
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- public async Task<bool> UpdateGoods(GoodsDto dto)
- {
- // 查询数据库中是否存在未删除的商品类型
- var resEntity = _db.Queryable<BPA_GoodsInfo>().Where(it => it.IsDeleted == 0).First(it => it.Id == dto.Id);
- if (null == resEntity)
- {
- throw Oops.Oh("商品不存在");
- }
- resEntity.GoodsTypeId = dto.GoodsTypeId;
- resEntity.Name = dto.Name;
- resEntity.Descritption = dto.Descritption;
- resEntity.ImgUrl = dto.ImgUrl;
- resEntity.Price = dto.Price;
- resEntity.IsWeigh = dto.IsWeigh;
- resEntity.GoodsUintId = dto.GoodsUintId;
- resEntity.IsAttrubute = Convert.ToBoolean(dto.IsAttrubute);
- if (!string.IsNullOrWhiteSpace(dto.Status))
- {
- resEntity.Status = (CommonStatus)Enum.ToObject(typeof(CommonStatus), int.Parse(dto.Status));
- }
-
- var res = await _db.Updateable(resEntity).ExecuteCommandAsync();
- return res > 0;
- }
- /// <summary>
- /// 删除商品
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public async Task<bool> DeleteGoods(string id)
- {
- try
- {
- _db.Ado.BeginTran();
- var goods = _db.Queryable<BPA_GoodsInfo>().Where(x => x.Id == id).First();
- if (goods == null) throw Oops.Oh("商品不存在");
- var goodsbom = _db.Queryable<BPA_GoodsBom>().Where(x => x.Goods_Id == id).ToList();
- var goodsTechnology = _db.Queryable<BPA_GoodsTechnologyAction>().Where(x => x.GoodsId == id).ToList();
- //var FoodMenuGoods = _db.Queryable<BPA_FoodMenuGoods>().Where(x => x.GoodsId == id).ToList();
- await _db.Deleteable(goodsbom).ExecuteCommandAsync();
- await _db.Deleteable(goodsTechnology).ExecuteCommandAsync();
- //await _db.Deleteable(FoodMenuGoods).ExecuteCommandAsync();
- var res = await _db.Deleteable(goods).ExecuteCommandAsync();
- _db.Ado.CommitTran();
- return res > 0;
- }
- catch (Exception)
- {
- _db.Ado.RollbackTran();
- throw Oops.Oh("删除失败");
- }
-
- }
- /// <summary>
- /// 查询商品单位
- /// </summary>
- /// <returns></returns>
- public async Task<List<dynamic>> GetGoodsUintList()
- {
- var res = await _db.Queryable<BPA_GoodsUint>().Select<dynamic>(x => new
-
- {
- id = x.Id,
- name = x.Name
- }).ToListAsync();
- return res;
- }
- public async Task<List<dynamic>> GetGoodsUintList_alm()
- {
- var groupId = App.HttpContext.Request.Headers["groupId"].ToString();
- if (string.IsNullOrWhiteSpace(groupId)) throw Oops.Oh("加盟商id不能为空");
- var res = await _db.Queryable<BPA_GoodsUint>().Where(x=>x.GroupId== groupId).Select<dynamic>(x => new
-
- {
- id = x.Id,
- name = x.Name
- }).ToListAsync();
- return res;
- }
- /// <summary>
- /// 添加商品单位
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- public async Task<bool> AddGoodsUint(GoodsUintDto dto)
- {
- var productCode = _db.Queryable<BPA_GoodsUint>().Where(x =>x.Name == dto.Name).ToList();
- if (productCode.Count() > 0)
- {
- throw Oops.Oh("商品单位已存在");
- }
- try
- {
- BPA_GoodsUint bPA_Product = new BPA_GoodsUint();
- bPA_Product.Name = dto.Name;
- var res = await _db.Insertable(bPA_Product).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- return res > 0;
- }
- catch (Exception ex)
- {
- throw Oops.Oh("添加失败");
- }
- }
- /// <summary>
- /// 商品配方
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- public async Task<PageUtil> GetGoodsBomPageAsync(GoodsBomQueryDto dto)
- {
- RefAsync<int> total = 0;
- var res =await _db.Queryable<BPA_Bom, BPA_BomAttributeValueRe>((a, b) => new JoinQueryInfos(
- JoinType.Left, a.Id == b.BoomId
- ))
- .WhereIF(!string.IsNullOrWhiteSpace(dto.GoodsId), (a, b) => b.GoodsId==dto.GoodsId)
- .WhereIF(!string.IsNullOrWhiteSpace(dto.Name), (a, b) => a.Name.Contains(dto.Name))
- .WhereIF(!string.IsNullOrWhiteSpace(dto.GoodsAttributeValue), (a, b) => b.GoodsAttributeValue.Contains(dto.GoodsAttributeValue))
- .Select((a, b) => new GoodsBomPageView
- {
- Id = b.Id,
- Name = a.Name,
- BomId= b.BoomId,
- IsMain = a.IsMain,
- GoodsAttributeValueId=b.GoodsAttributeValueId,
- GoodsAttributeValue=b.GoodsAttributeValue,
- })
- .ToPageListAsync(dto.Current, dto.PageSize, total);
- PageUtil util = new PageUtil()
- {
- Total = total,
- Data = res
- };
- return util;
- }
- /// <summary>
- /// 删除商品配方
- /// </summary>
- /// <param name="Ids"></param>
- /// <returns></returns>
- public async Task<bool> BatchDelGoodsBomAsync(string Ids)
- {
- // var GoodsBom=_db.Queryable<BPA_GoodsBom>().Where(x => x.Id == Ids).First();
- var model=_db.Queryable<BPA_BomAttributeValueRe>().Where(x => x.Id == Ids).First();
- if(model==null) throw Oops.Oh("配方不存在");
- _db.Deleteable<BPA_GoodsBom>().Where(x => x.Goods_Id == model.GoodsId && x.BomId== model.BoomId).ExecuteCommand();
- // 查询数据库中是否存在未删除的商品
- var res = _db.Deleteable<BPA_BomAttributeValueRe>().In(Ids).ExecuteCommand();
- return res > 0;
- }
- /// <summary>
- /// 添加商品配方
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- public async Task<bool> AddGoodsBomAttribute(GoodsBomAttributeDto dto)
- {
- _db.Ado.BeginTran();
- try
- {
- if(dto.Type== "add")
- {
- var sortMax = _db.Queryable<BPA_Bom>().Max(x => x.Sort);
- BPA_Bom newbPA_BOM = new BPA_Bom
- {
- Name = dto.BomName,
- Code = GetNumber2(),
- IsMain = dto.BomType == "1" ? true : false,
- Sort = sortMax + 1,
- Id = Guid.NewGuid().ToString(),
- CreateAt = DateTime.Now,
- Status = CommonStatus.ENABLE,
- };
- //添加配方
- var res = _db.Insertable(newbPA_BOM).CallEntityMethod(m => m.Create()).ExecuteCommand();
- //添加配方分类
- var list = dto.BomtypeList.Select(item => new BPA_BomTypeInfo() { BomId = newbPA_BOM.Id, BomTypeId = item }).ToList();
- _db.Insertable(list).CallEntityMethod(m => m.Create()).ExecuteCommand();
-
- BPA_GoodsBom bom = new BPA_GoodsBom();
- bom.Goods_Id = dto.GoodsId;
- bom.BomId = newbPA_BOM.Id;
- bom.Status = CommonStatus.ENABLE;
- //添加商品配方关系
- _db.Insertable(bom).CallEntityMethod(m => m.Create()).ExecuteCommand();
- List<BPA_BomEntry> BOMEntryList = new();
- if (dto.Mate.Count > 0)
- {
- for (int i = 0; i < dto.Mate.Count; i++)
- {
- BPA_BomEntry newbPA_BOMEnty = new BPA_BomEntry
- {
- BatchingId = dto.Mate[i].batchingId,
- //BatchingKey = dto.Mate[i].AutoKey,
- BomQty = dto.Mate[i].dosage,
- BomId = newbPA_BOM.Id,
- Status = CommonStatus.ENABLE,
- IsReplace = false,
- };
- BOMEntryList.Add(newbPA_BOMEnty);
- }
- }
- //添加配方物料关系
- _db.Insertable(BOMEntryList).CallEntityMethod(m => m.Create()).ExecuteCommand();
- BPA_BomAttributeValueRe bPA_BomAttributeValueRe = new();
- bPA_BomAttributeValueRe.Id = Guid.NewGuid().ToString();
- bPA_BomAttributeValueRe.GoodsId = dto.GoodsId;
- bPA_BomAttributeValueRe.BoomId = newbPA_BOM.Id;
- bPA_BomAttributeValueRe.GoodsAttributeValueId = string.Join(",", dto.Shuxing);
- bPA_BomAttributeValueRe.GoodsAttributeValue = dto.GoodsAttributeValue;
- //添加商品配方属性关系
- _db.Insertable(bPA_BomAttributeValueRe).ExecuteCommand();
- }
- else
- {
- if (string.IsNullOrWhiteSpace(dto.BomId)) throw Oops.Oh("请选择配方");
- if (!string.IsNullOrWhiteSpace(dto.BomId))
- {
- var check=_db.Queryable<BPA_GoodsBom>().Where(x => x.Goods_Id == dto.GoodsId && x.BomId == dto.BomId).Any();
- if (!check)
- {
- BPA_GoodsBom bom = new BPA_GoodsBom();
- bom.Goods_Id = dto.GoodsId;
- bom.BomId = dto.BomId;
- bom.Status = CommonStatus.ENABLE;
- //添加商品配方关系
- _db.Insertable(bom).CallEntityMethod(m => m.Create()).ExecuteCommand();
- }
- string vid = string.Join(",", dto.Shuxing);
- var checkvid = _db.Queryable<BPA_BomAttributeValueRe>().Where(x => x.GoodsId == dto.GoodsId && x.BoomId == dto.BomId && x.GoodsAttributeValueId== vid).Any();
- if(checkvid) throw Oops.Oh("该配方已经存在");
- //添加商品配方属性关系
- BPA_BomAttributeValueRe bPA_BomAttributeValueRe = new();
- bPA_BomAttributeValueRe.Id = Guid.NewGuid().ToString();
- bPA_BomAttributeValueRe.GoodsId = dto.GoodsId;
- bPA_BomAttributeValueRe.BoomId = dto.BomId;
- bPA_BomAttributeValueRe.GoodsAttributeValueId = vid;
- bPA_BomAttributeValueRe.GoodsAttributeValue = dto.GoodsAttributeValue;
- _db.Insertable(bPA_BomAttributeValueRe).ExecuteCommand();
- }
-
- }
- _db.Ado.CommitTran();
- return true;
- }
- catch (Exception e)
- {
- _db.Ado.RollbackTran();
- throw Oops.Oh("添加失败,失败信息:" + e.Message);
- }
- }
- public async Task<bool> AddGoodsBom(GoodsBomDto dto)
- {
- var res = false;
- List<BPA_GoodsBom> list = new();
- if (dto.BomId.Count() > 0)
- {
- for (int i = 0; i < dto.BomId.Count; i++)
- {
- BPA_GoodsBom goodsBom = new();
- goodsBom.BomId = dto.BomId[i];
- goodsBom.Goods_Id= dto.GoodsId;
- goodsBom.Status = CommonStatus.ENABLE;
- list.Add(goodsBom);
- }
- }
- if (list.Count>0)
- {
- res=await _db.Insertable(list).CallEntityMethod(m => m.Create()).ExecuteCommandAsync()>0;
- }
- return res;
- }
- /// <summary>
- /// 根据id查询商品信息
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public async Task<GoodsInfoBaseView> GetGoods(string id)
- {
- var res = await _db.Queryable<BPA_GoodsInfo>()
- .Where((a) => a.IsDeleted == 0 && a.Id == id)
- .OrderBy(a => a.CreateAt, OrderByType.Desc)
- .Select((a) => new GoodsInfoBaseView
- {
- Id = a.Id,
- Code = a.Code,
- Name = a.Name,
- Price = a.Price,
- ImgUrl = a.ImgUrl,
- Status = a.Status,
- GoodsTypeId = a.GoodsTypeId,
- GoodsTypeName = SqlFunc.Subqueryable<BPA_GoodsType>().Where(s => s.Id == a.GoodsTypeId && s.IsDeleted == 0).Select(s => s.Name),
- Remark = a.Descritption,
- // CreateAt = a.CreateAt,
- GoodsUintId = a.GoodsUintId,
- IsAttrubute = a.IsAttrubute,
- GoodsUintName = SqlFunc.Subqueryable<BPA_GoodsUint>().Where(s => s.Id == a.GoodsUintId && s.IsDeleted == 0).Select(s => s.Name),
- //GoodsAttributeList = new List<GoodsAttributeList>()
- }).FirstAsync();
- if (res!=null&&!res.IsAttrubute)
- {
- res.GoodsAttributeList = await _goodsAttributeService.GetByNameAttribute("默认属性");
- }
- else
- {
- res.GoodsAttributeList = await _goodsAttributeService.GetByGoodsIdAttribute(res.Id);
- }
-
- return res;
- }
-
- /// <summary>
- /// 更具id查询商品信息
- /// </summary>
- /// <param name="ids"></param>
- /// <returns></returns>
- public async Task<List<GoodsInfoBaseView>> GetGoodsListByIds(List<string> ids)
- {
- var res = await _db.Queryable<BPA_GoodsInfo>()
- .Where((a) => a.IsDeleted == 0 && ids.Contains(a.Id))
- .OrderBy(a => a.CreateAt, OrderByType.Desc)
- .Select((a) => new GoodsInfoBaseView
- {
- Id = a.Id,
- Code = a.Code,
- Name = a.Name,
- Price = a.Price,
- ImgUrl = a.ImgUrl,
- Status = a.Status,
- GoodsTypeId = a.GoodsTypeId,
- GoodsTypeName = SqlFunc.Subqueryable<BPA_GoodsType>().Where(s => s.Id == a.GoodsTypeId && s.IsDeleted == 0).Select(s => s.Name),
- Remark = a.Descritption,
- // CreateAt = a.CreateAt,
- GoodsUintId = a.GoodsUintId,
- IsAttrubute = a.IsAttrubute,
- GoodsUintName = SqlFunc.Subqueryable<BPA_GoodsUint>().Where(s => s.Id == a.GoodsUintId && s.IsDeleted == 0).Select(s => s.Name),
- //GoodsAttributeList = new List<GoodsAttributeList>()
- }).ToListAsync();
-
- foreach (var item in res)
- {
- if (!item.IsAttrubute)
- {
- item.GoodsAttributeList = await _goodsAttributeService.GetByNameAttribute("默认属性");
- }
- else
- {
- item.GoodsAttributeList = await _goodsAttributeService.GetByGoodsIdAttribute(item.Id);
- }
- }
-
- return res;
- }
-
- public async Task<bool> ExportGood(IFormFile file)
- {
- bool isReplace = true;
- try
- {
-
- //var groupId = string.IsNullOrWhiteSpace(CurrentUser.TenantId)
- //? App.User?.FindFirst(ClaimConst.GroupId)?.Value
- // : CurrentUser.TenantId;
- var userId = App.User?.FindFirst(ClaimConst.CLAINM_USERID)?.Value;
- if (string.IsNullOrEmpty(userId))
- {
- userId = "";
- }
- var source = file.OpenReadStream();
- var mapper = new Mapper(source);
- _db.Ado.BeginTran();
- //添加 商品_物料信息
- #region 添加 商品_物料信息
-
- //1.查询并且添加类型
- var nonLiquid = await _db.Queryable<BPA_BatchingType>()
- .Where(x => x.Name == "非液体" ).FirstAsync();
- if (nonLiquid == null)
- {
- nonLiquid = new BPA_BatchingType()
- {
- IsDeleted = 0,
- Name = "非液体",
- };
- await _db.Insertable(nonLiquid).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
- var liquid = await _db.Queryable<BPA_BatchingType>()
- .Where(x => x.Name == "液体料").FirstAsync();
- if (liquid == null)
- {
- liquid = new BPA_BatchingType
- {
- IsDeleted = 0,
- Name = "液体料",
- };
- await _db.Insertable(liquid).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
-
- //单位
- var unit = await _db.Queryable<BPA_BatchingUint>().Where(x => x.Name == "默认单位").FirstAsync();
- if (unit == null)
- {
- unit = new BPA_BatchingUint
- {
- IsDeleted = 0,
- Name = "默认单位",
- };
- await _db.Insertable(unit).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
-
- //3.物料
- ReadExcel<BatchingModel> readGoodBaseModelExcel = new();
- var GoodBaseModellist = readGoodBaseModelExcel.ExcelToList(source, mapper, "商品_物料信息");
- List<BPA_Batching> batchingList = GoodBaseModellist.Select(t => new BPA_Batching()
- {
- Aittribute = 0,
- Batching_Name = t.BatchingName,
- Code = GetNumber2(),
- IsDeleted = 0,
- netrecovery = 0,
- outstockUint = unit.Id,
- Price = 0,
- proportion = 0,
- Specs = "默认规格",
- Status = 0,
- StockUint = unit.Id,
- TypeID = t.BatchingType == "液体料" ? liquid.Id : nonLiquid.Id,
- }).ToList();
-
- var batchingNameList = batchingList.Select(x => x.Batching_Name).ToList();
-
- var batchingListrDb = _db.Queryable<BPA_Batching>().Where(x => batchingNameList.Contains(x.Batching_Name))
- .ToList();
-
- //替换
- if (isReplace)
- {
-
- foreach (var item2 in batchingList)
- {
- var thisitem = batchingListrDb.FirstOrDefault(x => x.Batching_Name == item2.Batching_Name);
- if (thisitem != null)
- {
- item2.Id = thisitem.Id;
- item2.GroupId = thisitem.GroupId;
- item2.CreateBy = string.IsNullOrEmpty(item2.CreateBy) ? "" : item2.CreateBy;
- _db.Updateable(item2).ExecuteCommand();
- }
- else
- {
- _db.Insertable(item2).CallEntityMethod(m => m.Create()).ExecuteCommand();
- }
- }
- }
- else
- {
- var batchingListrDbName = batchingListrDb.Select(x => x.Batching_Name).ToList();
- batchingList = batchingList.Where(x => !batchingListrDbName.Contains(x.Batching_Name)).ToList();
- await _db.Insertable(batchingList).ExecuteCommandAsync();
- }
-
- #endregion
-
-
- //添加 商品_基础信息
- #region 添加 商品_基础信息
-
- //1.查询大分类 和小分类
- var type = new BPA_GoodsType();
- var parentType = await _db.Queryable<BPA_GoodsType>()
- .Where(x => x.Name == "默认分类" && x.GroupId == x.GroupId).FirstAsync();
- if (parentType == null)
- {
- parentType = new BPA_GoodsType()
- {
- IsDeleted = 0,
- Name = "默认分类",
- Remark = "",
- Sort = 0,
- Status = 0,
- Pid="0"
- };
-
- type=await _db.Insertable(parentType).CallEntityMethod(m => m.Create()).ExecuteReturnEntityAsync();
- parentType = type;
- }
- //属性
- var goodsAttribute = await _db.Queryable<BPA_GoodsAttribute>()
- .Where(x => x.AttributeName == "默认属性" ).FirstAsync();
- if (goodsAttribute == null)
- {
- goodsAttribute = new BPA_GoodsAttribute()
- {
- AttributeName = "默认属性",
- GoodsTypeId = parentType.Id,
- IsDeleted = 0,
- Sort = 0,
-
- };
- _db.Insertable(goodsAttribute).CallEntityMethod(m => m.Create()).ExecuteCommand();
- }
-
- var goodsattributevalue = await _db.Queryable<BPA_GoodsAttributeValue>()
- .FirstAsync(x => x.AttributeValue == "默认属性值" && x.GoodsAttributeId == goodsAttribute.Id && x.IsDeleted == 0);
- if (goodsattributevalue == null)
- {
- goodsattributevalue = new BPA_GoodsAttributeValue()
- {
- AttributeValue = "默认属性值",
- GoodsAttributeId = goodsAttribute.Id,
- IsDeleted = 0,
- Sort = 1,
- };
- _db.Insertable(goodsattributevalue).CallEntityMethod(m => m.Create()).ExecuteCommand();
- }
-
-
- ReadExcel<GoodModel> readGoodModelExcel = new();
- var oodModellist = readGoodModelExcel.ExcelToList(source, mapper, "商品_基础信息");
- List<BPA_GoodsInfo> goodsInfo = new List<BPA_GoodsInfo>();
- int index = 1;
- foreach (var item in oodModellist.Where(x => !string.IsNullOrEmpty(x.Name)))
- {
- //单位
- var goodsUint = await _db.Queryable<BPA_GoodsUint>().Where(x => x.Name == "默认单位").FirstAsync();
- if (goodsUint == null)
- {
- goodsUint = new BPA_GoodsUint()
- {
- IsDeleted = 0,
- Name = "默认单位",
- Status = 0,
- };
- await _db.Insertable(goodsUint).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
- Console.WriteLine("数据解析完成,开始解析图片");
- var images = await ExcelToDatatable(file.OpenReadStream(), Path.GetExtension(file.FileName), "商品_基础信息");
- var imagePath = images.FirstOrDefault(x => x.Index == index);
- goodsInfo.Add(new BPA_GoodsInfo()
- {
- Code = GetNumber2(),
- CreateAt = DateTime.Now,
- CreateBy = userId,
- DefaultMate = null,
- Design = "默认规格",
- ForeignKeyRe = null,
- GoodsUintId = goodsUint.Id,
- Descritption = "",
- ImgMode = 0,
- ImgUrl = imagePath?.ImgesPath,
- Name = item.Name,
- Sort = 0,
- GoodsTypeId = parentType.Id,
- Price = 0,
- IsAttrubute = false,
- IsDeleted = 0,
- IsWeigh = false,
- Key = null,
- Status = 0,
- });
- index++;
- }
-
- var ngoodsInfoName = goodsInfo.Select(x => x.Name).ToList();
- var goodsInfoListDb = _db.Queryable<BPA_GoodsInfo>().Where(x => ngoodsInfoName.Contains(x.Name)).ToList();
- //替换
- if (isReplace)
- {
-
- foreach (var item2 in goodsInfo)
- {
- var thisitem = goodsInfoListDb.FirstOrDefault(x => x.Name == item2.Name);
-
- if (thisitem != null)
- {
- item2.Id = thisitem.Id;
- item2.AutoKey = thisitem.AutoKey;
- item2.GroupId= thisitem.GroupId;
- _db.Updateable(item2).ExecuteCommand();
- }
- else
- {
- await _db.Insertable(item2).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
- }
- }
- else
- {
- var goodsInfoListDbName = goodsInfoListDb.Select(x => x.Name).ToList();
- goodsInfo = goodsInfo.Where(x => !goodsInfoListDbName.Contains(x.Name)).ToList();
- await _db.Insertable(goodsInfo).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
-
-
-
-
- #endregion
-
- //添加设备商品仓位
- #region 添加设备商品仓位
-
- ReadExcel<DeviceGoodsPositionModel> deviceGoodsPositionModelExcel = new();
- var deviceGoodsPosition = deviceGoodsPositionModelExcel.ExcelToList(source, mapper, "设备物料仓位");
-
- var _deviceNames = deviceGoodsPosition.Select(x => x.DeviceName).ToList();
- var _goodsName = deviceGoodsPosition.Select(x => x.GoodsName).Distinct().ToList();
-
- var _deviceList = _db.Queryable<BPA_DeviceInfo>()
- .Where(x => _deviceNames.Contains(x.DeviceName))
- .ToList();
-
- var _goodsNameList = _db.Queryable<BPA_GoodsInfo>()
- .Where(x => _goodsName.Contains(x.Name))
- .ToList();
-
- var deviceGoodsPositionList = new List<BPA_DeviceGoodsPosition>();
-
- foreach (var item in deviceGoodsPosition)
- {
- var thisDevice = _deviceList.FirstOrDefault(x => x.DeviceName == item.DeviceName);
- var thisGoods = _goodsNameList.FirstOrDefault(x => x.Name == item.GoodsName);
-
- deviceGoodsPositionList.Add(new BPA_DeviceGoodsPosition()
- {
- DeviceId = thisDevice?.Id,
- GoodsId = thisGoods?.Id,
- Id = Guid.NewGuid().ToString(),
- Position1 = item.Position1,
- Position2 = item.Position2,
- Position3 = item.Position3,
- Position4 = item.Position4,
- });
- }
-
- var deviceGoodsPositionListDb = _db.Queryable<BPA_DeviceGoodsPosition>().ToList();
- foreach (var item in deviceGoodsPositionList)
- {
- var dGPDb = deviceGoodsPositionListDb.FirstOrDefault(x => x.DeviceId == item.DeviceId && x.GoodsId == x.GoodsId);
- if (dGPDb != null)
- {
- item.Id = dGPDb.Id;
- await _db.Updateable(item).ExecuteCommandAsync();
- }
- else
- {
- await _db.Insertable(item).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
-
- }
-
- #endregion
-
-
- //添加 功能_{商品名称}
- var tableName = ExcelToShtteName(file.OpenReadStream(), Path.GetExtension(file.FileName));
-
- #region 添加 工艺_{商品名称}
-
- foreach (var name in tableName)
- {
- var nameList = name.Split('_');
-
- //查询设备
- var name1 = nameList[1];
- var name2 = nameList[2];
- var device = await _db.Queryable<BPA_DeviceInfo>().FirstAsync(x => x.DeviceName == name1 && x.IsDeleted == 0);
- if (device == null)
- {
- throw Oops.Oh(nameList + " 设备【" + nameList[1] + "】不存在");
- }
-
- ReadExcel<GoodTechnologyModel> goodTechnologyModelExcel = new();
- var goodTechnologyModel = goodTechnologyModelExcel.ExcelToList(source, mapper, name);
- var goodstechnologyactionDto = new List<GoodsTechnologyActionDto>();
- var cName = "";
- var info = new List<ActionJson>();
- var namestr = nameList[2];
- var goods = await _db.Queryable<BPA_GoodsInfo>().Where(x => x.Name == namestr).FirstAsync();
- var goodsId = goods == null ? "" : goods.Id;
- _db.Deleteable<BPA_GoodsTechnologyAction>().Where(x => x.GoodsId == goodsId).ExecuteCommand();
- var goodTechnologyIndex = 0;
- for (int i = 0; i < goodTechnologyModel.Count; i++)
- {
-
- var thisName = goodTechnologyModel[i].Name == null ? cName : goodTechnologyModel[i].Name;
-
- var data = await _db.Queryable<BPA_Technology>()
- .Where(x => x.Name == thisName && x.DeviceVersionId == device.ProductVersionId).FirstAsync();
- if (data == null) throw Oops.Oh("该设备还没有设置工艺基础信息");
- var data2 = await _db.Queryable<BPA_TechnologyAction>()
- .Where(x => x.ActionName == goodTechnologyModel[i].Configuration && x.TechnologyId == data.Id).FirstAsync();
- var batching = new BPA_Batching();
- var IsBatch = goodTechnologyModel[i].Name != "液体料";
-
- if (!string.IsNullOrEmpty(goodTechnologyModel[i].Name))
- {
-
- goodTechnologyIndex++;
- cName = goodTechnologyModel[i].Name;
- GoodsTechnologyActionDto item = new GoodsTechnologyActionDto()
- {
- ActionJson = "",
- ChnologyId = data?.Id,
- GoodsAttributeId = goodsattributevalue.Id,
- GoodsId = goods?.Id,
- IsBatch = IsBatch,
- IsDeleted = 0,
- Sort = goodTechnologyIndex,
- DeviceId = device?.Id,
- StepName = goodTechnologyModel[i].Name,
- Index = goodTechnologyIndex.ToString(),
-
- };
- info.Add(new ActionJson
- {
- chnologyId = data?.Id,
- actionName = goodTechnologyModel[i].Configuration,
- actionValue = goodTechnologyModel[i].Value,
- technologyactionId = !IsBatch ? batching.Id : data2?.Id,
- index = goodTechnologyIndex.ToString(),
- });
- goodstechnologyactionDto.Add(item);
- }
- else
- {
- info.Add(new ActionJson
- {
- chnologyId = data?.Id,
- actionName = goodTechnologyModel[i].Configuration,
- actionValue = goodTechnologyModel[i].Value,
- technologyactionId = !IsBatch ? batching.Id : data2?.Id,
- index = goodTechnologyIndex.ToString(),
- }); ;
- }
- }
- foreach (var thisItem in goodstechnologyactionDto)
- {
-
- var json = info.Where(x => x.chnologyId == thisItem.ChnologyId && x.index == thisItem.Index).ToList();
-
- //if (thisItem.StepName == "液体料")
- //{
- // foreach (var item in json)
- // {
- // var batching = await _db.Queryable<BPA_Batching>()
- // .FirstAsync(x => x.Batching_Name == item.actionName);
- // item.technologyactionId = batching?.Id;
- // }
- //}
- if (thisItem.StepName == "主料")
- {
- var v1 = json.FirstOrDefault(x => x.actionName == "主料名称");
- var v2 = deviceGoodsPosition.FirstOrDefault(x => x.GoodsName == name2 && x.DeviceName == name1);
- var jsondb = await _db.Queryable<BPA_TechnologyAction>()
- .Where(x => x.TechnologyId == thisItem.ChnologyId)
- .ToListAsync();
-
- foreach (var item in from item in jsondb let insertableJsondb = json.FirstOrDefault(x => x.technologyactionId == item.Id) where insertableJsondb == null select item)
- {
- json.Add(new ActionJson()
- {
- actionName = item.ActionName,
- actionValue = item.ActionName == "主料重量" ? "0" : item.ActionValue,
- chnologyId = item.TechnologyId,
- index = thisItem.Index,
- technologyactionId = item.Id
-
- });
- }
-
- foreach (var thisitem2 in json)
- {
-
- if (thisitem2.actionName == "主料位置")
- {
- if (v2 == null)
- {
- throw Oops.Oh(v1.actionValue + "物料没有确定位置");
- }
-
- thisitem2.actionValue = GetPositionMaterial(v2, v1.actionValue);
- if (string.IsNullOrEmpty(thisitem2.actionValue))
- {
- throw Oops.Oh(v1.actionValue + "物料没有确定位置");
- }
-
- }
- }
- }
-
- thisItem.ActionJson = JsonConvert.SerializeObject(json);
- }
-
- var insertableDta = goodstechnologyactionDto.Adapt<List<BPA_GoodsTechnologyAction>>();
- await _db.Insertable(insertableDta).CallEntityMethod(m => m.Create()).ExecuteCommandAsync();
- }
-
- #endregion
-
-
- _db.Ado.CommitTran();
- return true;
- }
- catch (Exception e)
- {
- _db.Ado.RollbackTran();
- throw Oops.Oh("导入失败,失败信息:" + e.Message);
- }
- }
- /// <summary>
- /// 获取 物料仓位
- /// </summary>
- /// <returns></returns>
- private string GetPositionMaterial(DeviceGoodsPositionModel item, string goodsName)
- {
-
- var properties = item.GetType().GetProperties();
- foreach (var item2 in properties)
- {
- var value = item.GetType().GetProperty(item2.Name)?.GetValue(item);
- if (value == null)
- {
- value = "";
- }
- if (value.ToString().Trim() == goodsName?.Trim())
- {
- //ColumnAttribute attribute = (ColumnAttribute)item2.GetCustomAttribute(typeof(ColumnAttribute), false);
- //return attribute?.Name;
- if (item2.IsDefined(typeof(Npoi.Mapper.Attributes.ColumnAttribute), false))
- {
- Npoi.Mapper.Attributes.ColumnAttribute attribute = (Npoi.Mapper.Attributes.ColumnAttribute)item2.GetCustomAttribute(typeof(Npoi.Mapper.Attributes.ColumnAttribute), false);
- return attribute.Name;
- }
- }
- }
- return "";
- }
- /// <summary>
- /// 导出 设备工艺流程
- /// </summary>
- /// <returns></returns>
- public async Task<string> TechnologyTemplateExport(string deviceId)
- {
- var result = "";
-
- //查询设备
- var device = await _db.Queryable<BPA_DeviceInfo>().FirstAsync(x => x.Id == deviceId);
-
- //设备类型
- var dictData = await _db.Queryable<BPA_TechnologyExportRecode>().FirstAsync(x => x.DeviceVersionId == device.ProductVersionId);
-
- return dictData?.TemplatePath ?? "";
- }
- /// <summary>
- /// 设备 版本 工序模型导入
- /// </summary>
- /// <returns></returns>
- public async Task<bool> DeviceVersionTemplateImport(DeviceVersionTemplateImportInputDto inputDto)
- {
- var file = inputDto.file;
- try
- {
- _db.Ado.BeginTran();
-
- //if (inputDto.IsAddGoodsTemplate)
- //{
-
- //}
- //else
- //{
-
- var source = file.OpenReadStream();
- var mapper = new Mapper(source);
- var deviceVersion = await _db.Queryable<BPA_ProductVesion>().FirstAsync(x => x.ProductId == inputDto.DeviceClientType && x.Vesion == inputDto.Version);
- //添加 设备_烹饪工序模型
- #region 添加 设备_烹饪工序模型
- ReadExcel<GoodstechnologyModel> readGoodstechnologyExcel = new();
- var GoodstechnologyModellist = readGoodstechnologyExcel.ExcelToList(source, mapper);
- List<BPA_Technology> GoodsTechnologyList = new();
- List<BPA_TechnologyAction> GoodsTechnologyActionList = new();
- var GoodsTechnologyListDB = await _db.Queryable<BPA_Technology>()
- .Where(x => x.DeviceVersionId == deviceVersion.Id).ToListAsync();
- string currennaid = "";
- string currennaname = "";
- for (int i = 0; i < GoodstechnologyModellist.Count; i++)
- {
- var goodsTechnologyId = GoodsTechnologyListDB.FirstOrDefault(x => x.Name == GoodstechnologyModellist[i].Name);
-
- if (!string.IsNullOrWhiteSpace(GoodstechnologyModellist[i].Name))
- {
-
- BPA_Technology item = new BPA_Technology()
- {
- Id = goodsTechnologyId == null ? Guid.NewGuid().ToString() : goodsTechnologyId.Id,
- Name = GoodstechnologyModellist[i].Name,
- DeviceVersionId = deviceVersion.Id
- };
- GoodsTechnologyList.Add(item);
- currennaid = item.Id;
- currennaname = item.Name;
- }
- var actvalueary = GoodstechnologyModellist[i].ActionValue?.Split('、');
- if (string.IsNullOrEmpty(GoodstechnologyModellist[i].ActionType) && currennaname != "液体料")
- {
- throw Oops.Oh($"类型错误");
- }
- BPA_TechnologyAction technologyAction = new()
- {
- Id = Guid.NewGuid().ToString(),
- TechnologyId = currennaid,
- ActionName = GoodstechnologyModellist[i].ActionName,
- ActionType = CharacterConversion(GoodstechnologyModellist[i].ActionType),
- Sort = i,
- TechnologyType = GoodstechnologyModellist[i].TechnologyType == "物料" ? TechnologyEnums.Batch : TechnologyEnums.Other,
- CreateAt = DateTime.Now,
- //ActionValue = GoodstechnologyModellist[i].ActionValue,
- };
- List<ActionValueModel> ActionValueModelList = new();
- if (actvalueary != null)
- {
- foreach (var item in actvalueary)
- {
- ActionValueModelList.Add(new ActionValueModel() { actionValueName = item });
- }
- technologyAction.ActionValue = JsonConvert.SerializeObject(ActionValueModelList);
- }
- GoodsTechnologyActionList.Add(technologyAction);
- }
-
- //修改添加 主表
- foreach (var item in GoodsTechnologyList)
- {
- var thisitem = GoodsTechnologyListDB.FirstOrDefault(x => x.Name == item.Name);
-
- if (thisitem != null)
- {
- item.Id = thisitem.Id;
- item.CreateAt = DateTime.Now;
- _db.Updateable(item).ExecuteCommand();
- }
- else
- {
- //item.Id = Guid.NewGuid().ToString();
- item.CreateAt = DateTime.Now;
- await _db.Insertable(item).ExecuteCommandAsync();
- }
- }
-
- //修改添从表
- GoodsTechnologyActionList = GoodsTechnologyActionList.Where(x => !string.IsNullOrEmpty(x.ActionName)).ToList();
- var goodstechnologyIds = GoodsTechnologyList.Select(x => x.Id).ToList();
- var GoodsTechnologyActionListDb = await _db.Queryable<BPA_TechnologyAction>()
- .Where(x => goodstechnologyIds.Contains(x.TechnologyId)).ToListAsync();
-
- foreach (var item in GoodsTechnologyActionList)
- {
- var thisitem = GoodsTechnologyActionListDb.FirstOrDefault(x => item.TechnologyId == x.TechnologyId && item.ActionName == x.ActionName);
- if (thisitem != null)
- {
- item.Id = thisitem.Id;
- item.CreateAt = DateTime.Now;
- _db.Updateable(item).ExecuteCommand();
- }
- else
- {
- item.Id = Guid.NewGuid().ToString();
- item.CreateAt= DateTime.Now;
- await _db.Insertable(item).ExecuteCommandAsync();
- }
- }
- #endregion
- var path = await _SystemConfigService.GetCosImgesURL(file);
- var TechnologyExportRecode = _db.Queryable<BPA_TechnologyExportRecode>().Where(x=>x.DeviceVersionId == inputDto.Id).First();
- if (TechnologyExportRecode != null)
- {
- TechnologyExportRecode.CreateAt= DateTime.Now;
- TechnologyExportRecode.TemplatePath = path;
- var vvv= await _db.Updateable(TechnologyExportRecode).ExecuteCommandAsync();
- }
- else
- {
-
- BPA_TechnologyExportRecode _TechnologyExportRecode = new();
- _TechnologyExportRecode.Id = Guid.NewGuid().ToString();
- _TechnologyExportRecode.CreateAt = DateTime.Now;
- _TechnologyExportRecode.ProductId = inputDto.DeviceClientType;
- _TechnologyExportRecode.DeviceVersionId = inputDto.Id;
- _TechnologyExportRecode.TemplatePath= path;
- await _db.Insertable(_TechnologyExportRecode).ExecuteCommandAsync();
-
- //await _db.Updateable<BPA_TechnologyExportRecode>()
- // .SetColumns(it => it.TemplatePath == path)
- // .Where(it => it.Id == inputDto.Id)
- // .ExecuteCommandAsync();
- }
-
- //}
- _db.Ado.CommitTran();
- }
- catch (Exception e)
- {
- _db.Ado.RollbackTran();
- throw Oops.Oh($"Excel导入错误," + e.Message);
- }
- return true;
- }
-
- public string GetValueStr(string str)
- {
- try
- {
- var obj = JsonConvert.DeserializeObject<List<ActionValueJsonDto>>(str);
- var result = String.Join(",", obj.Select(x => x.ActionValueName).ToArray());
- return result;
- }
- catch (Exception e)
- {
- return "";
- }
- }
- public string CharacterConversion(string str)
- {
- switch (str)
- {
- case "下拉框":
- return "select";
- case "数字输入框":
- return "digit";
- case "文本框":
- return "text";
- case "开关":
- return "switch";
- case "文字域":
- return "textarea";
- default:
- break;
- }
-
- return "";
- }
- /// <summary>
- /// 设置excel的下拉框
- /// </summary>
- /// <param name="sheet"></param>
- /// <param name="col"></param>
- /// <param name="selectData"></param>
- private void SetExcelSelect(ISheet sheet, List<string> selectData, int firstRow, int lastRow, int firstCol, int lastCol)
- {
- var count = selectData.Sum(item => item.Count());
-
-
- if (count > 180)
- {
- return;
- }
- //设置生成下拉框的行和列
- var cellRegions = new CellRangeAddressList(1, 65535, firstCol, lastCol);
- //设置 下拉框内容
- DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(selectData.ToArray());
- //绑定下拉框和作用区域,并设置错误提示信息
- HSSFDataValidation dataValidate = new HSSFDataValidation(cellRegions, constraint);
- dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");
- dataValidate.ShowPromptBox = true;
- sheet.AddValidationData(dataValidate);
- }
-
- /// <summary>
- /// 将 Stream 写入文件
- /// </summary>
- private void StreamToFile(byte[] bytes, string filepath)
- {
- // 把 byte[] 写入文件
- FileStream fs = new FileStream(filepath, FileMode.Create);
- BinaryWriter bw = new BinaryWriter(fs);
- bw.Write(bytes);
- bw.Close();
- fs.Close();
- }
- /// <summary>
- /// 获取 shtte name
- /// </summary>
- /// <param name="stream"></param>
- /// <param name="fileType"></param>
- /// <param name="strMsg"></param>
- /// <param name="sheetName"></param>
- /// <returns></returns>
- private List<string> ExcelToShtteName(Stream stream, string fileType, bool isGY = true)
- {
-
- var result = new List<string>();
- ISheet sheet = null;
- IWorkbook workbook = null;
- var shellCount = 0;
- try
- {
- #region 判断excel版本
- //2007以上版本excel
- if (fileType == ".xlsx")
- {
- workbook = new XSSFWorkbook(stream);
- shellCount = ((XSSFWorkbook)workbook).Count;
- }
- //2007以下版本excel
- else if (fileType == ".xls")
- {
- workbook = new HSSFWorkbook(stream);
- shellCount = ((HSSFWorkbook)workbook).Count;
- }
- else
- {
- throw Oops.Oh($"传入的不是Excel文件");
- }
- #endregion
-
- for (int sheetI = 0; sheetI < shellCount; sheetI++)
- {
- sheet = workbook.GetSheetAt(sheetI);
-
- if (isGY)
- {
- if (sheet.SheetName.Contains("工艺"))
- {
- result.Add(sheet.SheetName);
- }
- }
- else
- {
- result.Add(sheet.SheetName);
- }
-
- }
- }
- catch (Exception ex)
- {
- throw Oops.Oh($"Excel操作错误" + ex.Message);
- }
- return result;
- }
- /// <summary>
- /// 将Excel单表转为Datatable
- /// </summary>
- /// <param name="stream"></param>
- /// <param name="fileType"></param>
- /// <param name="strMsg"></param>
- /// <param name="sheetName"></param>
- /// <returns></returns>
- public async Task<List<ExcelDtoImagDto>> ExcelToDatatable(Stream stream, string fileType, string sheetName = null)
- {
- var result = new List<ExcelDtoImagDto>();
- ISheet sheet = null;
- IWorkbook workbook = null;
-
- try
- {
- #region 判断excel版本
- //2007以上版本excel
- if (fileType == ".xlsx")
- {
- workbook = new XSSFWorkbook(stream);
- }
- //2007以下版本excel
- else if (fileType == ".xls")
- {
- workbook = new HSSFWorkbook(stream);
- }
- else
- {
- throw new Exception("传入的不是Excel文件!");
- }
- #endregion
- Console.WriteLine("已确定解析格式,开始解析");
- if (workbook == null)
- {
- Console.WriteLine("已确定解析格式,工具");
- }
-
- IList pictures = workbook.GetAllPictures();
- Console.WriteLine("已确定解析格式,成功解析" + JsonConvert.SerializeObject(pictures));
- int i = 1;
- foreach (XSSFPictureData pic in pictures)
- {
- Console.WriteLine("讲数据流转化为图片");
- Image jpg1 = Image.FromStream(new MemoryStream(pic.Data));//从pic.Data数据流创建图片
- Console.WriteLine("转化成功");
- var imagePath = await GetCosImgesURL(PhotoImageInsert(jpg1));
- Console.WriteLine("图片路径" + imagePath);
- result.Add(new ExcelDtoImagDto()
- {
- ImgesPath = imagePath,
- Index = i
- });
- i++;
- }
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- return result;
- }
-
- //将Image转换成流数据,并保存为byte[]
- public byte[] PhotoImageInsert(Image imgPhoto)
- {
- MemoryStream mstream = new MemoryStream();
- imgPhoto.Save(mstream, ImageFormat.Bmp);
- byte[] byData = new Byte[mstream.Length];
- mstream.Position = 0;
- mstream.Read(byData, 0, byData.Length); mstream.Close();
- return byData;
- }
- public async Task<string> GetCosImgesURL(byte[] data)
- {
- var result = "";
- TransferUploadObjectModel m = new TransferUploadObjectModel(_db);
- /// 高级接口上传对象
- result = await m.TransferUploadFile(new FileInputInfoDto()
- {
- Directory = "goods",
- FileExtension = "png",
- Method = "PUT",
- }, data);
- return result;
- }
-
- private string GetNumber2(int Length = 10)
- {
- byte[] buffer = Guid.NewGuid().ToByteArray();
- var ram = BitConverter.ToInt64(buffer, 0);
- var str = string.Format("{0}", ram.ToString().Substring(0, Length));
- return str;
- }
- }
- }
|