using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Ropin.Core.Extensions.Redis;
using Ropin.Core.Extensions;
using Ropin.Inspection.Api.Common.Options;
using Ropin.Inspection.Api.Common.Token;
using Ropin.Inspection.Service.Interface;
using Ropin.Inspection.Service.SYS.Interface;
using Ropin.Inspection.Service;
using System.Net.Http;
using Ropin.Inspection.Common.Helper;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using Ropin.Inspection.Api.Common;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using log4net;
using System.Collections.Generic;
using System.ComponentModel;
using System;
using Ropin.Inspection.Model.ViewModel.ISP;
using NPOI.Util;
using System.Reflection;
using Ropin.Inspection.Model.ViewModel;
using Ropin.Inspection.Model;
using Ropin.Inspection.Model.SearchModel;
using Ropin.Inspection.Model.Entities;
using Ropin.Inspection.Common.Accessor.Interface;
using System.Security.Claims;
using NPOI.OpenXmlFormats.Dml.Diagram;
using NPOI.SS.Formula.Functions;
using NPOI.SS.Util;
using Newtonsoft.Json;
using System.Xml.Linq;
namespace Ropin.Inspection.Api.Controllers.Base
{
public class FileImportController : BaseController
{
private static readonly ILog log = LogManager.GetLogger(typeof(FileImportController));
private readonly IClaimsAccessor _claims;
private readonly ITsysOrganizeService _tsysOrganizeService;
private readonly ITpntStoreService _TpntStoreService;
private readonly ITispContentService _tispContentService;
private readonly ITispContentGroupService _tispContentGroupService;
private readonly ITispContentGroupItemService _tispContentGroupItemService;
private readonly ITdevDevStoreService _tdevDevStoreService;
public FileImportController(IClaimsAccessor claims,ITsysOrganizeService tsysOrganizeService, ITpntStoreService TpntStoreService, ITispContentService tispContentService, ITispContentGroupService tispContentGroupService, ITispContentGroupItemService tispContentGroupItemService, ITdevDevStoreService tdevDevStoreService)
{
_claims = claims;
_tsysOrganizeService = tsysOrganizeService;
_TpntStoreService = TpntStoreService;
_tispContentService = tispContentService;
_tispContentGroupService = tispContentGroupService;
_tispContentGroupItemService = tispContentGroupItemService;
_tdevDevStoreService = tdevDevStoreService;
}
///
/// 导入巡检内容前的判断
///
/// 组织ID
/// 业主ID
///
///
[HttpPost("JudgmentImportIspContent")]
public async Task JudgmentImportIspContent(string orgCode, string storeCode, [Required] IFormFile file)
{
if (string.IsNullOrEmpty(orgCode) || string.IsNullOrEmpty(storeCode))
{
return new ApiResult(ReturnCode.ArgsError);
}
if (file == null)
{
return new ApiResult(ReturnCode.ArgsError, "请上传导入文件");
}
try
{
string msg = "";
Guid OrgId = Guid.Parse(orgCode);
Guid StoreId = Guid.Parse(storeCode);
TsysOrganizeViewModel orgEntity = await _tsysOrganizeService.GetByIdAsync(OrgId);
TpntStoreViewModel storeEntity = await _TpntStoreService.GetByIdAsync(StoreId);
if (orgEntity == null || storeEntity == null)
{
msg = "业主和组织获取失败";
return new ApiResult(ReturnCode.GeneralError, msg);
}
List researchExcels = new List();
IWorkbook wk = null;
var exName = file.FileName.Split('.').Last().ToLower();
if (exName == "xlsx")
{
wk = new XSSFWorkbook(file.OpenReadStream());
}
else
{
wk = new HSSFWorkbook(file.OpenReadStream());
}
//获取第一个sheet
ISheet sheet = wk.GetSheetAt(0);
//获取第一行-设备
IRow headrow0 = sheet.GetRow(0);
//获取第二行-业主
IRow headrow2 = sheet.GetRow(1);
//获取第三行-组织
IRow headrow3 = sheet.GetRow(2);
IRow headrow4= sheet.GetRow(3);
IRow headrow5 = sheet.GetRow(4);
if (headrow0 == null || headrow2 == null || headrow3 == null || headrow4 == null || headrow5 == null)
{
return new ApiResult(ReturnCode.GeneralError, "请确认表格内是否有数据数据");
}
string devCell0 = headrow0.Cells[0].ToString();
var nameCell2 = headrow2.Cells.Where(x => x.ToString() == "使用部门:").FirstOrDefault();
var valCell2 = headrow2.Cells[2].ToString();
var nameCell3 = headrow3.Cells.Where(x => x.ToString() == "服务公司:").FirstOrDefault();
var valCell3 = headrow3.Cells[2].ToString();
if (nameCell2 is null || nameCell3 is null)
{
msg = "导入格式有误,请使用模板进行导入";
return new ApiResult(ReturnCode.ArgsError, msg);
}
if ((storeEntity.C_Name.Trim() != valCell2 && storeEntity.C_SName?.Trim() != valCell2) || (orgEntity.C_SName?.Trim() != valCell3 && orgEntity.C_Name.Trim() != valCell3))
{
msg = "业主和组织验证失败";
return new ApiResult(ReturnCode.ArgsError, msg);
}
if (!string.IsNullOrEmpty(devCell0))
{
var devArray = devCell0.Split("点检记录表").ToList();
try
{
var arr0 = devArray[0].ToString();
if (string.IsNullOrEmpty(arr0))
{
msg = "获取设备名称错误,格式:【XXX点检记录表(设备编号:XXX)】";
return new ApiResult(ReturnCode.ArgsError, msg);
}
TdevDevStoreSearchModel searchDev = new TdevDevStoreSearchModel();
searchDev.C_StoreCode = storeCode;
searchDev.C_Name = arr0;
var DevData = await _tdevDevStoreService.GetConditionAsync(searchDev);
if (DevData == null || DevData.Count() == 0 || (DevData.Count() == 1 && DevData.First() == null) || DevData.Count() > 1)
{
msg = $"请确认设备【{arr0}】名称是否正确或者是否存在于当前业主【{valCell2}】下";
return new ApiResult(ReturnCode.ArgsError, msg);
}
var devModel = DevData.FirstOrDefault();
msg = $"请确认是否导入数据到 组织:{valCell3},业主:{valCell2},设备:{devModel.C_Name}【{devModel.C_NumberCode}】 下吗?";
var data = new
{
devCode = devModel.C_ID,
Message=msg,
};
return new ApiResult