Commit e0f49c3d by guanzhenshan

增加4k销售利润页面

parent b12ac163
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.Models
{
public class mMonthSaleProfit4K_Input
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
///
/// </summary>
public string month { get; set; }
/// <summary>
/// 营业收入
/// </summary>
public decimal? incoming_operating { get; set; }
/// <summary>
/// SAAS套餐收入
/// </summary>
public decimal? incoming_operating_saas { get; set; }
/// <summary>
/// 测评收入
/// </summary>
public decimal? incoming_operating_test { get; set; }
/// <summary>
/// DSP服务收入
/// </summary>
public decimal? incoming_operating_dsp { get; set; }
/// <summary>
/// MH代理收入
/// </summary>
public decimal? incoming_operating_mh { get; set; }
/// <summary>
/// 代运营收入
/// </summary>
public decimal? incoming_operating_tp { get; set; }
/// <summary>
/// 粉丝系统服务收入
/// </summary>
public decimal? incoming_operating_fansservice { get; set; }
/// <summary>
/// 其他收入
/// </summary>
public decimal? incoming_operating_other { get; set; }
/// <summary>
/// 减:营业成本
/// </summary>
public decimal? cost_operating { get; set; }
/// <summary>
/// IT人工成本
/// </summary>
public decimal? cost_operating_it { get; set; }
/// <summary>
/// DSP渠道成本
/// </summary>
public decimal? cost_operating_dspchannel { get; set; }
/// <summary>
/// DSP签约成本
/// </summary>
public decimal? cost_operating_dspsign { get; set; }
/// <summary>
/// 代运营成本
/// </summary>
public decimal? cost_operating_tp { get; set; }
/// <summary>
/// MH客户成本
/// </summary>
public decimal? cost_operating_mh { get; set; }
/// <summary>
/// 营业税金及附加
/// </summary>
public decimal? cost_operating_taxes { get; set; }
/// <summary>
/// 销售费用
/// </summary>
public decimal? cost_operating_sales { get; set; }
/// <summary>
/// 管理费用
/// </summary>
public decimal? cost_operating_manager { get; set; }
/// <summary>
/// 财务费用
/// </summary>
public decimal? cost_operating_finance { get; set; }
/// <summary>
/// 其中:汇兑损益
/// </summary>
public decimal? cost_operating_exchange { get; set; }
/// <summary>
/// 资产减值损失
/// </summary>
public decimal? cost_operating_assets_impairment { get; set; }
/// <summary>
/// 加:公允价值变动收益(损失以“-”号填列)
/// </summary>
public decimal? cost_operating_fair_value_change { get; set; }
/// <summary>
/// 投资收益(损失以“-”号填列)
/// </summary>
public decimal? cost_operating_investment { get; set; }
/// <summary>
/// 其中:对联营企业和合营企业的投资收益
/// </summary>
public decimal? cost_operating_investment_in { get; set; }
/// <summary>
/// 营业利润(亏损以“-”号填列)
/// </summary>
public decimal? profit_operating { get; set; }
/// <summary>
/// 加:营业外收入
/// </summary>
public decimal? incoming_out_operating { get; set; }
/// <summary>
/// 减:营业外支出
/// </summary>
public decimal? cost_out_operating { get; set; }
/// <summary>
/// 其中:非流动资产处置损失
/// </summary>
public decimal? loss_ondisposal_noncurrent_assets { get; set; }
/// <summary>
/// 利润总额(亏损总额以“-”号填列)
/// </summary>
public decimal? profit { get; set; }
/// <summary>
/// 减:所得税费用
/// </summary>
public decimal? fee_income_tax { get; set; }
/// <summary>
/// 净利润
/// </summary>
public decimal? profit_retained { get; set; }
/// <summary>
///
/// </summary>
public DateTime createtime { get; set; }
/// <summary>
///
/// </summary>
public DateTime lastupdatetime { get; set; }
/// <summary>
///
/// </summary>
public int lastupdateuserid { get; set; }
/// <summary>
///
/// </summary>
public string lastupdateusername { get; set; }
/// <summary>
/// 是否编辑的,1:是,0:否
/// </summary>
public int isedit { get; set; }
}
}
...@@ -7,23 +7,24 @@ namespace Bailun.DC.MonthSaleProfit ...@@ -7,23 +7,24 @@ namespace Bailun.DC.MonthSaleProfit
{ {
class Program class Program
{ {
static async Task Main(string[] args) //static async Task Main(string[] args)
{
Console.WriteLine("启动服务 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
var builder = new HostBuilder().ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Services>();
});
await builder.RunConsoleAsync();
}
//static void Main(string[] args)
//{ //{
// var _services = new Services(); // Console.WriteLine("启动服务 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// var builder = new HostBuilder().ConfigureServices((hostContext, services) =>
// {
// services.AddHostedService<Services>();
// });
// var start = DateTime.Parse("2020-11-01"); // await builder.RunConsoleAsync();
// _services.InitNew(start);
//} //}
static void Main(string[] args)
{
var _services = new Services();
var start = DateTime.Parse("2020-11-01");
//_services.InitNew(start);
_services.InitNew4K(start);
}
} }
} }
...@@ -731,6 +731,7 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code ...@@ -731,6 +731,7 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code
month = day.ToString("yyyy-MM"), month = day.ToString("yyyy-MM"),
isedit = 0, isedit = 0,
}; };
...@@ -742,9 +743,16 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code ...@@ -742,9 +743,16 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code
cn.Open(); cn.Open();
} }
listFinance = cn.Query<dc_base_finance_fee>($"select * from dc_base_finance_fee where company_name in ('(英国)4kmiles technologies ltd','香港四千里数据科技有限公司','YOUNGTOP INTERNATIONAL LIMITED','深圳市四千里数据科技有限公司','4Kmiles tec Limited','广州四千里数据科技有限公司') pay_time>='{day.ToString("yyyy-MM-dd")}' and pay_time<'{day.AddMonths(1).ToString("yyyy-MM-dd")}'").ToList(); listFinance = cn.Query<dc_base_finance_fee>($"select * from dc_base_finance_fee where cost_status=4 and company_name in ('(英国)4kmiles technologies ltd','香港四千里数据科技有限公司','YOUNGTOP INTERNATIONAL LIMITED','深圳市四千里数据科技有限公司','4Kmiles tec Limited','广州四千里数据科技有限公司') and pay_time>='{day.ToString("yyyy-MM-dd")}' and pay_time<'{day.AddMonths(1).ToString("yyyy-MM-dd")}'").ToList();
} }
//收款
var objIncoming = listFinance.Where(a => a.cost_form == 2);
//付款
var objPay = listFinance.Where(a => a.cost_form == 1 || (a.cost_form == 3 && a.is_lend == 2));
m.incoming_operating_other = objIncoming?.Sum(a => a.amount_rmb) ?? 0;
//营业收入=SAAS套餐收入+测评收入+DSP服务收入+MH代理收入+代运营收入+粉丝系统服务收入+其他收入 //营业收入=SAAS套餐收入+测评收入+DSP服务收入+MH代理收入+代运营收入+粉丝系统服务收入+其他收入
...@@ -753,6 +761,17 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code ...@@ -753,6 +761,17 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code
//营业成本=IT人工成本+DSP渠道成本+DSP签约成本+代运营成本+MH客户成本 //营业成本=IT人工成本+DSP渠道成本+DSP签约成本+代运营成本+MH客户成本
m.cost_operating = m.cost_operating_it + m.cost_operating_dspchannel + m.cost_operating_dspsign + m.cost_operating_tp + m.cost_operating_mh; m.cost_operating = m.cost_operating_it + m.cost_operating_dspchannel + m.cost_operating_dspsign + m.cost_operating_tp + m.cost_operating_mh;
//销售费用
m.cost_operating_sales = objPay.Where(a => a.type_name == "差旅费" || a.type_name == "招待费" || a.type_name == "推广费")?.Sum(a => a.amount_rmb) ?? 0;
//管理费用
m.cost_operating_manager = objPay.Where(a => a.type_name == "服务费" || a.type_name == "福利费" || a.type_name == "人工支出" || a.type_name== "办公支出" || a.type_name== "其他"||a.type_name== "税费"||a.type_name== "车辆使用费")?.Sum(a => a.amount_rmb) ?? 0;
//财务费用
m.cost_operating_finance = objPay.Where(a => a.type_name == "手续费")?.Sum(a => a.amount_rmb) ?? 0;
//营业利润=营业收入-营业成本-营业税金及附加-销售费用-管理费用-财务费用 //营业利润=营业收入-营业成本-营业税金及附加-销售费用-管理费用-财务费用
m.profit_operating = m.incoming_operating - m.cost_operating - m.cost_operating_taxes - m.cost_operating_sales - m.cost_operating_manager - m.cost_operating_finance; m.profit_operating = m.incoming_operating - m.cost_operating - m.cost_operating_taxes - m.cost_operating_sales - m.cost_operating_manager - m.cost_operating_finance;
...@@ -770,8 +789,8 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code ...@@ -770,8 +789,8 @@ join dc_base_warehouse t3 on t1.warehouse_code=t3.warehouse_code
} }
cn.Execute("delete from dc_month_sales_profit_4k where isedit=0 and month='" + m.month + "'"); cn.Execute("delete from dc_month_sales_profit_4k where isedit=0 and month='" + m.month + "'");
var sql = $@"insert dc_month_sales_profit_4k () values var sql = $@"insert dc_month_sales_profit_4k (cost_operating_assets_impairment,loss_ondisposal_noncurrent_assets,cost_operating,cost_operating_dspchannel,cost_operating_dspsign,cost_operating_exchange,cost_operating_fair_value_change,cost_operating_finance,cost_operating_investment,cost_operating_investment_in,cost_operating_it,cost_operating_manager,cost_operating_mh,cost_operating_sales,cost_operating_taxes,cost_operating_tp,cost_out_operating,createtime,fee_income_tax,incoming_operating_mh,incoming_operating,incoming_operating_dsp,incoming_operating_fansservice,incoming_operating_other,incoming_operating_saas,incoming_operating_test,incoming_operating_tp,incoming_out_operating,lastupdatetime,lastupdateuserid,lastupdateusername,profit,profit_operating,profit_retained,month,isedit) values
()"; ({m.cost_operating_assets_impairment},{m.loss_ondisposal_noncurrent_assets},{m.cost_operating},{m.cost_operating_dspchannel},{m.cost_operating_dspsign},{m.cost_operating_exchange},{m.cost_operating_fair_value_change},{m.cost_operating_finance},{m.cost_operating_investment},{m.cost_operating_investment_in},{m.cost_operating_it},{m.cost_operating_manager},{m.cost_operating_mh},{m.cost_operating_sales},{m.cost_operating_taxes},{m.cost_operating_tp},{m.cost_out_operating},'{m.createtime.ToString("yyyy-MM-dd HH:mm:ss")}',{m.fee_income_tax},{m.incoming_operating_mh},{m.incoming_operating},{m.incoming_operating_dsp},{m.incoming_operating_fansservice},{m.incoming_operating_other},{m.incoming_operating_saas},{m.incoming_operating_test},{m.incoming_operating_tp},{m.incoming_out_operating},'{m.lastupdatetime.ToString("yyyy-MM-dd HH:mm:ss")}',{m.lastupdateuserid},'{m.lastupdateusername}',{m.profit},{m.profit_operating},{m.profit_retained},'{m.month}',{m.isedit})";
cn.Execute(sql); cn.Execute(sql);
} }
......
...@@ -5581,7 +5581,6 @@ group by currency"; ...@@ -5581,7 +5581,6 @@ group by currency";
} }
} }
/// <summary> /// <summary>
/// 月度利润报表 数据说明 /// 月度利润报表 数据说明
/// </summary> /// </summary>
...@@ -6123,7 +6122,7 @@ group by currency"; ...@@ -6123,7 +6122,7 @@ group by currency";
sql += (" and month<='" + end + "'"); sql += (" and month<='" + end + "'");
} }
sql += " order by month desc limit 6"; //sql += " order by month desc limit 6";
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_read)) using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_read))
{ {
if (cn.State == ConnectionState.Closed) if (cn.State == ConnectionState.Closed)
...@@ -6140,6 +6139,271 @@ group by currency"; ...@@ -6140,6 +6139,271 @@ group by currency";
} }
} }
/// <summary>
/// 4K月度利润报表
/// </summary>
/// <param name="start">开始月份</param>
/// <param name="end">结束月份</param>
/// <returns></returns>
public List<dc_month_sales_profit_4k> ListMonthSaleProfit_4K(string start, string end)
{
var sql = $"select * from dc_month_sales_profit_4k where month>='{start}' ";
if (!string.IsNullOrEmpty(end))
{
sql += (" and month<='" + end + "'");
}
//sql += " order by month desc limit 6";
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_read))
{
if (cn.State == ConnectionState.Closed)
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
}
var obj = cn.Query<dc_month_sales_profit_4k>(sql, null, null, true, 2 * 60);
return obj.ToList();
}
}
/// <summary>
/// 更新销售利润报表
/// </summary>
/// <param name="m"></param>
/// <param name="uid"></param>
/// <param name="username"></param>
/// <returns></returns>
public string UpdateMonthSaleProfit_4K(mMonthSaleProfit4K_Input m, int uid, string username)
{
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
var obj = cn.QueryFirstOrDefault<dc_month_sales_profit_4k>("select * from dc_month_sales_profit_4k where isedit=1 and month='" + m.month + "'");
if (obj == null)
{
obj = new dc_month_sales_profit_4k
{
incoming_operating = 0,
incoming_operating_dsp = 0,
incoming_operating_fansservice = 0,
incoming_operating_mh = 0,
incoming_operating_other = 0,
incoming_operating_saas = 0,
incoming_operating_test = 0,
incoming_operating_tp = 0,
incoming_out_operating = 0,
cost_operating_investment = 0,
cost_operating_investment_in = 0,
cost_operating = 0,
cost_operating_assets_impairment = 0,
cost_operating_dspchannel = 0,
cost_operating_dspsign = 0,
cost_operating_exchange = 0,
cost_operating_fair_value_change = 0
, cost_operating_finance = 0,
cost_operating_it = 0,
cost_operating_manager = 0,
cost_operating_mh = 0,
cost_operating_sales = 0,
cost_operating_taxes = 0,
cost_operating_tp = 0,
cost_out_operating = 0,
createtime = DateTime.Now,
fee_income_tax = 0,
isedit = 1,
lastupdatetime = DateTime.Now,
lastupdateuserid = uid,
lastupdateusername = username,
loss_ondisposal_noncurrent_assets = 0,
month = m.month,
profit = 0,
profit_operating = 0,
profit_retained = 0,
};
}
#region 赋值
if (m.incoming_operating_saas.HasValue)
{
obj.incoming_operating_saas = m.incoming_operating_saas.Value;
}
if (m.incoming_operating_test.HasValue)
{
obj.incoming_operating_test = m.incoming_operating_test.Value;
}
if (m.incoming_operating_dsp.HasValue)
{
obj.incoming_operating_dsp = m.incoming_operating_dsp.Value;
}
if (m.incoming_operating_mh.HasValue)
{
obj.incoming_operating_mh = m.incoming_operating_mh.Value;
}
if (m.incoming_operating_tp.HasValue)
{
obj.incoming_operating_tp = m.incoming_operating_tp.Value;
}
if (m.incoming_operating_fansservice.HasValue)
{
obj.incoming_operating_fansservice = m.incoming_operating_fansservice.Value;
}
if (m.incoming_operating_other.HasValue)
{
obj.incoming_operating_other = m.incoming_operating_other.Value;
}
if (m.cost_operating.HasValue)
{
obj.cost_operating = m.cost_operating.Value;
}
if (m.cost_operating_it.HasValue)
{
obj.cost_operating_it = m.cost_operating_it.Value;
}
if (m.cost_operating_dspchannel.HasValue)
{
obj.cost_operating_dspchannel = m.cost_operating_dspchannel.Value;
}
if (m.cost_operating_dspsign.HasValue)
{
obj.cost_operating_dspsign = m.cost_operating_dspsign.Value;
}
if (m.cost_operating_tp.HasValue)
{
obj.cost_operating_tp = m.cost_operating_tp.Value;
}
if (m.cost_operating_mh.HasValue)
{
obj.cost_operating_mh = m.cost_operating_mh.Value;
}
if (m.cost_operating_taxes.HasValue)
{
obj.cost_operating_taxes = m.cost_operating_taxes.Value;
}
if (m.cost_operating_sales.HasValue)
{
obj.cost_operating_sales = m.cost_operating_sales.Value;
}
if (m.cost_operating_manager.HasValue)
{
obj.cost_operating_manager = m.cost_operating_manager.Value;
}
if (m.cost_operating_finance.HasValue)
{
obj.cost_operating_finance = m.cost_operating_finance.Value;
}
if (m.cost_operating_exchange.HasValue)
{
obj.cost_operating_exchange = m.cost_operating_exchange.Value;
}
if (m.cost_operating_assets_impairment.HasValue)
{
obj.cost_operating_assets_impairment = m.cost_operating_assets_impairment.Value;
}
if (m.cost_operating_fair_value_change.HasValue)
{
obj.cost_operating_fair_value_change = m.cost_operating_fair_value_change.Value;
}
if (m.cost_operating_investment.HasValue)
{
obj.cost_operating_investment = m.cost_operating_investment.Value;
}
if (m.cost_operating_investment_in.HasValue)
{
obj.cost_operating_investment_in = m.cost_operating_investment_in.Value;
}
if (m.profit_operating.HasValue)
{
obj.profit_operating = m.profit_operating.Value;
}
if (m.incoming_out_operating.HasValue)
{
obj.incoming_out_operating = m.incoming_out_operating.Value;
}
if (m.cost_out_operating.HasValue)
{
obj.cost_out_operating = m.cost_out_operating.Value;
}
if (m.loss_ondisposal_noncurrent_assets.HasValue)
{
obj.loss_ondisposal_noncurrent_assets = m.loss_ondisposal_noncurrent_assets.Value;
}
if (m.fee_income_tax.HasValue)
{
obj.fee_income_tax = m.fee_income_tax.Value;
}
//营业收入=SAAS套餐收入+测评收入+DSP服务收入+MH代理收入+代运营收入+粉丝系统服务收入+其他收入
m.incoming_operating = m.incoming_operating_saas + m.incoming_operating_test + m.incoming_operating_dsp + m.incoming_operating_mh + m.incoming_operating_tp + m.incoming_operating_fansservice + m.incoming_operating_other;
//营业成本=IT人工成本+DSP渠道成本+DSP签约成本+代运营成本+MH客户成本
m.cost_operating = m.cost_operating_it + m.cost_operating_dspchannel + m.cost_operating_dspsign + m.cost_operating_tp + m.cost_operating_mh;
//营业利润=营业收入-营业成本-营业税金及附加-销售费用-管理费用-财务费用
m.profit_operating = m.incoming_operating - m.cost_operating - m.cost_operating_taxes - m.cost_operating_sales - m.cost_operating_manager - m.cost_operating_finance;
//利润总额=营业利润+营业外利润-营业务支出
m.profit = m.profit_operating + m.incoming_out_operating - m.cost_out_operating;
//净利润=利润总额-所得税费用
m.profit_retained = m.profit - m.fee_income_tax;
#endregion
if (obj.id > 0)
{
var result = cn.Update<dc_month_sales_profit_4k>(obj);
return result > 0 ? "" : "更新失败,请重试";
}
else
{
var result = cn.Insert<dc_month_sales_profit_4k>(obj);
return (result ?? 0) > 0 ? "" : "编辑失败";
}
}
}
#endregion #endregion
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Bailun.DC.Models;
using Bailun.ServiceFabric.Core.Extension;
using Bailun.ServiceFabric.Core.Extension.HttpContext;
using Microsoft.AspNetCore.Mvc;
namespace Bailun.DC.Web.Areas.Reports.Controllers
{
/// <summary>
/// 4千里的财务报表数据
/// </summary>
[Area("Reports")]
public class Finance4KController : Base.BaseController
{
public ActionResult MonthSaleProfit()
{
return View();
}
/// <summary>
/// 月度销售利润统计
/// </summary>
/// <param name="start">开始月份</param>
/// <param name="end">结束月份</param>
/// <returns></returns>
[HttpPost]
[BrowseLog("Bailun_data", "访问【百伦数据中心】->【财务报表】->【4K月度新销售利润统计】->【查询】页面", 0)]
public JsonResult ListMonthSaleProfit(string month)
{
var _service = new Services.FinanceReportServices();
try
{
var obj = _service.ListMonthSaleProfit_4K(month, "");
var list = obj;
var listHead = new List<Tuple<string, string, int>>();
listHead.Add(new Tuple<string, string, int>("营业收入", "incoming_operating", 1));
listHead.Add(new Tuple<string, string, int>("SAAS套餐收入", "incoming_operating_saas", 0));
listHead.Add(new Tuple<string, string, int>("测评收入", "incoming_operating_test", 0));
listHead.Add(new Tuple<string, string, int>("DSP服务收入", "incoming_operating_dsp", 0));
listHead.Add(new Tuple<string, string, int>("MH代理收入", "incoming_operating_mh", 0));
listHead.Add(new Tuple<string, string, int>("代运营收入", "incoming_operating_tp", 0));
listHead.Add(new Tuple<string, string, int>("粉丝系统服务收入", "incoming_operating_fansservice", 0));
listHead.Add(new Tuple<string, string, int>("其他收入", "incoming_operating_other", 0));
listHead.Add(new Tuple<string, string, int>("减:营业成本", "cost_operating", 1));
listHead.Add(new Tuple<string, string, int>("IT人工成本", "cost_operating_it", 0));
listHead.Add(new Tuple<string, string, int>("DSP渠道成本", "cost_operating_dspchannel", 0));
listHead.Add(new Tuple<string, string, int>("DSP签约成本", "cost_operating_dspsign", 0));
listHead.Add(new Tuple<string, string, int>("代运营成本", "cost_operating_tp", 0));
listHead.Add(new Tuple<string, string, int>("MH客户成本", "cost_operating_mh", 0));
listHead.Add(new Tuple<string, string, int>("营业税金及附加", "cost_operating_taxes", 0));
listHead.Add(new Tuple<string, string, int>("销售费用", "cost_operating_sales", 0));
listHead.Add(new Tuple<string, string, int>("管理费用", "cost_operating_manager", 0));
listHead.Add(new Tuple<string, string, int>("财务费用", "cost_operating_finance", 0));
listHead.Add(new Tuple<string, string, int>("其中:汇兑损益", "cost_operating_exchange", 0));
listHead.Add(new Tuple<string, string, int>("资产减值损失", "cost_operating_assets_impairment", 0));
listHead.Add(new Tuple<string, string, int>("加:公允价值变动收益(损失以“-”号填列)", "cost_operating_fair_value_change", 0));
listHead.Add(new Tuple<string, string, int>("投资收益(损失以“-”号填列)", "cost_operating_investment", 0));
listHead.Add(new Tuple<string, string, int>("其中:对联营企业和合营企业的投资收益", "cost_operating_investment_in", 0));
listHead.Add(new Tuple<string, string, int>("营业利润(亏损以“-”号填列) ", "profit_operating", 1));
listHead.Add(new Tuple<string, string, int>("加:营业外收入", "incoming_out_operating", 0));
listHead.Add(new Tuple<string, string, int>("减:营业外支出", "cost_out_operating", 0));
listHead.Add(new Tuple<string, string, int>("其中:非流动资产处置损失", "loss_ondisposal_noncurrent_assets", 0));
listHead.Add(new Tuple<string, string, int>("利润总额(亏损总额以“-”号填列)", "profit", 1));
listHead.Add(new Tuple<string, string, int>(" 减:所得税费用", "fee_income_tax", 0));
listHead.Add(new Tuple<string, string, int>("净利润", "profit_retained", 1));
var listCount = new List<dc_month_sales_profit_4k>();
var listMonth = obj.GroupBy(a => a.month);
foreach (var item in listMonth)
{
var m = new dc_month_sales_profit_4k();
m.incoming_operating = item.Sum(a => a.incoming_operating);
m.incoming_operating_saas = item.Sum(a => a.incoming_operating_saas);
m.incoming_operating_test = item.Sum(a => a.incoming_operating_test);
m.incoming_operating_dsp = item.Sum(a => a.incoming_operating_dsp);
m.incoming_operating_mh = item.Sum(a => a.incoming_operating_mh);
m.incoming_operating_tp = item.Sum(a => a.incoming_operating_tp);
m.incoming_operating_fansservice = item.Sum(a => a.incoming_operating_fansservice);
m.incoming_operating_other = item.Sum(a => a.incoming_operating_other);
m.cost_operating = item.Sum(a => a.cost_operating);
m.cost_operating_it = item.Sum(a => a.cost_operating_it);
m.cost_operating_dspchannel = item.Sum(a => a.cost_operating_dspchannel);
m.cost_operating_dspsign = item.Sum(a => a.cost_operating_dspsign);
m.cost_operating_tp = item.Sum(a => a.cost_operating_tp);
m.cost_operating_mh = item.Sum(a => a.cost_operating_mh);
m.cost_operating_taxes = item.Sum(a => a.cost_operating_taxes);
m.cost_operating_sales = item.Sum(a => a.cost_operating_sales);
m.cost_operating_manager = item.Sum(a => a.cost_operating_manager);
m.cost_operating_finance = item.Sum(a => a.cost_operating_finance);
m.cost_operating_exchange = item.Sum(a => a.cost_operating_exchange);
m.cost_operating_assets_impairment = item.Sum(a => a.cost_operating_assets_impairment);
m.cost_operating_fair_value_change = item.Sum(a => a.cost_operating_fair_value_change);
m.cost_operating_investment = item.Sum(a => a.cost_operating_investment);
m.cost_operating_investment_in = item.Sum(a => a.cost_operating_investment_in);
m.profit_operating = item.Sum(a => a.profit_operating);
m.incoming_out_operating = item.Sum(a => a.incoming_out_operating);
m.cost_out_operating = item.Sum(a => a.cost_out_operating);
m.loss_ondisposal_noncurrent_assets = item.Sum(a => a.loss_ondisposal_noncurrent_assets);
m.profit = item.Sum(a => a.profit);
m.fee_income_tax = item.Sum(a => a.fee_income_tax);
m.profit_retained = item.Sum(a => a.profit_retained);
//营业收入=SAAS套餐收入+测评收入+DSP服务收入+MH代理收入+代运营收入+粉丝系统服务收入+其他收入
m.incoming_operating = m.incoming_operating_saas + m.incoming_operating_test + m.incoming_operating_dsp + m.incoming_operating_mh + m.incoming_operating_tp + m.incoming_operating_fansservice + m.incoming_operating_other;
//营业成本=IT人工成本+DSP渠道成本+DSP签约成本+代运营成本+MH客户成本
m.cost_operating = m.cost_operating_it + m.cost_operating_dspchannel + m.cost_operating_dspsign + m.cost_operating_tp + m.cost_operating_mh;
//营业利润=营业收入-营业成本-营业税金及附加-销售费用-管理费用-财务费用
m.profit_operating = m.incoming_operating - m.cost_operating - m.cost_operating_taxes - m.cost_operating_sales - m.cost_operating_manager - m.cost_operating_finance;
//利润总额=营业利润+营业外利润-营业务支出
m.profit = m.profit_operating + m.incoming_out_operating - m.cost_out_operating;
//净利润=利润总额-所得税费用
m.profit_retained = m.profit - m.fee_income_tax;
listCount.Add(m);
}
var objCount = listCount;
return Json(new
{
success = true,
msg = "",
data = list.Where(a => a.isedit == 0).ToList(),
listEdit = list.Where(a => a.isedit == 1).ToList(),
head = listHead,
listCount = objCount
});
}
catch (Exception ex)
{
return Json(new
{
success = false,
msg = "出现异常,异常信息:" + ex.Message
});
}
}
/// <summary>
/// 更新编辑项
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult SaveMonthSaleProfit(mMonthSaleProfit4K_Input m)
{
var user = HttpContextHelper.Current?.User;
var _service = new Services.FinanceReportServices();
var result = _service.UpdateMonthSaleProfit_4K(m, user != null ? user.GetUid() : 0, user != null ? user.GetUserName() : "");
return Json(new
{
success = string.IsNullOrEmpty(result),
msg = result
});
}
}
}

