SGGL_SHJ/SGGL/BLL/HSSE/CostGoods/CostManageService.cs

547 lines
23 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Model;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
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 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<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);
#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<JObject>(getResponse);
if (getResponseStr == null)
{
message = "推送数据到HSE系统失败";
return message;
}
else if (getResponseStr["code"]?.ToString() != "200")
{
message = getResponseStr["message"]?.ToString();
return message;
}
var getResponseOutput = JsonConvert.DeserializeObject<List<PuGetApiOutput>>(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<PuAddApiInput> puAddApiInputs = new List<PuAddApiInput>()
{
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<JObject>(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 "推送数据失败";
}
}
/// <summary>
/// 获取Base64编码的附件文件
/// </summary>
public static List<object> GetBase64FilesWithDetails(string costManageId)
{
var result = new List<object>();
// 获取费用管理信息
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;
}
}
}