using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Data.SqlClient; using System; using System.Data; using System.Dynamic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Xml.Serialization; using wispro.sp.entity; using wispro.sp.utility; namespace wispro.sp.ipeasyApi.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class ipEasyController : ControllerBase { /// /// 从维德系统中获取报表数据 /// /// 报告名称 /// 是否从上月1日开始取上月的整月数据 /// public byte[] GetDataFromIPEasy(string ReportName, bool isModifyDate) { DataTable dt = new DataTable(); string strSQL = ""; switch (ReportName) { case "每月绩效统计--发客户超过一个月未完成案件": strSQL = @"SELECT p_case_info.case_volume as 我方文号, i_apply_type.apply_type_zh_cn as 申请类型, i_business_type.business_type_zh_cn as 业务类型, i_ctrl_proc.ctrl_proc_zh_cn as 处理事项, (select case_status_zh_cn from i_case_status where case_status_id=p_proc_info.review_stage) as 案件阶段, i_case_coefficient.case_coefficient_zh_cn as 案件系数, i_proc_coefficient.proc_coefficient_zh_cn as 处理事项系数, (select proc_coefficient_zh_cn from p_proc_info pr left join i_proc_coefficient pc on pc.proc_coefficient_id=pr.proc_coefficient_id where case_id=p_case_info.case_id and ctrl_proc_id='8b96378e-05a0-4a8d-b3d1-39af92fddaf5' and pr.seq= (select max(seq) from p_proc_info pr where case_id=p_case_info.case_id and ctrl_proc_id='8b96378e-05a0-4a8d-b3d1-39af92fddaf5'and seq= @beginTime and p_proc_info.finish_date<@endTime)) "; break; case "每月绩效统计--中国一次OA授权表": strSQL = @"select p_case_info.case_volume as 我方文号, p_case_info.case_name as 案件名称, p_case_info.app_no as 申请号, c_customer.customer_name as 客户名称, STUFF((SELECT ',' + u.cn_name from p_proc_pic_list as pl inner join s_user_info as u on u.user_id = pl.pic_id where pl.obj_id = p_case_info.case_id FOR XML PATH('') ),1,1,'') as 案件处理人, STUFF((SELECT ',' + u.cn_name from p_revise_user_list as pl inner join s_user_info as u on u.user_id = pl.revise_user_id where pl.obj_id = p_case_info.case_id FOR XML PATH('') ),1,1,'') as 案件核稿人, p_file_list.post_date as 发文日期, p_case_info.case_volume_customer as 客户文号, p_case_info.app_date as 申请日, i_country.country_zh_cn as '国家(地区)', STUFF((SELECT ',' + a.applicant_name_cn from p_applicant_list as al inner join i_applicant as a on a.applicant_id = al.applicant_id where al.obj_id = p_case_info.case_id order by al.seq FOR XML PATH('') ),1,1,'') as 申请人, p_file_list.upload_time as 上传日期, i_file_desc.file_desc_zh_cn as 文件描述, i_apply_type.apply_type_zh_cn as 申请类型, STUFF((SELECT ',' + ui.cn_name from p_sales_list as sl inner join dbo.s_user_info as ui on ui.user_id = sl.sales_user_id where sl.obj_id = p_case_info.case_id AND sl.is_enabled=1 order by sl.seq FOR XML PATH('') ),1,1,'') as 业务人员 from p_case_info inner join i_apply_type on p_case_info.apply_type_id=i_apply_type.apply_type_id inner join p_proc_info on p_case_info.case_id=p_proc_info.case_id inner join p_file_list on p_file_list.obj_id=p_proc_info.proc_id inner join i_file_desc on i_file_desc.file_desc_id=p_file_list.file_desc_id inner join c_customer on p_case_info.customer_id=c_customer.customer_id inner join i_country on i_country.country_id=p_case_info.country_id where p_case_info.is_enabled=1 and p_proc_info.is_enabled=1 and p_case_info.country_id='CN' and p_file_list.file_desc_id='09800D39-D585-49F3-B9DE-50AC689DE9AB' and p_file_list.file_name not like '%.zip' and (select count(*) from p_proc_info where case_id=p_case_info.case_id and ctrl_proc_id='8b96378e-05a0-4a8d-b3d1-39af92fddaf5')=1 and (p_case_info.case_type_id='31D1A147-2931-43B5-94AE-B72B1525BA8A' ) AND ((p_file_list.upload_time >= @beginTime and p_file_list.upload_time<@endTime))"; break; case "每月绩效统计--专案进度跟踪~S卷": strSQL = @"SELECT p_case_info.case_volume as 我方文号, p_case_info.case_name as 案件名称, i_case_type.case_type_zh_cn as 案件类型, i_business_type.business_type_zh_cn as 业务类型, i_country.country_zh_cn as '国家(地区)', c_customer.customer_name as 客户名称, s_dept_info.dept_full_name as 承办部门, i_case_status.case_status_zh_cn as 案件状态, i_ctrl_proc.ctrl_proc_zh_cn as 处理事项, p_proc_info.int_due_date as 内部期限, p_proc_info.cus_due_date as 客户期限, p_proc_info.legal_due_date as 官方期限, p_proc_info.finish_doc_date as 定稿日, STUFF((SELECT ',' + u.cn_name from p_proc_pic_list as pl inner join s_user_info as u on u.user_id = pl.pic_id where pl.obj_id = p_proc_info.proc_id FOR XML PATH('') ),1,1,'') as 处理人, p_case_info.charge_date as 委案日期, (select proc_status_zh_cn from i_proc_status where proc_status_id=p_proc_info.proc_status_id) as 处理状态, p_proc_info.first_doc_date as 初稿日, STUFF((SELECT ',' + u.cn_name from c_customer_user as cu inner join s_user_info as u on u.user_id = cu.user_id where cu.customer_id = p_case_info.customer_id FOR XML PATH('') ),1,1,'') as 流程负责人, p_proc_info.finish_date as 处理事项完成日, STUFF((SELECT ',' + ui.cn_name from p_sales_list as sl inner join dbo.s_user_info as ui on ui.user_id = sl.sales_user_id where sl.obj_id = p_case_info.case_id AND sl.is_enabled=1 order by sl.seq FOR XML PATH('') ),1,1,'') as 业务人员 from p_case_info inner join p_case_advance_info with(nolock) on p_case_info.case_id=p_case_advance_info.case_id inner join i_apply_type with(nolock) on i_apply_type.apply_type_id=p_case_info.apply_type_id inner join i_case_type with(nolock) on i_case_type.case_type_id=p_case_info.case_type_id inner join i_country with(nolock) on i_country.country_id=p_case_info.country_id inner join i_case_status with(nolock) on i_case_status.case_status_id=p_case_info.case_status_id inner join c_customer with(nolock) on c_customer.customer_id=p_case_info.customer_id inner join p_proc_info with(nolock) on p_case_info.case_id=p_proc_info.case_id inner join i_ctrl_proc with(nolock) on p_proc_info.ctrl_proc_id=i_ctrl_proc.ctrl_proc_id inner join i_business_type on i_business_type.business_type_id = p_case_info.business_type_id inner join s_dept_info on s_dept_info.dept_id = p_case_info.charge_dept_id where p_case_info.is_enabled=1 and p_proc_info.is_enabled=1 and (isnull (p_proc_info.finish_date,'') ='') AND (i_ctrl_proc.ctrl_proc_zh_cn='提出报告')"; break; case "每月绩效统计--专案开卷报表~S卷": strSQL = @"SELECT p_case_info.case_volume as 我方文号, p_case_info.case_volume_customer as 客户文号, p_case_info.case_name as 案件名称, p_case_info.charge_date as 委案日期, i_case_status.case_status_zh_cn as 案件状态, i_case_type.case_type_zh_cn as 案件类型, p_case_info.app_no as 申请号, p_case_info.app_date as 申请日, i_business_type.business_type_zh_cn as 业务类型, STUFF((SELECT ',' + u.cn_name from c_customer_user as cu inner join s_user_info as u on u.user_id = cu.user_id where cu.customer_id = p_case_info.customer_id FOR XML PATH('') ),1,1,'') as 流程负责人, c_customer.customer_name as 客户名称, STUFF((SELECT ',' + u.cn_name from p_revise_user_list as pl inner join s_user_info as u on u.user_id = pl.revise_user_id where pl.obj_id = p_case_info.case_id FOR XML PATH('') ),1,1,'') as 案件核稿人, STUFF((SELECT ',' + u.cn_name from p_proc_pic_list as pl inner join s_user_info as u on u.user_id = pl.pic_id where pl.obj_id = p_case_info.case_id FOR XML PATH('') ),1,1,'') as 案件处理人, p_case_info.create_time as 开卷日期, STUFF((SELECT ',' + ui.cn_name from p_sales_list as sl inner join dbo.s_user_info as ui on ui.user_id = sl.sales_user_id where sl.obj_id = p_case_info.case_id AND sl.is_enabled=1 order by sl.seq FOR XML PATH('') ),1,1,'') as 业务人员, i_country.country_zh_cn as '国家(地区)' from p_case_info inner join p_case_advance_info with(nolock) on p_case_info.case_id=p_case_advance_info.case_id inner join i_apply_type with(nolock) on i_apply_type.apply_type_id=p_case_info.apply_type_id inner join i_case_type with(nolock) on i_case_type.case_type_id=p_case_info.case_type_id inner join i_country with(nolock) on i_country.country_id=p_case_info.country_id inner join i_case_status with(nolock) on i_case_status.case_status_id=p_case_info.case_status_id inner join c_customer with(nolock) on c_customer.customer_id=p_case_info.customer_id inner join i_business_type on i_business_type.business_type_id = p_case_info.business_type_id inner join s_dept_info on s_dept_info.dept_id = p_case_info.charge_dept_id where p_case_info.is_enabled=1 p_case_info.is_enabled=1 and p_case_info.case_volume like 'S%' and not p_case_info.case_volume like 'SC%' and i_case_status.case_status_zh_cn<>'已完成' and i_case_status.case_status_zh_cn<>'结案'"; break; } using (var conn = new SqlConnection(ConfigHelper.GetSectionValue("IPEasySetting:ConnectionStrings"))) { try { conn.Open(); using (var cmd = conn.CreateCommand()) { cmd.CommandText = strSQL; cmd.CommandType = CommandType.Text; if (isModifyDate) { cmd.Parameters.Add(new SqlParameter("beginTime", DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01"))); cmd.Parameters.Add(new SqlParameter("endTime", DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01"))); } using (var reader = cmd.ExecuteReader()) { dt.Load(reader); } } } catch (Exception ex) { throw ex; } } dt.TableName = $"{ReportName}"; MemoryStream memory = new MemoryStream(); XmlSerializer serializer = new XmlSerializer(typeof(System.Data.DataTable)); System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(memory); serializer.Serialize(writer, dt); byte[] temp = memory.ToArray(); return temp; } /// /// 从维德系统中获取专案数据 /// /// public byte[] getProjectDataFromIPEasy() { DataTable dt = new DataTable(); string strSQL = @"SELECT p_case_info.case_volume as 我方文号, p_case_info.case_volume_customer as 客户文号, p_case_info.case_name as 案件名称, p_case_info.charge_date as 委案日期, i_case_status.case_status_zh_cn as 案件状态, i_case_type.case_type_zh_cn as 案件类型, p_case_info.app_no as 申请号, p_case_info.app_date as 申请日, i_business_type.business_type_zh_cn as 业务类型, STUFF((SELECT ',' + u.cn_name from c_customer_user as cu inner join s_user_info as u on u.user_id = cu.user_id where cu.customer_id = p_case_info.customer_id FOR XML PATH('') ),1,1,'') as 流程负责人, c_customer.customer_name as 客户名称, STUFF((SELECT ',' + u.cn_name from p_revise_user_list as pl inner join s_user_info as u on u.user_id = pl.revise_user_id where pl.obj_id = p_case_info.case_id FOR XML PATH('') ),1,1,'') as 案件核稿人, STUFF((SELECT ',' + u.cn_name from p_proc_pic_list as pl inner join s_user_info as u on u.user_id = pl.pic_id where pl.obj_id = p_case_info.case_id FOR XML PATH('') ),1,1,'') as 案件处理人, p_case_info.create_time as 开卷日期, STUFF((SELECT ',' + ui.cn_name from p_sales_list as sl inner join dbo.s_user_info as ui on ui.user_id = sl.sales_user_id where sl.obj_id = p_case_info.case_id AND sl.is_enabled=1 order by sl.seq FOR XML PATH('') ),1,1,'') as 业务人员, i_country.country_zh_cn as '国家(地区)' from p_case_info inner join p_case_advance_info with(nolock) on p_case_info.case_id=p_case_advance_info.case_id inner join i_apply_type with(nolock) on i_apply_type.apply_type_id=p_case_info.apply_type_id inner join i_case_type with(nolock) on i_case_type.case_type_id=p_case_info.case_type_id inner join i_country with(nolock) on i_country.country_id=p_case_info.country_id inner join i_case_status with(nolock) on i_case_status.case_status_id=p_case_info.case_status_id inner join c_customer with(nolock) on c_customer.customer_id=p_case_info.customer_id inner join i_business_type on i_business_type.business_type_id = p_case_info.business_type_id inner join s_dept_info on s_dept_info.dept_id = p_case_info.charge_dept_id where p_case_info.is_enabled=1 and p_case_info.case_volume like 'S%' and not p_case_info.case_volume like 'SCN%' and i_case_status.case_status_zh_cn<>'已完成' and i_case_status.case_status_zh_cn<>'结案' order by 我方文号"; using (var conn = new SqlConnection(ConfigHelper.GetSectionValue("IPEasySetting:ConnectionStrings"))) { try { conn.Open(); using (var cmd = conn.CreateCommand()) { cmd.CommandText = strSQL; cmd.CommandType = CommandType.Text; using (var reader = cmd.ExecuteReader()) { dt.Load(reader); } } } catch (Exception ex) { throw ex; } } dt.TableName = $"专案数据"; MemoryStream memory = new MemoryStream(); XmlSerializer serializer = new XmlSerializer(typeof(System.Data.DataTable)); System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(memory); serializer.Serialize(writer, dt); byte[] temp = memory.ToArray(); return temp; } /// /// 从维德系统中获取案件信息 /// /// 案件号 /// 处理事项 /// 案件阶段,默认为空 /// 返回案件记录,如果数据库中有多条记录,返回完成日最后的那条记录 [HttpGet, HttpPost] public ExpandoObject GetItemFromIPEasyDB(string CaseNo,string DoItem,string CaseStage=null) { dynamic retItem = new ExpandoObject(); var dt = new DataTable(); using (var conn = new SqlConnection(ConfigHelper.GetSectionValue("IPEasySetting:ConnectionStrings"))) { try { conn.Open(); string strSql = @"SELECT distinct p_case_info.case_volume as case_volume, i_apply_type.apply_type_zh_cn as apply_type_zh_cn, i_business_type.business_type_zh_cn as business_type_zh_cn, i_ctrl_proc.ctrl_proc_zh_cn as ctrl_proc_zh_cn, (select case_status_zh_cn from i_case_status where case_status_id=p_proc_info.review_stage) as review_stage, i_case_coefficient.case_coefficient_zh_cn as case_coefficient, i_proc_coefficient.proc_coefficient_zh_cn as proc_coefficient, (select proc_coefficient_zh_cn from p_proc_info pr left join i_proc_coefficient pc on pc.proc_coefficient_id=pr.proc_coefficient_id where case_id=p_case_info.case_id and ctrl_proc_id='8b96378e-05a0-4a8d-b3d1-39af92fddaf5' and pr.seq= (select max(seq) from p_proc_info pr where case_id=p_case_info.case_id and ctrl_proc_id='8b96378e-05a0-4a8d-b3d1-39af92fddaf5'and seq 1) { bool bRet = false; DateTime preFinishedDate = DateTime.MinValue; foreach (DataRow row in dt.Rows) { DateTime temDate = DateTime.Now; DateTime.TryParse(row["finish_date"].ToString(), out temDate); if ((preFinishedDate < temDate) && (!string.IsNullOrEmpty(CaseStage) && CaseStage == row["review_stage"].ToString())) { preFinishedDate = temDate; GetItemData(retItem, row); bRet = true; //break; } } if (!bRet) { DataRow row = dt.Rows[0]; GetItemData(retItem, row); } } else { if (dt.Rows.Count > 0) { DataRow row = dt.Rows[0]; GetItemData(retItem, row); } } } } } catch (Exception ex) { // error handling throw; } finally { conn.Close(); } } return retItem as ExpandoObject; } private static void GetItemData(dynamic retItem, DataRow row) { retItem.CaseNo = row["case_volume"].ToString(); retItem.ApplicationType = row["apply_type_zh_cn"].ToString(); retItem.BusinessType = row["business_type_zh_cn"].ToString(); retItem.DoItem = row["ctrl_proc_zh_cn"].ToString(); ; retItem.CaseStage = row["review_stage"].ToString(); retItem.CaseCoefficient = row["case_coefficient"].ToString(); retItem.DoItemCoefficient = row["proc_coefficient"].ToString(); retItem.DoPersons = row["pic"].ToString(); retItem.Reviewer = row["reviser"].ToString(); retItem.CustomerName = row["customer_name"].ToString(); retItem.FinishedDate = row["finish_date"].ToString(); retItem.WordCount = row["translate_count"].ToString(); retItem.ReturnDate = row["back_date"].ToString(); retItem.CaseType = row["case_type_zh_cn"].ToString(); retItem.CaseState = row["case_status_zh_cn"].ToString(); retItem.DoItemState = row["proc_status_zh_cn"].ToString(); retItem.DoItemMemo = row["proc_note"].ToString(); retItem.CaseName = row["case_name"].ToString(); retItem.EntrustingDate = row["charge_date"].ToString(); retItem.CustomerLimitDate = row["cus_due_date"].ToString(); retItem.InternalDate = row["int_due_date"].ToString(); retItem.FirstDraftDate = row["first_doc_date"].ToString(); retItem.CaseMemo = row["case_remark"].ToString(); retItem.FinalizationDate = row["finish_doc_date"].ToString(); retItem.WorkflowUser = row["sales"].ToString(); retItem.Country = row["country_zh_cn"].ToString(); } } }