WX
2022-03-17 458ec6122ed8cf283880cf903c5581a5ec06a013
生产和销售情况 分页接口
6个文件已修改
7个文件已添加
519 ■■■■■ 已修改文件
ZTICInterface.Application/App/IndustryPolicyApp.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Application/App/TableProductionSalesApp.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Application/Service/TableProductionSalesService.cs 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Application/ZTICInterface.Application.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Application/ZTICInterface.Application.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/Entity/TableProductionSalesName.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/Extend/Page.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/Extend/SugarTableSearchSimple.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/Method/JsonHelper.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/Method/MapToICM.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/ViewModel/TableProductionSales.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/ZTICInterface.Core.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Core/ZTICInterface.Core.xml 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZTICInterface.Application/App/IndustryPolicyApp.cs
@@ -25,7 +25,7 @@
    /// <param name="pageIndex"></param>
    /// <param name="pageSize"></param>
    /// <returns></returns>
   [HttpGet]
    [HttpGet]
    public async Task<Page<IndustryPolicy>> GetPages([FromQuery] int pageIndex, [FromQuery] int pageSize)
    {
        return await _industryPolicyService.GetPagesAsync(pageIndex, pageSize,null,a=>a.PublishDate,OrderByType.Desc);
ZTICInterface.Application/App/TableProductionSalesApp.cs
New file
@@ -0,0 +1,34 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using ZTICInterface.Application.Service;
using ZTICInterface.Core.Entity;
using ZTICInterface.Core.Extend;
using ZTICInterface.Core.ViewModel;
namespace ZTICInterface.Application.App;
/// <summary>
/// 报表-生成及销售数据
/// </summary>
public class TableProductionSalesApp : IDynamicApiController
{
    private readonly TableProductionSalesService _productionSalesService;
    public TableProductionSalesApp(TableProductionSalesService productionSalesService)
    {
        _productionSalesService = productionSalesService;
    }
    /// <summary>
    /// 获取分页
    /// </summary>
    /// <returns></returns>
    [HttpPost]
    public async Task<Page<Dictionary<string, object>>> SearchPages([FromBody]VmParamTableProductionSalesPageSearch param)
    {
        return await _productionSalesService.GetPages(param);
    }
}
ZTICInterface.Application/Service/TableProductionSalesService.cs
New file
@@ -0,0 +1,129 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using Furion.ClayObject.Extensions;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Newtonsoft.Json.Linq;
using SqlSugar;
using StackExchange.Profiling.Internal;
using ZTICInterface.Core.Entity;
using ZTICInterface.Core.Extend;
using ZTICInterface.Core.Method;
using ZTICInterface.Core.ViewModel;
namespace ZTICInterface.Application.Service;
/// <summary>
/// 生产和销售情况
/// </summary>
public class TableProductionSalesService:Repository<TableProductionSalesName>,ISingleton
{
    /// <summary>
    /// 分页列表
    /// </summary>
    /// <param name="param"></param>
    /// <returns></returns>
    public async Task<Page<Dictionary<string, object>>> GetPages(VmParamTableProductionSalesPageSearch param)
    {
        var cms = param.Main.ToIConditionalModels();
        var page = await Context.Queryable<TableProductionSalesName>()
            .Where(cms)
            .OrderBy(a=>a.UpdateTime,OrderByType.Desc)
            .ToPageAsync(param.PageIndex, param.PageSize);
        var dbDataRange = await Context.Queryable<TableProductionSalesValue>()
            .Where(a => page.Items.Select(p => p.Id).Contains(a.NameId))
            .Select(a => new
            {
                Min = SqlFunc.AggregateMin(Convert.ToDateTime(SqlFunc.MergeString(a.Year.ToString(), "/", a.Month.ToString(), "/1"))),
                Max = SqlFunc.AggregateMax(Convert.ToDateTime(SqlFunc.MergeString(a.Year.ToString(), "/", a.Month.ToString(), "/1"))),
            })
            .FirstAsync();
        // 符合条件的数据值
        var valueList = await Context.Queryable<TableProductionSalesValue>()
            .Where(a => page.Items.Select(p => p.Id).Contains(a.NameId))
            .ToListAsync();
        var minDateRange = valueList.Min(a=>new DateTime(a.Year,a.Month,1));
        var maxDateRange = valueList.Max(a => new DateTime(a.Year, a.Month, 1));
        // 时间范围内的所有月份
        var dateRange = new List<DateTime>();
        var startDate = param.DateRange.StartTime ?? minDateRange;
        var endDate = param.DateRange.EndTime ?? maxDateRange;
        var frequencyItem = param?.Main.Find(a =>
            string.Equals(a.FieldName, "Frequency", StringComparison.CurrentCultureIgnoreCase));
        // 如果条件type是=的话,拿频率值
        var frequency = frequencyItem?.ConditionalType == ConditionalType.Equal ? frequencyItem.FieldValue : "";
        // 频率=年,列以年显示;频率=季度,列显示季度
        switch (frequency)
        {
            case "季":
                // 时间范围 2020-05至2020-11 取 2020-06至2020-12
                startDate = new DateTime(startDate.Year, (int)Math.Ceiling(startDate.Month / 3.0) * 3, 1);
                endDate = new DateTime(endDate.Year, (int)Math.Ceiling(endDate.Month / 3.0) * 3, 1);
                for (DateTime t = startDate; t <= endDate; t = t.AddMonths(3))
                {
                    dateRange.Add(new DateTime(t.Year, t.Month, 1));
                }
                break;
            case "年":
                // 时间范围 2020-05至2021-11 取 2020-12至2021-12
                for (int year = startDate.Year; year <= endDate.Year; year++)
                {
                    dateRange.Add(new DateTime(year, 12, 1));
                }
                break;
            // 其余按“月”处理
            default:
                // 置为每月1号
                startDate = new DateTime(startDate.Year, startDate.Month, 1);
                endDate = new DateTime(endDate.Year, endDate.Month, 1);
                for (DateTime t = startDate; t <= endDate; t = t.AddMonths(1))
                {
                    dateRange.Add(new DateTime(t.Year, t.Month, 1));
                }
                break;
        }
        var kvList = new List<Dictionary<string,object>>();
        var nameProps = typeof(TableProductionSalesName).GetProperties();
        foreach (var item in page.Items)
        {
            var dict = new Dictionary<string, object>();
            foreach (var prop in nameProps)
            {
                var value = prop.GetValue(item);
                dict.Add(prop.Name,value);
            }
            kvList.Add(dict);
        }
        foreach (var dateTime in dateRange)
        {
            var colName = dateTime.ToString("yyyy-MM");
            foreach (var kvItem in kvList)
            {
                var value = valueList.Find(a =>
                    a.Year == dateTime.Year && a.Month == dateTime.Month &&
                    a.NameId.ToString() == kvItem["Id"].ToString())?.Value;
                if (value != null)
                    kvItem[colName] = $"{value:N2}";
            }
        }
        var res = new Page<Dictionary<string, object>>()
        {
            PageIndex = page.PageIndex,
            PageSize = page.PageSize,
            TotalItems = page.TotalItems,
            Items = kvList
        };
        return res;
    }
}
ZTICInterface.Application/ZTICInterface.Application.csproj
@@ -22,8 +22,8 @@
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Service\" />
    <Folder Include="App\" />
    <Folder Include="Service\" />
  </ItemGroup>
</Project>
ZTICInterface.Application/ZTICInterface.Application.xml
@@ -17,6 +17,17 @@
            <param name="pageSize"></param>
            <returns></returns>
        </member>
        <member name="T:ZTICInterface.Application.App.TableProductionSalesApp">
            <summary>
            报表-生成及销售数据
            </summary>
        </member>
        <member name="M:ZTICInterface.Application.App.TableProductionSalesApp.SearchPages(ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch)">
            <summary>
            获取分页
            </summary>
            <returns></returns>
        </member>
        <member name="M:ZTICInterface.Application.Repository`1.AddAsync(`0,System.Boolean)">
            <summary>
            添加一条数据
@@ -87,5 +98,17 @@
            <returns>受影响行数</returns>
        </member>
        <!-- Badly formed XML comment ignored for member "M:ZTICInterface.Application.Repository`1.DeleteAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}},System.Boolean)" -->
        <member name="T:ZTICInterface.Application.Service.TableProductionSalesService">
            <summary>
            生产和销售情况
            </summary>
        </member>
        <member name="M:ZTICInterface.Application.Service.TableProductionSalesService.GetPages(ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch)">
            <summary>
            分页列表
            </summary>
            <param name="param"></param>
            <returns></returns>
        </member>
    </members>
</doc>
ZTICInterface.Core/Entity/TableProductionSalesName.cs
New file
@@ -0,0 +1,62 @@
using System;
using System.ComponentModel;
using SqlSugar;
namespace ZTICInterface.Core.Entity;
/// <summary>
/// 生产和销售情况-属性表
/// </summary>
[Tenant("1")]
public class TableProductionSalesName:BaseEntity
{
    /// <summary>
    /// 指标名称
    /// </summary>
    [Description("")]
    public string Name { get; set; }
    /// <summary>
    /// 频率
    /// </summary>
    public string Frequency { get; set; }
    /// <summary>
    /// 单位
    /// </summary>
    public string Unit { get; set; }
    /// <summary>
    /// 来源
    /// </summary>
    public string Source { get; set; }
    /// <summary>
    /// 国家
    /// </summary>
    public string Country { get; set; }
    /// <summary>
    /// 更新时间
    /// </summary>
    public DateTime UpdateTime { get; set; }
}
/// <summary>
/// 生产和销售情况-数据值表
/// </summary>
[Tenant("1")]
public class TableProductionSalesValue : BaseEntity
{
    /// <summary>
    /// 指标Id
    /// </summary>
    public int NameId { get; set; }
    /// <summary>
    /// 年份
    /// </summary>
    public int Year { get; set; }
    /// <summary>
    /// 月份
    /// </summary>
    public int Month { get; set; }
    /// <summary>
    /// 值
    /// </summary>
    public double Value { get; set; }
}
ZTICInterface.Core/Extend/Page.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using SqlSugar;
@@ -26,6 +27,11 @@
    /// 数据集
    /// </summary>
    public List<T> Items { get; set; }
    public static implicit operator Page<T>(Page<DataTable> v)
    {
        throw new System.NotImplementedException();
    }
}
public static class PageExtension
ZTICInterface.Core/Extend/SugarTableSearchSimple.cs
New file
@@ -0,0 +1,23 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using SqlSugar;
namespace ZTICInterface.Core.Extend;
public class SugarTableSearchSimple
{
    /// <summary>
    /// 字段名
    /// </summary>
    public string FieldName { get; set; }
    /// <summary>
    /// 条件类型
    /// https://www.donet5.com/Home/Doc?typeId=2314
    /// </summary>
    [JsonConverter(typeof(StringEnumConverter))]
    public ConditionalType ConditionalType { get; set; }
    /// <summary>
    /// 值
    /// </summary>
    public string FieldValue { get; set; }
}
ZTICInterface.Core/Method/JsonHelper.cs
New file
@@ -0,0 +1,25 @@
namespace ZTICInterface.Core.Method;
public static class JsonHelper
{
    /// <summary>
    /// 序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static string ToJson<T>(this T obj)
    {
        return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
    }
    /// <summary>
    /// 反序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="str"></param>
    /// <returns></returns>
    public static T ToObject<T>(this string str)
    {
        return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(str);
    }
}
ZTICInterface.Core/Method/MapToICM.cs
New file
@@ -0,0 +1,27 @@
using System.Collections.Generic;
using System.Linq;
using Mapster;
using SqlSugar;
using StackExchange.Profiling.Internal;
using ZTICInterface.Core.Extend;
using ZTICInterface.Core.ViewModel;
namespace ZTICInterface.Core.Method;
public static class SugarFilterHelper
{
    /// <summary>
    /// 将SugarTableSearchSimple转为sugar格式
    /// </summary>
    /// <param name="param"></param>
    /// <returns></returns>
    public static List<IConditionalModel> ToIConditionalModels(this List<SugarTableSearchSimple> param)
    {
        var list = param
            .Where(a => !a.FieldName.IsNullOrWhiteSpace())
            .Select(item => item.Adapt<ConditionalModel>())
            .Cast<IConditionalModel>()
            .ToList();
        return list;
    }
}
ZTICInterface.Core/ViewModel/TableProductionSales.cs
New file
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using ZTICInterface.Core.Extend;
namespace ZTICInterface.Core.ViewModel;
/// <summary>
/// 分页查询条件
/// </summary>
public class VmParamTableProductionSalesPageSearch
{
    /// <summary>
    /// 页码
    /// </summary>
    public int PageIndex { get; set; }
    /// <summary>
    /// 条数
    /// </summary>
    public int PageSize { get; set; }
    /// <summary>
    /// 指标查询条件
    /// </summary>
    public List<SugarTableSearchSimple> Main { get; set; }
    /// <summary>
    /// 数据时间范围
    /// </summary>
    public ModelDateRange DateRange { get; set; }
    /// <summary>
    /// 时间范围
    /// </summary>
    public class ModelDateRange
    {
        /// <summary>
        /// 开始时间
        /// </summary>
        public DateTime? StartTime { get; set; }
        /// <summary>
        /// 结束时间
        /// </summary>
        public DateTime? EndTime { get; set; }
    }
}
ZTICInterface.Core/ZTICInterface.Core.csproj
@@ -20,6 +20,8 @@
  <ItemGroup>
    <Folder Include="Extend\" />
    <Folder Include="ViewModel\" />
    <Folder Include="Method\" />
  </ItemGroup>
