507 lines
21 KiB
C#
507 lines
21 KiB
C#
using Model;
|
||
using Newtonsoft.Json;
|
||
using Newtonsoft.Json.Linq;
|
||
using NPOI.SS.UserModel;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Numerics;
|
||
using WIA;
|
||
|
||
namespace BLL
|
||
{
|
||
/// <summary>
|
||
/// 安全费用管理
|
||
/// </summary>
|
||
public static class CostManageService
|
||
{
|
||
|
||
|
||
/// <summary>
|
||
/// 根据主键获取安全费用管理
|
||
/// </summary>
|
||
/// <param name="costManageId"></param>
|
||
/// <returns></returns>
|
||
public static Model.CostGoods_CostManage GetCostManageById(string costManageId)
|
||
{
|
||
return Funs.DB.CostGoods_CostManage.FirstOrDefault(e => e.CostManageId == costManageId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取 已支付的HSE费用
|
||
/// </summary>
|
||
/// <param name="ProjectId"></param>
|
||
/// <param name="UnitId"></param>
|
||
/// <returns></returns>
|
||
public static decimal GetSumHSECost(string ProjectId, string UnitId, string costManageId)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
decimal sumCost = 0;
|
||
var getData = from x in db.CostGoods_CostManage
|
||
where x.ProjectId == ProjectId && x.UnitId == UnitId && x.States == Const.State_2 && x.CostManageId != costManageId
|
||
select x;
|
||
if (getData.Count() > 0)
|
||
{
|
||
sumCost = getData.Sum(x => x.SumMoney ?? 0);
|
||
}
|
||
|
||
return sumCost;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加安全费用管理
|
||
/// </summary>
|
||
/// <param name="costManage"></param>
|
||
public static void AddCostManage(Model.CostGoods_CostManage costManage)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
Model.CostGoods_CostManage newCostManage = new Model.CostGoods_CostManage
|
||
{
|
||
CostManageId = costManage.CostManageId,
|
||
ProjectId = costManage.ProjectId,
|
||
CostManageCode = costManage.CostManageCode,
|
||
CostManageName = costManage.CostManageName,
|
||
UnitId = costManage.UnitId,
|
||
ContractNum = costManage.ContractNum,
|
||
CostManageDate = costManage.CostManageDate,
|
||
Opinion = costManage.Opinion,
|
||
SubCN = costManage.SubCN,
|
||
SubHSE = costManage.SubHSE,
|
||
SubProject = costManage.SubProject,
|
||
States = costManage.States,
|
||
CompileMan = costManage.CompileMan,
|
||
CompileDate = costManage.CompileDate,
|
||
NextManId = costManage.NextManId,
|
||
};
|
||
|
||
db.CostGoods_CostManage.InsertOnSubmit(newCostManage);
|
||
db.SubmitChanges();
|
||
|
||
AddCostManageFlowOperate(newCostManage);
|
||
}
|
||
|
||
CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(Const.ProjectCostManageMenuId, costManage.ProjectId, null, costManage.CostManageId, costManage.CompileDate);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改费用管理
|
||
/// </summary>
|
||
/// <param name="costManage"></param>
|
||
public static void UpdateCostManage(Model.CostGoods_CostManage costManage)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
Model.CostGoods_CostManage newCostManage = db.CostGoods_CostManage.FirstOrDefault(e => e.CostManageId == costManage.CostManageId);
|
||
if (newCostManage != null)
|
||
{
|
||
//newCostManage.ProjectId = costManage.ProjectId;
|
||
newCostManage.CostManageName = costManage.CostManageName;
|
||
newCostManage.UnitId = costManage.UnitId;
|
||
newCostManage.ContractNum = costManage.ContractNum;
|
||
newCostManage.CostManageDate = costManage.CostManageDate;
|
||
newCostManage.Opinion = costManage.Opinion;
|
||
newCostManage.SubCN = costManage.SubCN;
|
||
newCostManage.SubHSE = costManage.SubHSE;
|
||
newCostManage.SubProject = costManage.SubProject;
|
||
newCostManage.States = costManage.States;
|
||
newCostManage.CompileMan = costManage.CompileMan;
|
||
newCostManage.CompileDate = costManage.CompileDate;
|
||
newCostManage.NextManId = costManage.NextManId;
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据主键删除费用管理
|
||
/// </summary>
|
||
/// <param name="costManageId"></param>
|
||
public static void DeleteCostManageById(string costManageId)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var costManage = db.CostGoods_CostManage.FirstOrDefault(e => e.CostManageId == costManageId);
|
||
if (costManage != null)
|
||
{
|
||
deleteCostManageFlowOperate(costManageId);
|
||
CommonService.DeleteAttachFileById(costManageId);//删除附件
|
||
db.CostGoods_CostManage.DeleteOnSubmit(costManage);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 按照明细取当前单据总费用
|
||
/// </summary>
|
||
/// <param name="costManageId"></param>
|
||
public static void UpdateSumMoney(string costManageId)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var costManage = db.CostGoods_CostManage.FirstOrDefault(e => e.CostManageId == costManageId);
|
||
if (costManage != null)
|
||
{
|
||
decimal sumC = 0;
|
||
var getItems = db.CostGoods_CostManageItem.Where(x => x.CostManageId == costManageId);
|
||
if (getItems.Count() > 0)
|
||
{
|
||
sumC = getItems.Sum(x => x.PriceMoney ?? 0);
|
||
}
|
||
costManage.SumMoney = sumC;
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据主表ID获取审核列表
|
||
/// </summary>
|
||
/// <param name="costManageId"></param>
|
||
/// <returns></returns>
|
||
public static List<Model.CostGoods_CostManageFlowOperate> getCostManageFlowOperateList(string costManageId)
|
||
{
|
||
return (from x in Funs.DB.CostGoods_CostManageFlowOperate
|
||
where x.CostManageId == costManageId
|
||
orderby x.SortIndex
|
||
select x).ToList();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取当前步骤审核人
|
||
/// </summary>
|
||
/// <param name="costManageId"></param>
|
||
/// <returns></returns>
|
||
public static Model.CostGoods_CostManageFlowOperate getNowCostManageFlowOperateList(string costManageId)
|
||
{
|
||
var getAllNoClose = Funs.DB.CostGoods_CostManageFlowOperate.Where(x => x.CostManageId == costManageId && (x.IsClosed == null || x.IsClosed == false));
|
||
if (getAllNoClose.Count() > 0)
|
||
{
|
||
var minSortIndex = getAllNoClose.Min(x => x.SortIndex) ?? 0;
|
||
return getAllNoClose.FirstOrDefault(x => x.SortIndex == minSortIndex);
|
||
}
|
||
else
|
||
{
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取下一步审核人
|
||
/// </summary>
|
||
/// <param name="costManageId"></param>
|
||
/// <returns></returns>
|
||
public static Model.CostGoods_CostManageFlowOperate getNextCostManageFlowOperateList(string costManageId, string operaterId)
|
||
{
|
||
int minSortIndex = 1;
|
||
var getAllNoClose = Funs.DB.CostGoods_CostManageFlowOperate.Where(x => x.CostManageId == costManageId && (x.IsClosed == null || x.IsClosed == false));
|
||
if (getAllNoClose.Count() > 0)
|
||
{
|
||
var getFlowOperate = getAllNoClose.Where(x => x.OperaterId == operaterId);
|
||
if (getFlowOperate.Count() > 0)
|
||
{
|
||
minSortIndex = (getFlowOperate.Min(x => x.SortIndex) ?? 0) + 1;
|
||
}
|
||
else
|
||
{
|
||
minSortIndex = getAllNoClose.Min(x => x.SortIndex) ?? 1;
|
||
}
|
||
|
||
return getAllNoClose.FirstOrDefault(x => x.SortIndex == minSortIndex);
|
||
}
|
||
else
|
||
{
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据新增费用申请表 自动生成审核流程表
|
||
/// </summary>
|
||
public static void AddCostManageFlowOperate(Model.CostGoods_CostManage costManage)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
List<Model.CostGoods_CostManageFlowOperate> flowList = new List<CostGoods_CostManageFlowOperate>();
|
||
/// 施工单位
|
||
if (ProjectUnitService.GetProjectUnitTypeByProjectIdUnitId(costManage.ProjectId, costManage.UnitId))
|
||
{
|
||
string cUnitId = Const.UnitId_SEDIN;
|
||
var getUnit = db.Project_ProjectUnit.FirstOrDefault(x => x.ProjectId == costManage.ProjectId && x.UnitType == Const.ProjectUnitType_1);
|
||
if (getUnit != null && !string.IsNullOrEmpty(getUnit.UnitId))
|
||
{
|
||
cUnitId = getUnit.UnitId;
|
||
}
|
||
|
||
//// 分包单位项目经理审批、总包单位HSE经理审核、总包单位项目控制经理审核、总包单位项目经理审批
|
||
var Flow1 = new CostGoods_CostManageFlowOperate()
|
||
{
|
||
FlowOperateId = SQLHelper.GetNewID(),
|
||
CostManageId = costManage.CostManageId,
|
||
AuditFlowName = "分包单位项目经理审批",
|
||
SortIndex = 1,
|
||
UnitId = costManage.UnitId,
|
||
IsClosed = false,
|
||
};
|
||
flowList.Add(Flow1);
|
||
|
||
var Flow2 = new CostGoods_CostManageFlowOperate()
|
||
{
|
||
FlowOperateId = SQLHelper.GetNewID(),
|
||
CostManageId = costManage.CostManageId,
|
||
AuditFlowName = "总包单位HSE经理审核",
|
||
SortIndex = 2,
|
||
UnitId = cUnitId,
|
||
IsClosed = false,
|
||
};
|
||
flowList.Add(Flow2);
|
||
|
||
var Flow3 = new CostGoods_CostManageFlowOperate()
|
||
{
|
||
FlowOperateId = SQLHelper.GetNewID(),
|
||
CostManageId = costManage.CostManageId,
|
||
AuditFlowName = "总包单位项目控制经理审核",
|
||
SortIndex = 3,
|
||
UnitId = cUnitId,
|
||
IsClosed = false,
|
||
};
|
||
flowList.Add(Flow3);
|
||
|
||
var Flow4 = new CostGoods_CostManageFlowOperate()
|
||
{
|
||
FlowOperateId = SQLHelper.GetNewID(),
|
||
CostManageId = costManage.CostManageId,
|
||
AuditFlowName = "总包单位项目经理审批",
|
||
SortIndex = 4,
|
||
UnitId = cUnitId,
|
||
IsClosed = false,
|
||
};
|
||
flowList.Add(Flow4);
|
||
|
||
}
|
||
else ///非施工单位
|
||
{
|
||
////安全工程师发起、安全经理审核、项目经理批准
|
||
var Flow1 = new CostGoods_CostManageFlowOperate()
|
||
{
|
||
FlowOperateId = SQLHelper.GetNewID(),
|
||
CostManageId = costManage.CostManageId,
|
||
AuditFlowName = "安全经理审核",
|
||
SortIndex = 1,
|
||
UnitId = costManage.UnitId,
|
||
IsClosed = false,
|
||
};
|
||
flowList.Add(Flow1);
|
||
|
||
var Flow2 = new CostGoods_CostManageFlowOperate()
|
||
{
|
||
FlowOperateId = SQLHelper.GetNewID(),
|
||
CostManageId = costManage.CostManageId,
|
||
AuditFlowName = "项目经理批准",
|
||
SortIndex = 2,
|
||
UnitId = costManage.UnitId,
|
||
IsClosed = false,
|
||
};
|
||
|
||
flowList.Add(Flow2);
|
||
}
|
||
|
||
if (flowList.Count() > 0)
|
||
{
|
||
db.CostGoods_CostManageFlowOperate.InsertAllOnSubmit(flowList);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 审核意见更新
|
||
/// </summary>
|
||
/// <param name="flow"></param>
|
||
public static void updateCostManageFlowOperate(Model.CostGoods_CostManageFlowOperate flow)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var getData = db.CostGoods_CostManageFlowOperate.FirstOrDefault(x => x.FlowOperateId == flow.FlowOperateId);
|
||
if (getData != null)
|
||
{
|
||
getData.OperaterId = flow.OperaterId;
|
||
getData.OperaterTime = flow.OperaterTime;
|
||
getData.IsAgree = flow.IsAgree;
|
||
getData.Opinion = flow.Opinion;
|
||
getData.IsClosed = flow.IsClosed;
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 所以关闭步骤 打开
|
||
/// </summary>
|
||
/// <param name="flow"></param>
|
||
public static void updateOpenCostManageFlowOperate(string costManageId)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var getDatas = db.CostGoods_CostManageFlowOperate.Where(x => x.CostManageId == costManageId && x.IsClosed == true);
|
||
foreach (var item in getDatas)
|
||
{
|
||
item.IsClosed = false;
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
/// <param name="costMangeId"></param>
|
||
public static void deleteCostManageFlowOperate(string costManageId)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var getData = db.CostGoods_CostManageFlowOperate.Where(x => x.CostManageId == costManageId);
|
||
if (getData.Count() > 0)
|
||
{
|
||
db.CostGoods_CostManageFlowOperate.DeleteAllOnSubmit(getData);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
public static string PushDataToHSE(string projectId, string contractNum,string costManageId)
|
||
{
|
||
try
|
||
{
|
||
string message = "";
|
||
// 查询当前合同所有审核通过的数据
|
||
var costData = from x in Funs.DB.CostGoods_CostManage
|
||
where x.ProjectId == projectId && x.ContractNum == contractNum && x.States == Const.State_2
|
||
orderby x.CostManageDate descending
|
||
select x;
|
||
var projectModel=ProjectService.GetProjectByProjectId(projectId);
|
||
var contractModel = CostManageService.GetCostManageById(costManageId);
|
||
decimal totalAmount = costData.Sum(x => x.SumMoney ?? 0);
|
||
var files = new List<object>();
|
||
if (contractModel!=null)
|
||
{
|
||
var fileDetails = GetBase64FilesWithDetails(contractModel.CostManageId);
|
||
if (fileDetails != null && fileDetails.Count > 0)
|
||
{
|
||
files.AddRange(fileDetails);
|
||
}
|
||
|
||
// 构建请求体
|
||
var requestBody = new
|
||
{
|
||
projectNumber = projectModel.ProjectCode,
|
||
contractNo = contractNum,
|
||
amountHSE = totalAmount.ToString(),
|
||
files = files
|
||
};
|
||
var jsonBody = JsonConvert.SerializeObject(requestBody);
|
||
|
||
// 调用HSE接口推送数据
|
||
var url = "http://172.29.60.33:8080";
|
||
var requestGetTokenUrl = url + "/auth/getToken";
|
||
string requestGetTokenBody = "{\"username\": \"coadmin\",\"password\": \"coadminPu@2025\"}";
|
||
var response = Funs.RequestPost(requestGetTokenUrl, "", requestGetTokenBody);
|
||
var responseStr = JsonConvert.DeserializeObject<JObject>(response);
|
||
APICommonService.SaveSysHttpLog("PU_Token", requestGetTokenUrl, response);
|
||
|
||
if (responseStr == null || responseStr["code"]?.ToString() != "200" || responseStr["data"] == null)
|
||
{
|
||
message = "获取Pu系统Token失败";
|
||
return message;
|
||
}
|
||
|
||
string accessToken = responseStr["data"]["token"]?.ToString();
|
||
if (string.IsNullOrEmpty(accessToken))
|
||
{
|
||
message = "获取Pu系统Token失败,Token为空";
|
||
return message;
|
||
}
|
||
Dictionary<string, string> headers = new Dictionary<string, string>();
|
||
headers.Add("Authorization", "Bearer " + accessToken);
|
||
var requestUrl = url + "/pu_api/payCraftAmountToHSE/add";
|
||
APICommonService.SaveSysHttpLog("PU_AddPuPayCraftAmount", requestUrl, jsonBody, "Requset");
|
||
var responseHSE = Funs.RequestPost(requestUrl, headers, jsonBody);
|
||
var responseHSEStr = JsonConvert.DeserializeObject<JObject>(responseHSE);
|
||
APICommonService.SaveSysHttpLog("PU_AddPuPayCraftAmount", requestUrl, responseHSE, "Response");
|
||
if (responseHSEStr == null)
|
||
{
|
||
message = "推送数据到HSE系统失败";
|
||
return message;
|
||
}
|
||
else if (responseHSEStr["code"]?.ToString() != "200")
|
||
{
|
||
message = responseHSEStr["message"]?.ToString();
|
||
return message;
|
||
}
|
||
else
|
||
{
|
||
message = "";
|
||
return message;
|
||
}
|
||
}
|
||
|
||
return message;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
// 记录错误日志
|
||
ErrLogInfo.WriteLog(ex.Message, ex.StackTrace);
|
||
return "推送数据失败";
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取Base64编码的附件文件
|
||
/// </summary>
|
||
public static List<object> GetBase64FilesWithDetails(string costManageId)
|
||
{
|
||
var result = new List<object>();
|
||
// 获取费用管理信息
|
||
var costManage = GetCostManageById(costManageId);
|
||
// 获取附件文件
|
||
var attachments = AttachFileService.getFileUrl(costManageId);
|
||
|
||
if (!string.IsNullOrEmpty(attachments))
|
||
{
|
||
string[] filePaths = attachments.Split(',');
|
||
foreach (var filePath in filePaths)
|
||
{
|
||
string fullPath = Funs.RootPath + filePath;
|
||
if (File.Exists(fullPath))
|
||
{
|
||
FileInfo file = new FileInfo(fullPath);
|
||
byte[] fileBytes = File.ReadAllBytes(fullPath);
|
||
string base64Content = Convert.ToBase64String(fileBytes);
|
||
|
||
result.Add(new Model.PuPayCraftAmountFileInput
|
||
{
|
||
name = file.Name,
|
||
content = base64Content,
|
||
thisamount = costManage?.SumMoney?.ToString() ?? "0",
|
||
date = costManage?.CostManageDate?.ToString("yyyy-MM-dd") ?? DateTime.Now.ToString("yyyy-MM-dd")
|
||
});
|
||
}
|
||
else
|
||
{
|
||
/* message += $"附件文件路径 {fullPath} 不存在!";
|
||
ErrLogInfo.WriteLog(message, $"File not found: {fullPath}");*/
|
||
}
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
}
|
||
}
|