/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Helper;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinUserInfoBatchGetResponse.Types;
namespace CoreCms.Net.Services
{
///
/// 提货单表 接口实现
///
public class CoreCmsBillLadingServices : BaseServices, ICoreCmsBillLadingServices
{
private readonly ICoreCmsBillLadingRepository _dal;
private readonly ICoreCmsClerkRepository _clerkRepository;
private readonly ICoreCmsStoreRepository _storeRepository;
private readonly ICoreCmsOrderItemRepository _orderItemRepository;
private readonly ICoreCmsUserRepository _userRepository;
private readonly IUnitOfWork _unitOfWork;
private readonly ICoreCmsSettingServices _settingServices;
private readonly IServiceProvider _serviceProvider;
public CoreCmsBillLadingServices(IUnitOfWork unitOfWork, ICoreCmsBillLadingRepository dal, ICoreCmsClerkRepository clerkRepository, ICoreCmsStoreRepository storeRepository, ICoreCmsOrderItemRepository orderItemRepository, ICoreCmsUserRepository userRepository, IServiceProvider serviceProvider, ICoreCmsSettingServices settingServices)
{
this._dal = dal;
_clerkRepository = clerkRepository;
_storeRepository = storeRepository;
_orderItemRepository = orderItemRepository;
_userRepository = userRepository;
_serviceProvider = serviceProvider;
_settingServices = settingServices;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
///
/// 添加提货单
///
///
public async Task AddData(string orderId, int storeId, string name, string mobile)
{
return await _dal.AddData(orderId, storeId, name, mobile);
}
///
/// 核销提货单
///
///
///
///
public async Task LadingOperating(string[] ids, int userId = 0)
{
var jm = new AdminUiCallBack();
var list = await _dal.QueryListByClauseAsync(p => ids.Contains(p.id) && p.status == false);
if (list.Any())
{
foreach (var item in list)
{
item.clerkId = userId;
item.pickUpTime = DateTime.Now;
item.status = true;
}
var outChanges = await _dal.UpdateAsync(list);
jm.code = outChanges ? 0 : 1;
jm.msg = outChanges ? "操作成功" : "操作失败";
}
else
{
jm.msg = "没有可提货的订单";
}
return jm;
}
///
/// 获取店铺提货单列表
///
///
public async Task GetStoreLadingList(int userId, int storeId, int page, int limit)
{
var jm = new WebApiCallBack();
var where = PredicateBuilder.True();
using var container = _serviceProvider.CreateScope();
var _userServices = container.ServiceProvider.GetService();
var allConfigs = await _settingServices.GetConfigDictionaries();
var shopManagerMobile = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopManagerMobile);
var user = await _userServices.QueryByClauseAsync(p => p.id == userId);
if (user == null)
{
jm.status = false;
jm.msg = "用户获取失败";
return jm;
}
var isManager = !string.IsNullOrEmpty(shopManagerMobile) && shopManagerMobile.Contains(user.mobile);
if (isManager)
{
where = storeId == 0 ? where.And(p => p.isDel == false) : where.And(p => p.isDel == false && p.storeId == storeId);
}
else
{
where = where.And(p => p.isDel == false && p.storeId == storeId);
//var clerks = await _clerkRepository.QueryListByClauseAsync(p => p.userId == userId);
//var storeIds = clerks.Select(p => p.storeId).ToList();
//where = where.And(p => storeIds.Contains(p.storeId) && p.isDel == false);
}
var ladingList = await _dal.QueryPageAsync(where, p => p.createTime, OrderByType.Desc, page, limit);
jm.status = true;
jm.msg = "获取成功";
jm.data = ladingList;
jm.otherData = new
{
ladingList.TotalCount,
ladingList.TotalPages
};
if (ladingList.Any())
{
var storeModel = await _storeRepository.QueryAsync();
foreach (var item in ladingList)
{
item.orderItems = await _orderItemRepository.QueryListByClauseAsync(p => p.orderId == item.orderId);
item.storeName = storeModel.FirstOrDefault(p => p.id == item.storeId)?.storeName;
var statusInt = item.status
? (int)GlobalEnumVars.BillLadingStatus.Recharge
: (int)GlobalEnumVars.BillLadingStatus.Order;
item.statusName = EnumHelper.GetEnumDescriptionByValue(statusInt);
}
}
return jm;
}
///
/// 删除提货单(软删除)
///
///
///
///
public async Task LadingDelete(string id, int userId = 0)
{
var jm = new WebApiCallBack();
var model = await _dal.QueryByClauseAsync(p => p.id == id);
if (model != null)
{
if (model.status == false)
{
jm.msg = "未提货的提货单不能删除";
return jm;
}
if (userId > 0)
{
var clerks = await _clerkRepository.ExistsAsync(p => p.userId == userId && p.storeId == model.storeId);
if (!clerks)
{
jm.msg = "你无权删除该提货单";
return jm;
}
}
model.isDel = true;
model.updateTime = DateTime.Now;
var bl = await _dal.UpdateAsync(model);
jm.status = bl;
jm.msg = bl ? "删除成功" : "删除失败";
}
else
{
jm.msg = "未找到提货单";
}
return jm;
}
///
/// 获取提货单详情
///
///
public async Task GetInfo(string id, int userId = 0)
{
var jm = new WebApiCallBack();
var list = await _dal.QueryListByClauseAsync(p => p.id.Contains(id) || p.orderId.Contains(id) || p.mobile.Contains(id), p => p.createTime, OrderByType.Desc);
var data = new List();
if (list != null)
{
var userInfo = await _userRepository.QueryByClauseAsync(p => p.id == userId);
if (userInfo != null)
{
var allConfigs = await _settingServices.GetConfigDictionaries();
var shopManagerMobile = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopManagerMobile);
var isManager = !string.IsNullOrEmpty(shopManagerMobile) && shopManagerMobile.Contains(userInfo.mobile);
if (isManager)
{
data = list;
}
else
{
var clerks = await _clerkRepository.QueryListByClauseAsync(p => p.userId == userId);
if (clerks != null && clerks.Any())
{
var storeIds = clerks.Select(p => p.storeId).ToList();
foreach (var item in list)
{
if (storeIds.Contains(item.storeId))
{
data.Add(item);
}
}
}
}
}
foreach (var item in data)
{
var statusInt = item.status
? (int)GlobalEnumVars.BillLadingStatus.Recharge
: (int)GlobalEnumVars.BillLadingStatus.Order;
item.statusName = EnumHelper.GetEnumDescriptionByValue(statusInt);
if (item.clerkId > 0)
{
if (userInfo != null)
{
item.clerkIdName = !string.IsNullOrEmpty(userInfo.nickName)
? userInfo.nickName + "(" + userInfo.mobile + ")"
: UserHelper.FormatMobile(userInfo.mobile) + "(" + userInfo.mobile + ")";
}
}
else
{
item.clerkIdName = item.status ? "(后台管理员)" : "";
}
item.orderItems = await _orderItemRepository.QueryListByClauseAsync(p => p.orderId == item.orderId);
}
jm.status = true;
jm.msg = "获取成功";
jm.data = data;
}
else
{
jm.msg = "提货单不存在";
}
return jm;
}
}
}