/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 2024/4/17 13:28:20
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using System.Xml.Linq;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.Entities.Order;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Helper;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using SqlSugar;
using static CoreCms.Net.Configuration.GlobalEnumVars;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressIntracityQueryStoreResponse.Types;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ProductSPUAddRequest.Types;
using System.Linq;
using CoreCms.Net.Model.Entities.baifenbingfa.apply;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Model.Entities.baifenbingfa.Promote;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ScanProductAddV2Request.Types.Product.Types;
using NPOI.SS.Formula.Functions;
using CoreCms.Net.Model.FromBody;
using Essensoft.Paylink.Alipay.Domain;
namespace CoreCms.Net.Services
{
///
/// 计划订单表 接口实现
///
public class CoreCmsPlanOrderServices : BaseServices, ICoreCmsPlanOrderServices
{
private readonly ICoreCmsPlanOrderRepository _dal;
private readonly IUnitOfWork _unitOfWork;
private readonly ICoreCmsPlanOrderItemRepository _itemDal;
private readonly ICoreCmsUserServices _coreCmsUserServices;
private readonly ICoreCmsUserServices _userServices;
public CoreCmsPlanOrderServices(IUnitOfWork unitOfWork, ICoreCmsPlanOrderRepository dal
, ICoreCmsPlanOrderItemRepository itemDal
, ICoreCmsUserServices coreCmsUserServices
, ICoreCmsUserServices userServices)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
_itemDal = itemDal;
_coreCmsUserServices = coreCmsUserServices;
_userServices =userServices;
}
#region 实现重写增删改查操作==========================================================
///
/// 重写异步插入方法
///
/// 实体数据
///
public async Task InsertAsync(CoreCmsPlanOrder entity)
{
return await _dal.InsertAsync(entity);
}
///
/// 重写异步更新方法方法
///
///
///
public async Task UpdateAsync(CoreCmsPlanOrder entity)
{
return await _dal.UpdateAsync(entity);
}
///
/// 重写异步更新方法方法
///
///
///
public async Task UpdateAsync(List entity)
{
return await _dal.UpdateAsync(entity);
}
///
/// 重写删除指定ID的数据
///
///
///
public async Task DeleteByIdAsync(object id,string userName)
{
var jm = new AdminUiCallBack() ;
try
{
//开始事务处理
_unitOfWork.BeginTran();
var order = await _dal.QueryByIdAsync(id);
if (order.status == 2) //&& string.IsNullOrEmpty(houtai)
{
_unitOfWork.RollbackTran();
jm.code = 1;
jm.msg = "订单已经锁单不能重复锁单";
return jm;
}
order.upDataBy = userName;
order.upDataTime = DateTime.Now;
//order.keYongAmount = order.oldOrderAmount - order.orderAmount;
order.status = 2;
//if (order.keYongAmount > 0)
//{
// //修改用户余额
// var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, order.keYongAmount, "用户计划订单" + order.orderId + "款项结余");
//}
//}
//校验后再创建订单
var jmss = await _dal.UpdateAsync(order);
_unitOfWork.CommitTran();
jm.code = 0;
jm.data = order;
jm.msg = "锁单成功";
}
catch (Exception e)
{
_unitOfWork.RollbackTran();
jm.code = 1;
jm.msg = e.ToString();
}
return jm;
//return await _dal.DeleteByIdAsync(id);
}
///
/// 重写删除指定ID集合的数据(批量删除)
///
///
///
public async Task DeleteByIdsAsync(string[] ids, string userName)
{
var jm = new AdminUiCallBack();
try
{
//开始事务处理
_unitOfWork.BeginTran();
var orders = await _dal.QueryListByClauseAsync(p => ids.Contains(p.orderId), p => p.orderId, OrderByType.Asc, true);
foreach (var order in orders)
{
if (order.status != 2) //&& string.IsNullOrEmpty(houtai)
{
order.upDataBy = userName;
order.upDataTime = DateTime.Now;
order.status = 2;
//校验后再创建订单
var jmss = await _dal.UpdateAsync(order);
}
//order.keYongAmount = order.oldOrderAmount - order.orderAmount;
//if (order.keYongAmount > 0)
//{
// //修改用户余额
// var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, order.keYongAmount, "用户计划订单" + order.orderId + "款项结余");
//}
//}
}
_unitOfWork.CommitTran();
jm.code = 0;
jm.data = orders;
jm.msg = "锁单成功";
}
catch (Exception e)
{
_unitOfWork.RollbackTran();
jm.code = 1;
jm.msg = e.ToString();
}
return jm;
//return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region 获取缓存的所有数据==========================================================
///
/// 获取缓存的所有数据
///
///
public async Task> GetCaChe()
{
return await _dal.GetCaChe();
}
#endregion
#region 重写根据条件查询分页数据
///
/// 重写根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NOLOCK)
///
public async Task> QueryPageAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
}
#endregion
#region 获取计划订单列表微信小程序
///
/// 获取计划订单列表微信小程序
///
///
public async Task GetOrderList(int status = -1, int userId = 0, int page = 1, int limit = 5, int money = 0)
{
var jm = new WebApiCallBack { status = true };
var where = PredicateBuilder.True();
if (status > -1)
{
where = where.And(p => p.status == status);
}
if (userId > 0)
{
//var user = await _unitOfWork.GetDbClient().Queryable().Where(x => x.id == userId).FirstAsync();
where = where.And(p => p.userId == userId);
}
if (money > 0)
{
where = where.And(p => p.keYongAmount > p.huaFeiAmount);
}
var list = await _dal.QueryPageAsync(where, p => p.createTime, OrderByType.Desc, page, limit);
if (list!=null && list.Count>0)
{
foreach (var order in list)
{
//获取相关状态描述说明转换
order.statusText = EnumHelper.GetEnumDescriptionByValue(order.status);
order.keYongAmount = order.keYongAmount - order.huaFeiAmount;
}
}
jm.data = new
{
list,
count = list.TotalCount,
page,
limit,
status
};
return jm;
}
#endregion
///
/// 创建订单
///
/// 用户序列
/// 用户昵称
/// 计划订单状态
/// 明细id
/// 明细数量
/// 是否后台编辑
///
public async Task ToUpdate(string orderId, int userId, string userName, int status, string itemIds, string itemNums, string houtai = "")
{
var jm = new WebApiCallBack() { methodDescription = "修改计划订单" };
try
{
//开始事务处理
_unitOfWork.BeginTran();
var order = await _dal.QueryByIdAsync(orderId);
var oldorderAmount = order.orderAmount;
if (order.status == 2 && string.IsNullOrEmpty(houtai))
{
_unitOfWork.RollbackTran();
jm.status = false;
jm.otherData = "订单已经锁单不能修改";
return jm;
}
order.upDataBy = userName;
order.upDataTime = DateTime.Now;
List orderItems;
var ids = CommonHelper.StringToIntArray(itemIds);
var nums = CommonHelper.StringToStringArray(itemNums);
orderItems = await _itemDal.QueryListByClauseAsync(x => x.orderId == orderId);
decimal orderAmount = 0;
for (int i=0;i< ids.Length; i++)
{
var id = ids[i];
int num = 0;
int.TryParse(nums[i], out num);
var item = orderItems.Where(p => p.id == id).FirstOrDefault();
item.nums = num;
item.amount = item.price * (decimal)num;
var jms = await _itemDal.UpdateAsync(item);
orderAmount += item.amount;
}
order.orderAmount = orderAmount;
order.keYongAmount = order.oldOrderAmount - order.orderAmount ;
if (order.keYongAmount < order.huaFeiAmount)
{
_unitOfWork.RollbackTran();
jm.status = false;
jm.otherData = "可用余额不足";
return jm;
}
//var keYongAmount = oldorderAmount - orderAmount;
//if (order.status == 1)
//{
// keYongAmount = order.oldOrderAmount - order.orderAmount;
//}
//if (status == 2)
//{
// order.status = 2;
// if (keYongAmount != 0)
// {
// //修改用户余额
// var jmsss = await _coreCmsUserServices.UpdateBalance(order.userId, keYongAmount, "用户计划订单"+ order.orderId + "款项结余");
// }
//}
//校验后再创建订单
var jmss = await _dal.UpdateAsync(order);
_unitOfWork.CommitTran();
jm.status = true;
jm.data = order;
jm.msg = "修改成功";
}
catch (Exception e)
{
_unitOfWork.RollbackTran();
jm.status = false;
jm.otherData = e.ToString();
}
return jm;
}
///
/// 创建订单
///
/// 计划订单
/// 用户序列
/// 用户昵称
///
public async Task ToAddJiHua(List jiHuaOrders, int userId, string userName)
{
var jm = new AdminUiCallBack() ;
try
{
//开始事务处理
_unitOfWork.BeginTran();
CoreCmsPlanOrder order = new CoreCmsPlanOrder();
order.orderId = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.计划订单编号);
order.status = 1;
order.shipMobile = jiHuaOrders[0].shipMobile;
order.shipAddress = jiHuaOrders[0].shipAddress;
order.shipName = jiHuaOrders[0].shipName;
order.shouhuoAddress = jiHuaOrders[0].shouhuoAddress;
if (string.IsNullOrEmpty(order.shipMobile))
{
//找不到用户就注册用户
jm.code = 1;
jm.msg = order.shipMobile + "联系电话不能为空";
return jm;
}
var user = await _unitOfWork.GetDbClient().Queryable().Where(x => x.mobile == order.shipMobile && x.isDelete == false && x.status == 1).FirstAsync();
if (user != null)
{
order.userId = user.id;
user.isplanorder = "是";
var users = await _unitOfWork.GetDbClient().Updateable(user).ExecuteCommandAsync();
}
else
{
var data = new FMWxAccountCreate
{
mobile = order.shipMobile,
invitecode = 0,
sessionAuthId = ""
};
var jms = await _userServices.SmsLogin(data);
user = await _unitOfWork.GetDbClient().Queryable().Where(x => x.mobile == order.shipMobile && x.isDelete == false && x.status == 1).FirstAsync();
if (user != null)
{
order.userId = user.id;
user.isplanorder = "是";
var users = await _unitOfWork.GetDbClient().Updateable(user).ExecuteCommandAsync();
}
else
{
//找不到用户就注册用户
jm.code = 1;
jm.msg = order.shipMobile + "联系电话不正确";
return jm;
}
}
order.createBy = userName;
order.createTime = DateTime.Now;
order.upDataBy = userName;
order.upDataTime = DateTime.Now;
order.isdelete = false;
var shi = await _unitOfWork.GetDbClient().Queryable().Where(x => x.name == jiHuaOrders[0].shi).FirstAsync();
if(shi == null)
{
jm.code = 1;
jm.msg = order.shipMobile + "没有找到市";
return jm;
}
var quxian = await _unitOfWork.GetDbClient().Queryable().Where(x => x.name == jiHuaOrders[0].quxian && x.parentId == shi.id).FirstAsync();
if (shi == null)
{
jm.code = 1;
jm.msg = order.shipMobile + "没有找到区县";
return jm;
}
order.shengId = 510000;
order.shi = jiHuaOrders[0].shi;
order.shiId = shi.id;
order.quxianId = quxian.id;
order.quxian = jiHuaOrders[0].quxian;
order.pianqu = jiHuaOrders[0].pianqu;
decimal orderAmount = 0;
for (int i = 0; i < jiHuaOrders.Count; i++)
{
var item = new CoreCmsPlanOrderItem();
item.orderId = order.orderId;
item.name = jiHuaOrders[i].name;
item.specification = jiHuaOrders[i].specification;
item.price = jiHuaOrders[i].price;
item.nums = jiHuaOrders[i].nums; ;
item.amount = item.price * (decimal)jiHuaOrders[i].nums;
item.createBy = userName;
item.createTime = DateTime.Now;
item.upDataBy = userName;
item.upDataTime = DateTime.Now;
item.isdelete = false;
item.isOld = true;
var jms = await _itemDal.InsertAsync(item);
orderAmount += item.amount;
item.isOld = false;
jms = await _itemDal.InsertAsync(item);
if (jms.code == 1)
{
return jms;
}
}
order.orderAmount = orderAmount;
order.oldOrderAmount = orderAmount;
order.keYongAmount = 0;
order.huaFeiAmount = 0;
//校验后再创建订单
var sss = await _unitOfWork.GetDbClient().Insertable(order).ExecuteCommandAsync();
//var jmss = await _dal.InsertAsync(order);
//if (jmss.code == 1)
//{
// return jmss;
//}
_unitOfWork.CommitTran();
jm.code = 0;
jm.data = order;
jm.msg = "导入成功";
}
catch (Exception e)
{
_unitOfWork.RollbackTran();
jm.code = 1;
jm.otherData = e.ToString();
}
return jm;
}
}
}