</Project>
ZTICInterface.Core/ZTICInterface.Core.xml
@@ -54,6 +54,66 @@
            链接
            </summary>
        </member>
        <member name="T:ZTICInterface.Core.Entity.TableProductionSalesName">
            <summary>
            生产和销售情况-属性表
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesName.Name">
            <summary>
            指标名称
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesName.Frequency">
            <summary>
            频率
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesName.Unit">
            <summary>
            单位
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesName.Source">
            <summary>
            来源
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesName.Country">
            <summary>
            国家
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesName.UpdateTime">
            <summary>
            更新时间
            </summary>
        </member>
        <member name="T:ZTICInterface.Core.Entity.TableProductionSalesValue">
            <summary>
            生产和销售情况-数据值表
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesValue.NameId">
            <summary>
            指标Id
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesValue.Year">
            <summary>
            年份
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesValue.Month">
            <summary>
            月份
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Entity.TableProductionSalesValue.Value">
            <summary>
            值
            </summary>
        </member>
        <member name="T:ZTICInterface.Core.Extend.MyConstant.MyCacheKey">
            <summary>
            缓存key
@@ -121,12 +181,51 @@
            <param name="isOrderBy"></param>
            <returns></returns>
        </member>
        <member name="P:ZTICInterface.Core.Extend.SugarTableSearchSimple.FieldName">
            <summary>
            字段名
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Extend.SugarTableSearchSimple.ConditionalType">
            <summary>
            条件类型
            https://www.donet5.com/Home/Doc?typeId=2314
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.Extend.SugarTableSearchSimple.FieldValue">
            <summary>
            值
            </summary>
        </member>
        <member name="M:ZTICInterface.Core.Extend.TranReturn.Return``1(SqlSugar.DbResult{``0})">
            <summary>
            事务返回
            </summary>
            <typeparam name="TR"></typeparam>
            <param name="result"></param>
            <returns></returns>
        </member>
        <member name="M:ZTICInterface.Core.Method.JsonHelper.ToJson``1(``0)">
            <summary>
            序列化
            </summary>
            <typeparam name="T"></typeparam>
            <param name="obj"></param>
            <returns></returns>
        </member>
        <member name="M:ZTICInterface.Core.Method.JsonHelper.ToObject``1(System.String)">
            <summary>
            反序列化
            </summary>
            <typeparam name="T"></typeparam>
            <param name="str"></param>
            <returns></returns>
        </member>
        <member name="M:ZTICInterface.Core.Method.SugarFilterHelper.ToIConditionalModels(System.Collections.Generic.List{ZTICInterface.Core.Extend.SugarTableSearchSimple})">
            <summary>
            将SugarTableSearchSimple转为sugar格式
            </summary>
            <param name="param"></param>
            <returns></returns>
        </member>
        <member name="T:ZTICInterface.Core.MyRESTfulResultProvider">
@@ -178,5 +277,45 @@
            <param name="errors"></param>
            <returns></returns>
        </member>
        <member name="T:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch">
            <summary>
            分页查询条件
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch.PageIndex">
            <summary>
            页码
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch.PageSize">
            <summary>
            条数
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch.Main">
            <summary>
            指标查询条件
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch.DateRange">
            <summary>
            数据时间范围
            </summary>
        </member>
        <member name="T:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch.ModelDateRange">
            <summary>
            时间范围
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch.ModelDateRange.StartTime">
            <summary>
            开始时间
            </summary>
        </member>
        <member name="P:ZTICInterface.Core.ViewModel.VmParamTableProductionSalesPageSearch.ModelDateRange.EndTime">
            <summary>
            结束时间
            </summary>
        </member>
    </members>
</doc>