161 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using APT.BaseData.Domain.Entities.OP;
 | 
						|
using APT.BaseData.Domain.Enums.OP;
 | 
						|
using APT.Infrastructure.Core;
 | 
						|
using APT.Utility;
 | 
						|
using Microsoft.AspNetCore.Mvc;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Dynamic;
 | 
						|
using System.Linq;
 | 
						|
 | 
						|
namespace APT.OP.WebApi.Controllers.Api
 | 
						|
{
 | 
						|
    [Route("api/OP/OPRechargeOrder")]
 | 
						|
    public partial class RechargeOrderController : AuthorizeApiController<T_OP_RECHARGE_ORDER>
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// 排序分页查询数据
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="pageFilter">分页过滤实体</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("FullOrderPaged")]
 | 
						|
        public PagedActionResult<T_OP_RECHARGE_ORDER> FullOrderPaged([FromBody] KeywordPageFilter pageFilter)
 | 
						|
        {
 | 
						|
            return SafeGetPagedData<T_OP_RECHARGE_ORDER>((result) =>
 | 
						|
            {
 | 
						|
                result = this.GetOrderPageEntities<T_OP_RECHARGE_ORDER>(null, pageFilter);
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 查询充值卡收支明细
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("OrderPageDetail")]
 | 
						|
        public PagedActionResult<T_OP_RECHARGE_ORDER> OrderPageDetail([FromBody] KeywordPageFilter filter)
 | 
						|
        {
 | 
						|
            if (filter.FilterGroup.Rules.Count == 0)
 | 
						|
                return WitOrderPaged(null, filter);
 | 
						|
            var str = filter.FilterGroup.Rules.FirstOrDefault();
 | 
						|
            filter.FilterGroup = new FilterGroup();
 | 
						|
            if (str.Field == "Parameter1")
 | 
						|
            {
 | 
						|
                var cardId = Guid.Parse(str.Value.ToString());
 | 
						|
                return WitOrderPaged(x => x.RECHARGE_CARD_ID == cardId, filter);
 | 
						|
            }
 | 
						|
            else if (str.Field == "Time")
 | 
						|
            {
 | 
						|
                var time = DateTime.Parse(str.Value.ToString());
 | 
						|
                return WitOrderPaged(x => x.TIME.Year == time.Year && x.TIME.Month == time.Month && x.ORDER_STATUS == (int)OPRechargeOrderStatus.成功, filter);
 | 
						|
            }
 | 
						|
            else if (str.Field == "Code")
 | 
						|
            {
 | 
						|
                var code = str.Value.ToString();
 | 
						|
                var member = GetEntity<T_OP_MEMBER>(x => x.CODE == code);
 | 
						|
                if (member?.RECHARGE_CARD_ID != null)
 | 
						|
                    return WitOrderPaged(x => x.RECHARGE_CARD_ID == member.RECHARGE_CARD_ID && x.ORDER_STATUS == (int)OPRechargeOrderStatus.成功, filter);
 | 
						|
            }
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 充值订单对账功能
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("RechargeOrderReconciliation")]
 | 
						|
        public JsonActionResult<dynamic> RechargeOrderReconciliation([FromBody] KeywordFilter filter)
 | 
						|
        {
 | 
						|
            return SafeExecute(() =>
 | 
						|
            {
 | 
						|
                dynamic result = new ExpandoObject();
 | 
						|
                if (filter.Parameter1 == null)
 | 
						|
                    return result;
 | 
						|
                var timeStr = filter.Parameter1.Split(",");
 | 
						|
                if (timeStr.Length != 2)
 | 
						|
                    return result;
 | 
						|
                var startTime = DateTime.Parse(timeStr[0]);
 | 
						|
                var endTime = DateTime.Parse(timeStr[1]);
 | 
						|
                var head = new List<TableHeadModel>
 | 
						|
                {
 | 
						|
                    new TableHeadModel{ Title = "时间", DataIndex = "Time"},
 | 
						|
                    new TableHeadModel{ Title = "充值次数", DataIndex = "Recharge_Num"},
 | 
						|
                    new TableHeadModel{ Title = "充值金额", DataIndex = "Recharge_Amount"},
 | 
						|
                };
 | 
						|
                var dicList = new List<Dictionary<string, object>>();
 | 
						|
                filter.SelectField = new string[] { "AMOUNT", "ENERGY_USED", "TIME", "ORDER_STATUS" };
 | 
						|
                var details = GetEntities<T_OP_RECHARGE_ORDER>(x => x.ORDER_STATUS == (int)OPRechargeOrderStatus.成功 && x.TIME >= startTime && x.TIME < endTime.AddMonths(1), filter);
 | 
						|
                while (startTime <= endTime)
 | 
						|
                {
 | 
						|
                    var detail = details.Where(x => x.TIME.ToIMonth() == startTime.ToIMonth());
 | 
						|
                    var dic = new Dictionary<string, object>
 | 
						|
                    {
 | 
						|
                        {"Time", startTime.ToString("yyyy-MM") },
 | 
						|
                        {"Recharge_Num", detail.Count() },
 | 
						|
                        {"Recharge_Amount", detail?.Select(x=>x.AMOUNT).Sum() },
 | 
						|
                    };
 | 
						|
                    dicList.Add(dic);
 | 
						|
                    startTime = startTime.AddMonths(1);
 | 
						|
                }
 | 
						|
                result.head = head;
 | 
						|
                result.dataSource = dicList;
 | 
						|
 | 
						|
                return result;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 会员支付信息统计
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("MemberRecharge")]
 | 
						|
        public JsonActionResult<dynamic> MemberRecharge([FromBody] KeywordFilter filter)
 | 
						|
        {
 | 
						|
            return SafeExecute(() =>
 | 
						|
            {
 | 
						|
                dynamic result = new ExpandoObject();
 | 
						|
                var code = filter.Parameter1;
 | 
						|
                var name = filter.Parameter2;
 | 
						|
                var head = new List<TableHeadModel>
 | 
						|
                {
 | 
						|
                    new TableHeadModel{ Title = "会员编码", DataIndex = "Code"},
 | 
						|
                    new TableHeadModel{ Title = "会员名称", DataIndex = "Name"},
 | 
						|
                    new TableHeadModel{ Title = "充值次数", DataIndex = "Recharge_Num"},
 | 
						|
                    new TableHeadModel{ Title = "充值金额", DataIndex = "Recharge_Amount"},
 | 
						|
                    new TableHeadModel{ Title = "剩余金额", DataIndex = "Balance"},
 | 
						|
                };
 | 
						|
                var dicList = new List<Dictionary<string, object>>();
 | 
						|
                filter.SelectField = new string[] { "CODE", "NAME", "RECHARGE_CARD_ID", "Nav_RechargeCard.BALANCE" };
 | 
						|
                var member = GetEntities<T_OP_MEMBER>(x => x.RECHARGE_CARD_ID != null, filter);
 | 
						|
                if (code != null)
 | 
						|
                    member = member.Where(x => x.CODE.Contains(code));
 | 
						|
                if (name != null)
 | 
						|
                    member = member.Where(x => x.NAME.Contains(name));
 | 
						|
 | 
						|
                filter.SelectField = new string[] { "AMOUNT", "RECHARGE_CARD_ID", "METHOD" };
 | 
						|
                var details = GetEntities<T_OP_RECHARGE_ORDER>(x => x.ORDER_STATUS == (int)OPRechargeOrderStatus.成功 && member.Select(y => y.RECHARGE_CARD_ID).Contains(x.RECHARGE_CARD_ID), filter);
 | 
						|
                foreach (var item in member)
 | 
						|
                {
 | 
						|
                    var detail = details.Where(x => x.RECHARGE_CARD_ID == item.RECHARGE_CARD_ID);
 | 
						|
                    var dic = new Dictionary<string, object>
 | 
						|
                    {
 | 
						|
                        {"Code", item.CODE },
 | 
						|
                        {"Name", item.NAME },
 | 
						|
                        {"Recharge_Num", detail?.Count() },
 | 
						|
                        {"Recharge_Amount", detail?.Select(x=>x.AMOUNT).Sum() },
 | 
						|
                        {"Balance", item.Nav_RechargeCard.BALANCE }
 | 
						|
                    };
 | 
						|
                    dicList.Add(dic);
 | 
						|
                }
 | 
						|
                result.head = head;
 | 
						|
                result.dataSource = dicList;
 | 
						|
 | 
						|
                return result;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |