using Model; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace BLL { /// /// 安全费用管理 /// public static class CostManageService { /// /// 根据主键获取安全费用管理 /// /// /// public static Model.CostGoods_CostManage GetCostManageById(string costManageId) { return Funs.DB.CostGoods_CostManage.FirstOrDefault(e => e.CostManageId == costManageId); } /// /// 获取 已支付的HSE费用 /// /// /// /// 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; } } /// /// 添加安全费用管理 /// /// 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); } /// /// 修改费用管理 /// /// 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(); } } } /// /// 根据主键删除费用管理 /// /// 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(); } } } /// /// 按照明细取当前单据总费用 /// /// 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(); } } } /// /// 根据主表ID获取审核列表 /// /// /// public static List getCostManageFlowOperateList(string costManageId) { return (from x in Funs.DB.CostGoods_CostManageFlowOperate where x.CostManageId == costManageId orderby x.SortIndex select x).ToList(); } /// /// 获取当前步骤审核人 /// /// /// 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; } } /// /// 获取下一步审核人 /// /// /// 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; } } /// /// 根据新增费用申请表 自动生成审核流程表 /// public static void AddCostManageFlowOperate(Model.CostGoods_CostManage costManage) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { List flowList = new List(); /// 施工单位 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(); } } } /// /// 审核意见更新 /// /// 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(); } } } /// /// 所以关闭步骤 打开 /// /// 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(); } } } /// /// /// /// 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(); if (contractModel != null) { var url = ConstValue.GetConstByConstText("PU_PUSH_URL")?.ConstValue; if (string.IsNullOrEmpty(url)) { message = "未配置推送接口地址"; return message; } var requestGetTokenUrl = url + "/auth/getToken"; string requestGetTokenBody = "{\"username\": \"coadmin\",\"password\": \"coadminPu@2025\"}"; var response = Funs.RequestPost(requestGetTokenUrl, "", requestGetTokenBody); var responseStr = JsonConvert.DeserializeObject(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 headers = new Dictionary(); headers.Add("Authorization", "Bearer " + accessToken); #region 先获取当前费用是否已经推送过 var getRequestUrl = url + "/pu_api/payCraftAmountToHSE/get"; var getRequestbody = $"{{\"projectNumber\":\"{projectModel.ContractNo}\",\"contractNo\":\"{contractNum}\"}}"; APICommonService.SaveSysHttpLog("PU_GetPuPayCraftAmount", getRequestUrl, getRequestbody, "Requset"); var getResponse = Funs.RequestPost(getRequestUrl, headers, getRequestbody); APICommonService.SaveSysHttpLog("PU_GetPuPayCraftAmount", getRequestUrl, getResponse, "Response"); var getResponseStr = JsonConvert.DeserializeObject(getResponse); if (getResponseStr == null) { message = "推送数据到HSE系统失败"; return message; } else if (getResponseStr["code"]?.ToString() != "200") { message = getResponseStr["message"]?.ToString(); return message; } var getResponseOutput = JsonConvert.DeserializeObject>(getResponseStr["data"]?.ToString()); if (getResponseOutput.Any() && getResponseOutput.Count(x => x.itemNo == costManageId) > 0) { message = "当前费用已推送,无需重复推送!"; return message; } #endregion #region 推送数据至Pu var requestUrl = url + "/pu_api/payCraftAmountToHSE/add"; // 构建请求体 var fileDetails = GetBase64FilesWithDetails(contractModel.CostManageId); if (fileDetails != null && fileDetails.Count > 0) { files.AddRange(fileDetails); } List puAddApiInputs = new List() { new PuAddApiInput() { projectNumber = projectModel.ContractNo, itemId= costManageId, contractNo = contractNum, amountHSE = contractModel.SumMoney.ToString(), files = files } }; var jsonBody = JsonConvert.SerializeObject(puAddApiInputs); APICommonService.SaveSysHttpLog("PU_AddPuPayCraftAmount", requestUrl, jsonBody, "Requset"); var responseHSE = Funs.RequestPost(requestUrl, headers, jsonBody); var responseHSEStr = JsonConvert.DeserializeObject(responseHSE); APICommonService.SaveSysHttpLog("PU_AddPuPayCraftAmount", requestUrl, responseHSE, "Response"); if (responseHSEStr == null) { message = "推送数据到HSE系统失败"; return message; } else if (string.IsNullOrEmpty(responseHSEStr["code"]?.ToString())) { message = responseHSE; return message; } else if (responseHSEStr["code"]?.ToString() != "200") { message = responseHSEStr["message"]?.ToString(); return message; } else { message = ""; return message; } #endregion } return message; } catch (Exception ex) { // 记录错误日志 ErrLogInfo.WriteLog(ex.Message, ex.StackTrace); return "推送数据失败"; } } /// /// 获取Base64编码的附件文件 /// public static List GetBase64FilesWithDetails(string costManageId) { var result = new List(); // 获取费用管理信息 var costManage = GetCostManageById(costManageId); var costItem = BLL.CostManageItemService.GetCostManageItemByCostManageId(costManageId); foreach (var item in costItem) { // 获取附件文件 var attachments = AttachFileService.getFileUrl(item.CostManageItemId); 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 = item?.PriceMoney?.ToString() ?? "0", date = costManage?.CompileDate?.ToString("yyyy-MM-dd") ?? DateTime.Now.ToString("yyyy-MM-dd") }); continue;//只取第一个文件 } } } } return result; } } }