|
|
@@ -34513,6 +34513,103 @@ ORDER BY
|
|
|
|
|
|
#region 团组会务成本
|
|
|
|
|
|
+ ///读取excel数据
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> MaterialCostsReadExcel(MaterialCostsReadExcelDto dto)
|
|
|
+ {
|
|
|
+ var file = dto.File;
|
|
|
+ var rowIndex = dto.RowIndex;
|
|
|
+ var userId = dto.UserId;
|
|
|
+ var groupId = dto.GroupId;
|
|
|
+ var conferenceAffairsCostId = dto.ConferenceAffairsCostId;
|
|
|
+
|
|
|
+ if (file == null || file.Length == 0)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "请选择文件"));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var conferenceAffairsCost = _sqlSugar.Queryable<Grp_ConferenceAffairsCost>()
|
|
|
+ .First(x => x.Id == conferenceAffairsCostId && x.IsDel == 0);
|
|
|
+ if (conferenceAffairsCost == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "ConferenceAffairsCostId 参数有误!"));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var workbook = new Workbook(file.OpenReadStream());
|
|
|
+ var worksheet = workbook.Worksheets[0];
|
|
|
+ var rowCount = worksheet.Cells.MaxDataRow + 1;
|
|
|
+ var colCount = worksheet.Cells.MaxDataColumn + 1;
|
|
|
+
|
|
|
+ var setDatas = await _sqlSugar.Queryable<Sys_SetData>()
|
|
|
+ .Where(x => x.IsDel == 0 && (x.STid == 21 || x.STid == 119))
|
|
|
+ .Select(x => new { x.Id, x.Name, x.STid })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var typeItems = setDatas.Where(x => x.STid == 21).ToList();
|
|
|
+ var unitItems = setDatas.Where(x => x.STid == 119).ToList();
|
|
|
+ // 预处理为字典,提高查找效率
|
|
|
+ var typeDict = typeItems.GroupBy(x => x.Name).ToDictionary(g => g.Key, g => g.First().Id);
|
|
|
+ var unitDict = unitItems.GroupBy(x => x.Name).ToDictionary(g => g.Key, g => g.First().Id);
|
|
|
+
|
|
|
+ List<Grp_ConferenceAffairsCostChild> data = new List<Grp_ConferenceAffairsCostChild>();
|
|
|
+
|
|
|
+ for (int i = rowIndex; i < rowCount; i++)
|
|
|
+ {
|
|
|
+ var sotr = int.TryParse(worksheet.Cells[i, 0].Value.toString(), out int index) ? index : 0;
|
|
|
+ var typeName = worksheet.Cells[i, 1].Value.toString();
|
|
|
+ var itemName = worksheet.Cells[i, 2].Value.toString();
|
|
|
+ var count = int.TryParse(worksheet.Cells[i, 3].Value.toString(), out int countInt) ? countInt : 0;
|
|
|
+ var unitName = worksheet.Cells[i, 4].Value.toString();
|
|
|
+ var baoJiaPrice = decimal.TryParse(worksheet.Cells[i, 5].Value.toString(), out decimal priceDecimal) ? priceDecimal : 0;
|
|
|
+ var baoJiaAllPrice = decimal.TryParse(worksheet.Cells[i, 6].Value.toString(), out decimal allPriceDecimal) ? allPriceDecimal : 0;
|
|
|
+ var costPriceAll = decimal.TryParse(worksheet.Cells[i, 7].Value.toString(), out decimal costPriceAllDecimal) ? costPriceAllDecimal : 0; //成本总价
|
|
|
+
|
|
|
+ var rowNo = i + 1;
|
|
|
+ if (count == 0) return Ok(JsonView(false, $"第{rowNo}行第4列单元格数据有误"));
|
|
|
+ if (baoJiaPrice == 0) return Ok(JsonView(false, $"第{rowNo}行第6列单元格数据有误"));
|
|
|
+ if (baoJiaAllPrice == 0) return Ok(JsonView(false, $"第{rowNo}行第7列单元格数据有误"));
|
|
|
+ if (costPriceAll == 0) return Ok(JsonView(false, $"第{rowNo}行第8列单元格数据有误"));
|
|
|
+
|
|
|
+ //计算系数
|
|
|
+ var costSinglePrice = costPriceAll / count; //单项成本
|
|
|
+ var costSinglePriceRate = baoJiaPrice / costSinglePrice; //系数
|
|
|
+
|
|
|
+ data.Add(new Grp_ConferenceAffairsCostChild
|
|
|
+ {
|
|
|
+ Index = index,
|
|
|
+ PriceType = typeDict.GetValueOrDefault(typeName, 0),
|
|
|
+ PriceName = itemName,
|
|
|
+ Count = count,
|
|
|
+ Unit = unitDict.GetValueOrDefault(unitName, 0),
|
|
|
+ CostPrice = costSinglePrice,
|
|
|
+ Currency = 836, // 建议定义为常量或从配置读取
|
|
|
+ Rate = costSinglePriceRate,
|
|
|
+ AddedValue = 0,
|
|
|
+ Details = "",
|
|
|
+ ReviewStatus = 0,
|
|
|
+ Imgs = "",
|
|
|
+ Diid = groupId,
|
|
|
+ ConferenceAffairsCostId = conferenceAffairsCostId,
|
|
|
+ CreateTime = DateTime.Now,
|
|
|
+ CreateUserId = userId,
|
|
|
+ IsDel = 0,
|
|
|
+ BaoJiaPrice = baoJiaPrice,
|
|
|
+ Coefficient = costSinglePriceRate,
|
|
|
+ Remark = string.Empty
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ var result = await _sqlSugar.Insertable(data).ExecuteCommandAsync();
|
|
|
+ if (result < 1) return Ok(JsonView(false, "数据插入失败!"));
|
|
|
+ return Ok(JsonView(true, "数据插入成功!", new { count = result }));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 团组会务成本数据初始化
|
|
|
/// </summary>
|