|
|
|
|
using Infrastructure.Abstructions;
|
|
|
|
|
using Infrastructure.Word;
|
|
|
|
|
using NPOI.XWPF.UserModel;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
namespace BackGround.Hangfire.Jobs.UMEs
|
|
|
|
|
{
|
|
|
|
|
public class UMETableResolver : IWordTableResolver, ITransientDependency
|
|
|
|
|
{
|
|
|
|
|
private List<string> fmkeys = new List<string> { "姓名", "性别", "出生年月", "站内职务", "兼任职务", "联系电话" };
|
|
|
|
|
public Dictionary<string, object> Resolve(XWPFTable table)
|
|
|
|
|
{
|
|
|
|
|
var result = new Dictionary<string, object> { { "队员情况", new List<Dictionary<string, object>>() }, { "消防装备器材配备", new List<Dictionary<string, object>>() } };
|
|
|
|
|
var currentTableName = string.Empty;
|
|
|
|
|
var fireMenInfoRows = new List<XWPFTableRow>();
|
|
|
|
|
var equipmentInfoRows = new List<XWPFTableRow>();
|
|
|
|
|
var otherEquipmentRows = new List<XWPFTableRow>();
|
|
|
|
|
bool isHeaderRow = false;
|
|
|
|
|
bool isUnderOtherEqRow = false;
|
|
|
|
|
foreach(var row in table.Rows)
|
|
|
|
|
{
|
|
|
|
|
var cells = row.GetTableCells();
|
|
|
|
|
var tableName = GetStringContentOfCell(cells[0]);
|
|
|
|
|
if (!string.IsNullOrEmpty(tableName))
|
|
|
|
|
{
|
|
|
|
|
isHeaderRow = true;
|
|
|
|
|
currentTableName = tableName;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
isHeaderRow = false;
|
|
|
|
|
}
|
|
|
|
|
if(currentTableName.Trim()== "队员情况")
|
|
|
|
|
{
|
|
|
|
|
if (!isHeaderRow)
|
|
|
|
|
{
|
|
|
|
|
fireMenInfoRows.Add(row);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(currentTableName == "消防装备器材配备")
|
|
|
|
|
{
|
|
|
|
|
var cell1Value = GetStringContentOfCell(cells[1]);
|
|
|
|
|
if(cell1Value.Trim()== "其他消防装备、器材")
|
|
|
|
|
{
|
|
|
|
|
isUnderOtherEqRow = true;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (isUnderOtherEqRow)
|
|
|
|
|
{
|
|
|
|
|
otherEquipmentRows.Add(row);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
equipmentInfoRows.Add(row);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
((List<Dictionary<string, object>>)result["队员情况"]).AddRange(GetFireMenInfos(fireMenInfoRows));
|
|
|
|
|
((List<Dictionary<string, object>>)result["消防装备器材配备"]).Add(GetEuipmentMenInfos(equipmentInfoRows));
|
|
|
|
|
((List<Dictionary<string, object>>)result["消防装备器材配备"]).Add(GetOtherEuipmentMenInfos(otherEquipmentRows));
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetStringContentOfCell(XWPFTableCell cell)
|
|
|
|
|
{
|
|
|
|
|
var names = cell.Paragraphs.Select(p => p.ParagraphText);
|
|
|
|
|
return string.Join(null, names);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<Dictionary<string, object>> GetFireMenInfos(List<XWPFTableRow> rows)
|
|
|
|
|
{
|
|
|
|
|
var result = new List<Dictionary<string, object>>();
|
|
|
|
|
rows.ForEach(row =>
|
|
|
|
|
{
|
|
|
|
|
var cells = row.GetTableCells();
|
|
|
|
|
var infoOfMenDict = new Dictionary<string, object>();
|
|
|
|
|
for (var i = 1; i < cells.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
var cellcontenText = GetStringContentOfCell(cells[i]);
|
|
|
|
|
infoOfMenDict.Add(fmkeys[i - 1], cellcontenText);
|
|
|
|
|
}
|
|
|
|
|
result.Add(infoOfMenDict);
|
|
|
|
|
});
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Dictionary<string, object> GetEuipmentMenInfos(List<XWPFTableRow> rows)
|
|
|
|
|
{
|
|
|
|
|
var result = new Dictionary<string, object>();
|
|
|
|
|
for(var i=0; i < rows.Count;)
|
|
|
|
|
{
|
|
|
|
|
var keyCells = rows[i].GetTableCells();
|
|
|
|
|
var valveCells= rows[i+1].GetTableCells();
|
|
|
|
|
for (var j=1; j < keyCells.Count; j++)
|
|
|
|
|
{
|
|
|
|
|
var key = keyCells[j].Paragraphs[0].ParagraphText;
|
|
|
|
|
var value = GetStringContentOfCell(valveCells[j]);
|
|
|
|
|
if (!result.ContainsKey(key))
|
|
|
|
|
result.Add(key, value);
|
|
|
|
|
}
|
|
|
|
|
i = i + 2;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Dictionary<string, object> GetOtherEuipmentMenInfos(List<XWPFTableRow> rows)
|
|
|
|
|
{
|
|
|
|
|
var result = new Dictionary<string, object>();
|
|
|
|
|
for (var i = 0; i < rows.Count;)
|
|
|
|
|
{
|
|
|
|
|
var keyCells = rows[i].GetTableCells();
|
|
|
|
|
var valveCells = rows[i + 1].GetTableCells();
|
|
|
|
|
for (var j = 2; j < keyCells.Count; j++)
|
|
|
|
|
{
|
|
|
|
|
var key = GetStringContentOfCell(keyCells[j]);
|
|
|
|
|
var value = GetStringContentOfCell(valveCells[j]);
|
|
|
|
|
if (!result.ContainsKey(key))
|
|
|
|
|
result.Add(key, value);
|
|
|
|
|
}
|
|
|
|
|
i = i + 2;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|