You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
5.0 KiB
130 lines
5.0 KiB
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; |
|
} |
|
} |
|
}
|
|
|