@{
ViewData["Title"] = "4K月度销售利润报表";
Layout = "~/Pages/Shared/_MainLayout.cshtml";
ViewBag.Nav = new string[] { "财务报表", "4K月度销售利润报表" };
}
<div class="row">
<div class="col-sm-12">
<div class="alert alert-warning" style="display:none;">
@*说明:数据从2019年9月份开始*@
</div>
<div class="ibox-content m-b-sm border-bottom">
<form id="toolbar">
<div class="form-inline" style="line-height:40px;">
<div class="form-group">
<label>请选择开始月份</label>
<input id="month" name="month" class="form-control" style="width:130px;" placeholder="年.月" value="@(DateTime.Now.AddMonths(-1).ToString("yyyy-MM"))" />
</div>
<div class="form-group">
<label>&nbsp;</label>
<button type="button" class="btn btn-primary" onclick="list();"><i class="fa fa-search"></i>&nbsp;查询</button>
@*<button type="button" class="btn btn-danger" onclick="exportxls();">导出</button>*@
</div>
</div>
</form>
</div>
<div class="ibox-content m-b-sm border-bottom">
<h2 style="text-align:center;">4K月份销售利润表</h2>
<div class="bootstrap-table">
<div class="fixed-table-container">
<div class="fixed-table-body">
<table id="tb" style="table-layout: fixed;" class="table table-border table-bordered table-hover table-bg table-sort form-inline">
<thead>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@section css{
<style>
a {
margin-left: 10px;
}
</style>
}
@section scripts{
<script src="~/css/Layer-2.1/extend/layer.ext.js"></script>
<script type="text/javascript">
$(document).ready(function () {
laydate.render({ elem: '#month', type: 'month' });
list();
})
function list() {
$.submit({
url: '@Url.Content("~/Reports/Finance4K/ListMonthSaleProfit")',
type: 'POST',
paramData: $("#toolbar").serialize(),
func: function (result) {
if (result.success) {
$('#tb').find('thead').html('');
$('#tb').find('tbody').html('');
if (result.data.length > 0) {
var s = '';
var m = '<tr><th style="height:40px;text-align: center;line-height: 40px;" rowspan="2">项目</th>';
var m2 = '<tr>';
for (var i in result.data) {
m += ('<th style="height:40px;text-align: center;line-height: 40px;" colspan="3">' + result.data[i]['month'] + '月份</th>');
m2 += '<td>基础数据</td><td>调整数据</td><td>合计数据</td>';
}
m2 += '</tr>';
m += '</tr>';
$('#tb').find('thead').html(m + m2);
//组装行
var rows = '';
for (var i in result.head) {
var col = result.head[i];
var row = col.item3 == 0 ? '<tr><td>' + col.item1 + '</td>':'<tr><td style="font-weight:bold;">' + col.item1 + '</td>';
for (var d in result.data) {
var objData = result.data[d];
var count = 0;
for (var a in objData) {
if (a == col.item2) {
row += '<td>' + objData[a] + '</td>';
count = parseFloat(objData[a].replace(/,/g, ''));
continue;
}
}
//查看是否有编辑对象
var objEdit = undefined;
for (var e in result.listEdit) {
if (objData.month == result.listEdit[e].month) {
objEdit = result.listEdit[e];
continue;
}
}
if (objEdit != undefined) {
for (var a in objEdit) {
if (a == col.item2) {
row += '<td>' + objEdit[a] + (col.item3==1?"":('<a href="javascript:;" onclick="EditFee(\''+col.item1+'\',\'' + col.item2 + '\',' + objEdit[a] + ',\'' + objData.month + '\')">编辑</a>'))+'</td>';
count += parseFloat(objEdit[a].replace(/,/g, ''));
continue;
}
}
}
else {
row += '<td>0' + (col.item3 == 1 ? "" :'<a href="javascript:;" onclick="EditFee(\'' + col.item1 +'\',\'' + col.item2 + '\',0,\'' + objData.month + '\')">编辑</a>')+'</td>';
}
//合计
var objCount = undefined;
for (var e in result.listCount) {
if (objData.month == result.listCount[e].month) {
objCount = result.listCount[e];
continue;
}
}
if (objCount != undefined) {
for (var a in objCount) {
if (a == col.item2) {
//合计
row += '<td>' + objCount[a] + '</td>';
}
}
}
else {
//合计
row += '<td>0</td>';
}
}
row += '</tr>';
rows += row;
}
$('#tb').find('tbody').append(rows);
}
else {
layer.msg('没有' + $('#month').val()+'月份的销售利润数据。');
}
}
else {
layer.msg(result.msg);
}
return false;
}
})
}
function EditFee(name, col,v,mon) {
layer.prompt({ title: '编辑' + name, value:v}, function (text, index) {
layer.close(index);
Save(col, text, mon);
});
}
function Save(col, val,mon) {
$.submit({
url: '@Url.Content("~/Reports/Finance4K/SaveMonthSaleProfit")',
paramData: 'month=' + mon+'&'+col+'='+val,
type:'POST',
func: function (result) {
if (result.success) {
layer.msg('提交成功');
setTimeout(function () {
list();
}, 1.5 * 1000);
}
else {
layer.msg(result.msg);
}
}
})
}
function EditDescription(col, val, mon, name) {
layer.prompt({ title: '编辑 ' + name, value: val }, function (text, index) {
layer.close(index);
SaveDescription(col, text, mon);
});
}
function SaveDescription(col, val, mon) {
$.submit({
url: '@Url.Content("~/Reports/Finance/UpdateMonthSaleProfitDescription")',
paramData: 'month=' + mon+'&'+col+'='+val,
type:'POST',
func: function (result) {
if (result.success) {
layer.msg('提交成功');
setTimeout(function () {
list();
}, 1.5 * 1000);
}
else {
layer.msg(result.msg);
}
}
})
}
function ShowDetail(col, mon, name) {
layer_show(mon + ' ' + name + "的明细", '@Url.Content("~/Reports/Finance/MonthSaleProfitDetails")' + '?month=' + mon + '&col=' + col + '&colname=' + name, '95%', '95%');
}
function clearHtml(s) {
// 去除 富文本格式
s = s.replace(/(\n)/g, "");
s = s.replace(/(\t)/g, "");
s = s.replace(/(\r)/g, "");
s = s.replace(/<\/?[^>]*>/g, "");
s = s.replace(/\s*/g, "");
return s;
}
</script>
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment