| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web.Mvc;
- using Abp.Application.Services.Dto;
- using Abp.Authorization;
- using Abp.Domain.Repositories;
- using Abp.Timing;
- using IwbZero.AppServiceBase;
- using IwbZero.IdentityFramework;
- using IwbZero.Setting;
- using Newtonsoft.Json;
- using ShwasherSys.Authorization.Permissions;
- using ShwasherSys.BaseSysInfo;
- using ShwasherSys.BaseSysInfo.SysAttachFiles;
- using ShwasherSys.BaseSysInfo.SysAttachFiles.Dto;
- using ShwasherSys.Common;
- using ShwasherSys.EntityFramework;
- using ShwasherSys.ProductInfo.Dto;
- using ShwasherSys.ProductInfo.Dto.FileUpload;
- namespace ShwasherSys.ProductInfo
- {
- [AbpAuthorize]
- public class SemiProductsAppService : ShwasherAsyncCrudAppService<SemiProducts, SemiProductDto, string, PagedRequestDto, SemiProductCreateDto, SemiProductUpdateDto >, ISemiProductsAppService
- {
- public IRepository<SysAttachFile> AttachRepository { get; }
- public ISqlExecuter SqlExecuter { get; }
- protected IRepository<Product, string> ProductRepository { get; set; }
- public SemiProductsAppService(IRepository<SemiProducts, string> repository, IIwbSettingManager settingManager, IRepository<SysAttachFile> attachRepository, ISqlExecuter sqlExecuter, IRepository<Product, string> productRepository) : base(repository,"Id")
- {
- AttachRepository = attachRepository;
- SqlExecuter = sqlExecuter;
- SettingManager = settingManager;
- ProductRepository = productRepository;
- }
- protected override bool KeyIsAuto { get; set; } = false;
- protected override string GetPermissionName { get; set; } = PermissionNames.PagesProductInfoSemiProducts;
- protected override string GetAllPermissionName { get; set; } = PermissionNames.PagesProductInfoSemiProducts;
- protected override string CreatePermissionName { get; set; } = PermissionNames.PagesProductInfoSemiProductsCreate;
- protected override string UpdatePermissionName { get; set; } = PermissionNames.PagesProductInfoSemiProductsUpdate;
- protected override string DeletePermissionName { get; set; } = PermissionNames.PagesProductInfoSemiProductsDelete;
- public override async Task<SemiProductDto> Create(SemiProductCreateDto input)
- {
- CheckCreatePermission();
- var entity = ProductRepository.FirstOrDefault(i => i.Id == input.Id);
- if (entity == null)
- {
- string sEntity = JsonConvert.SerializeObject(input);
- var products = JsonConvert.DeserializeObject<Product>(sEntity);
- products.IsLock = "N";
- products.ProductName = input.SemiProductName;
- products.TimeLastMod = Clock.Now;
- products.UserIDLastMod = AbpSession.UserName;
- products.TimeCreated = Clock.Now;
- ProductRepository.Insert(products);
- }
- var resultEntity = await CreateEntity(input);
-
- if (!string.IsNullOrEmpty(input.FileInfo))
- {
- SysAttachFileCreateDto fileCreateDto = new SysAttachFileCreateDto()
- {
- AttachNo = Guid.NewGuid().ToString("N"),
- TableName = "SemiProducts",
- ColumnName = "SemiProductNo",
- SourceKey = input.Id,
- FileInfo = input.FileInfo,
- FileExt = input.FileExt,
- FileName = input.FileName
- };
- await CreateAttach(fileCreateDto);
- }
- return resultEntity;
- }
- public override async Task<SemiProductDto> Update(SemiProductUpdateDto input)
- {
- CheckCreatePermission();
- var entity = ProductRepository.FirstOrDefault(i => i.Id == input.Id);
- if (entity != null)
- {
- entity.ProductName = input.SemiProductName;
- entity.TimeLastMod = Clock.Now;
- entity.UserIDLastMod = AbpSession.UserName;
- ProductRepository.Update(entity);
- }
- else
- {
- var product = new Product();
- product.Id = input.Id;
- product.IsStandard = input.IsStandard;
- product.MaterialNo = input.MaterialNo;
- product.Material = input.Material;
- product.Model = input.Model;
- product.ModelNo = input.ModelNo;
- product.Rigidity = input.Rigidity;
- product.RigidityNo = input.RigidityNo;
- product.SurfaceColor = input.SurfaceColor;
- product.SurfaceColorNo = input.SurfaceColorNo;
- product.SpecialDesc = input.SpecialDesc;
- product.SpecialNo = input.SpecialNo;
- product.PartNo = input.PartNo;
- product.ProductDesc = input.ProductDesc;
- product.IsLock = "N";
- product.ProductName = input.SemiProductName;
- product.TimeLastMod = Clock.Now;
- product.UserIDLastMod = AbpSession.UserName;
- product.TimeCreated = Clock.Now;
- ProductRepository.Insert(product);
- }
- var resultEntity = await UpdateEntity(input);
- if (!string.IsNullOrEmpty(input.FileInfo))
- {
- SysAttachFileCreateDto fileCreateDto = new SysAttachFileCreateDto()
- {
- AttachNo = Guid.NewGuid().ToString("N"),
- TableName = "SemiProducts",
- ColumnName = "SemiProductNo",
- SourceKey = input.Id,
- FileInfo = input.FileInfo,
- FileExt = input.FileExt,
- FileName = input.FileName
- };
- await AttachRepository.DeleteAsync(i =>
- i.TableName == "SemiProducts" && i.ColumnName == "SemiProductNo" && i.SourceKey == input.Id);
- await CreateAttach(fileCreateDto);
- }
- return resultEntity;
- }
- private async Task CreateAttach(SysAttachFileCreateDto input)
- {
- if (await IsValidFileType(input.FileExt))
- {
- string filePath =
- $"{SettingManager.GetSettingValue(SettingNames.DownloadPath)}/{input.TableName}/{input.ColumnName}";
- var lcRetVal = SysAttachFileAppService.Base64ToFile(input.FileInfo,
- $"{input.FileName}-{DateTime.Now:yyMMddHHmmss}{new Random().Next(1000, 9999)}", input.FileExt,
- filePath);
- if (lcRetVal.StartsWith("error@"))
- {
- CheckErrors(
- IwbIdentityResult.Failed(lcRetVal.Split(new[] { '@' },
- StringSplitOptions.RemoveEmptyEntries)[1]));
- return;
- }
- input.FilePath = lcRetVal;
- var entity = ObjectMapper.Map<SysAttachFile>(input);
- entity = await AttachRepository.InsertAsync(entity);
-
- return;
- }
- CheckErrors(IwbIdentityResult.Failed("文件类型不合法,请上传合法文件。"));
- }
- private async Task<bool> IsValidFileType(string fileName, bool isName = false)
- {
- string ext = isName ? GetFileExt(fileName) : fileName;
- string lcExts = await SettingManager.GetSettingValueAsync(SettingNames.UploadFileExt);
- string[] loList = lcExts.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
- foreach (var lcExt in loList)
- {
- if (ext.ToLower() == lcExt.ToLower())
- return true;
- }
- this.LogError("上传的文件非法:" + fileName);
- return false;
- }
- private string GetFileExt(string fileName)
- {
- string fileExt = fileName.Substring(fileName.LastIndexOf(".", StringComparison.Ordinal) + 1, fileName.Length - fileName.LastIndexOf(".", StringComparison.Ordinal) - 1);
- return fileExt.ToLower();
- }
- [AbpAuthorize(PermissionNames.PagesProductInfoSemiProductsImportExcel)]
- public bool ImportExcel(FileUploadInfoDto input)
- {
- if (!string.IsNullOrEmpty(input.FileInfo))
- {
- string filePath =
- $"{SettingManager.GetSettingValue(SettingNames.DownloadPath)}/tmpUpload";
- var lcRetVal = SysAttachFileAppService.Base64ToFile(input.FileInfo,
- $"{input.FileName}-{DateTime.Now:yyMMddHHmmss}{new Random().Next(1000, 9999)}", input.FileExt,
- filePath);
- StringBuilder errStringBuilder = new StringBuilder();
- List<SemiProducts> resultEntityList = ExcelHelper.ExcelToEntityList<SemiProducts>(new Dictionary<string, string>() { { "Id", "半成品编码" }, { "PartNo", "零件号" }, { "Model", "规格" }, { "Material", "材质" }, { "Rigidity", "硬度" }, { "SurfaceColor", "表色" }, { "IsStandard", "是否标件" },{ "SemiProductName", "半成品名称"} }, $"{AppDomain.CurrentDomain.BaseDirectory}{lcRetVal}",
- out errStringBuilder);
- int indexCount = 1;
-
- StringBuilder sbSql = new StringBuilder();
- sbSql.Append("delete from SemiProducts;");
- foreach (var semiProductse in resultEntityList)
- {
- semiProductse.IsLock = "N";
- semiProductse.TimeLastMod = Clock.Now;
- semiProductse.TimeCreated = Clock.Now;
- semiProductse.UserIDLastMod = AbpSession.UserName;
- if (semiProductse.IsStandard == "是"|| semiProductse.IsStandard == "否")
- {
- semiProductse.IsStandard = semiProductse.IsStandard == "是" ? "Y" : "N";
- }
- semiProductse.SemiProductName = semiProductse.SemiProductName;
- semiProductse.Sequence = indexCount;
- semiProductse.Model = semiProductse.Model == "-" ? "" : semiProductse.Model;
- semiProductse.Material = semiProductse.Material == "-" ? "" : semiProductse.Material;
- semiProductse.Rigidity = semiProductse.Rigidity == "-" ? "" : semiProductse.Rigidity;
- semiProductse.SurfaceColor = semiProductse.SurfaceColor == "-" ? "" : semiProductse.SurfaceColor;
- semiProductse.PartNo = semiProductse.PartNo == "-" ? "" : semiProductse.PartNo;
- sbSql.Append(semiProductse.InsertSql()+"\r\n");
- indexCount++;
- }
- if (SqlExecuter.Execute(sbSql.ToString()) > 0)
- {
- return true;
- }
- this.LogError(errStringBuilder.ToString());
- }
- else
- {
- CheckErrors(new IwbIdentityResult("请先上传文件!"));
- }
- return false;
- }
- [AbpAllowAnonymous]
- public async Task<string> ExportExcel()
- {
- var query = Repository.GetAll();
-
- var entities = await AsyncQueryableExecuter.ToListAsync(query);
-
- string downloadUrl = await SettingManager.GetSettingValueAsync("SYSTEMDOWNLOADPATH");
- string lcFilePath = System.Web.HttpRuntime.AppDomainAppPath + "\\" +
- downloadUrl;
- var exportEntity = new Dictionary<string, string>()
- {
- {"Id", "半成品编码"},
- {"Model", "规格"},
- {"Material", "材质"},
- {"SurfaceColor", "表色"},
- {"Rigidity", "硬度"},
- {"IsStandard", "是否标件"},
- {"PartNo", "零件号"},
- {"SemiProductName", "半成品名称"},
-
- };
-
- string lcResultFileName = ExcelHelper.EntityListToExcel2003(exportEntity, entities, "sheet", lcFilePath);
- return Path.Combine(downloadUrl, lcResultFileName);
- }
- }
- }
|