/***********************************************************************
* 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.Auth.HttpContextUser;
using CoreCms.Net.Configuration;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
namespace CoreCms.Net.Web.WebApi.Controllers
{
///
/// 门店调用接口数据
///
[Route("api/[controller]/[action]")]
[ApiController]
public class StoreController : ControllerBase
{
private readonly IHttpContextUser _user;
private readonly ICoreCmsStoreServices _storeServices;
private readonly ICoreCmsClerkServices _clerkServices;
private readonly ICoreCmsSettingServices _settingServices;
private readonly ICoreCmsBillLadingServices _billLadingServices;
private readonly ICoreCmsOrderServices _orderServices;
private readonly ICoreCmsUserServices _userServices;
///
/// 构造函数
///
public StoreController(IHttpContextUser user
, ICoreCmsStoreServices storeServices
, ICoreCmsClerkServices clerkServices
, ICoreCmsSettingServices settingServices
, ICoreCmsBillLadingServices billLadingServices, ICoreCmsOrderServices orderServices, ICoreCmsUserServices userServices)
{
_user = user;
_storeServices = storeServices;
_clerkServices = clerkServices;
_settingServices = settingServices;
_billLadingServices = billLadingServices;
_orderServices = orderServices;
_userServices = userServices;
}
//公共接口======================================================================================================
#region 获取默认的门店
///
/// 获取默认的门店
///
///
[HttpPost]
public async Task GetDefaultStore()
{
var jm = new WebApiCallBack();
var ship = await _storeServices.QueryByClauseAsync(p => p.isDefault == true, true, true);
jm.status = true;
jm.data = ship;
return jm;
}
#endregion
#region 获取门店列表数据
///
/// 获取门店列表数据
///
///
[HttpPost]
public async Task GetStoreList([FromBody] FMGetStoreQueryPageByCoordinate entity)
{
var jm = new WebApiCallBack();
try
{
var where = PredicateBuilder.True();
if (!string.IsNullOrEmpty(entity.key))
{
where = where.And(p => p.storeName.Contains(entity.key));
}
jm.status = true;
var data = await _storeServices.QueryPageAsyncByCoordinate(where, p => p.distance, OrderByType.Asc, entity.page, entity.limit, entity.latitude, entity.longitude);
foreach (var item in data)
{
if (item.distance > 0)
{
if (item.distance > 1000)
{
item.distanceStr = Math.Round(item.distance / 1000, 2) + "km";
}
else
{
item.distanceStr = Math.Round(item.distance, 2) + "m";
}
}
else
{
item.distanceStr = "";
}
}
jm.data = data;
jm.otherData = new
{
totalCount = data.TotalCount,
totalPages = data.TotalPages,
};
}
catch (Exception e)
{
jm.msg = GlobalConstVars.DataHandleEx;
jm.data = e.ToString();
}
return jm;
}
#endregion
#region 获取推荐关键词
///
/// 获取推荐关键词
///
///
[HttpPost]
public async Task GetRecommendKeys()
{
var jm = new WebApiCallBack();
var allConfigs = await _settingServices.GetConfigDictionaries();
var recommendKeysStr = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.RecommendKeys);
jm.status = true;
jm.msg = "获取成功";
jm.data = !string.IsNullOrEmpty(recommendKeysStr) ? recommendKeysStr.Split("|") : new string[] { };
return jm;
}
#endregion
#region 判断是否开启门店自提
///
/// 判断是否开启门店自提
///
///
[HttpPost]
public async Task GetStoreSwitch()
{
var jm = new WebApiCallBack { status = true, msg = "获取成功" };
var allConfigs = await _settingServices.GetConfigDictionaries();
jm.data = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.StoreSwitch).ObjectToInt(2); ;
return jm;
}
#endregion
#region 根据序列获取门店数据
///
/// 根据序列获取门店数据
///
///
[HttpPost]
public async Task GetStoreById([FromBody] FMIntId entity)
{
var jm = new WebApiCallBack
{
status = true,
msg = "获取成功",
data = await _storeServices.QueryByClauseAsync(p => p.id == entity.id)
};
return jm;
}
#endregion
//验证接口======================================================================================================
#region 判断是否是商家,店员,开启商家中心
///
/// 判断是否是商家,店员,开启商家中心
///
///
[HttpPost]
[Authorize]
public async Task IsClerk()
{
var jm = await _clerkServices.IsClerk(_user.ID);
return jm;
}
#endregion
#region 根据用户序列获取门店数据
///
/// 根据用户序列获取门店数据
///
///
[HttpPost]
[Authorize]
public async Task GetStoreByUserId([FromBody] FMIntId entity)
{
var jm = new WebApiCallBack();
var allConfigs = await _settingServices.GetConfigDictionaries();
var shopManagerMobile = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopManagerMobile);
var user = await _userServices.QueryByClauseAsync(p => p.id == _user.ID);
if (user == null)
{
jm.status = false;
jm.msg = "用户获取失败";
return jm;
}
var isManager = !string.IsNullOrEmpty(shopManagerMobile) && shopManagerMobile.Contains(user.mobile);
if (entity.id == 0 && isManager)
{
var latlong = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ReshipCoordinate);
var latLongArray = !string.IsNullOrEmpty(latlong) ? latlong.Split(",") : new string[2];
jm.status = true;
jm.data = new CoreCmsStore
{
id = 0,
storeName = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopName),
//mobile = p.mobile,
//linkMan = p.linkMan,
//logoImage = p.logoImage,
//areaId = p.areaId,
address = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ReshipAddress),
//coordinate = p.coordinate,
latitude = latLongArray[0],
longitude = latLongArray[1],
//isDefault = p.isDefault,
//createTime = p.createTime,
//updateTime = p.updateTime,
};
}
else if (entity.id > 0 && isManager)
{
jm.status = true;
jm.data = await _storeServices.QueryByClauseAsync(p => p.id == entity.id);
}
else
{
jm.status = true;
jm.data = await _storeServices.GetStoreByUserId(_user.ID, entity.id);
}
return jm;
}
#endregion
#region 获取单个用户能管理的门店列表
///
/// 获取单个用户能管理的门店列表
///
///
[HttpPost]
[Authorize]
public async Task GetStoreListForUser([FromBody] FMGetStoreQueryPageByCoordinate entity)
{
var jm = new WebApiCallBack();
try
{
var where = PredicateBuilder.True();
var allConfigs = await _settingServices.GetConfigDictionaries();
var shopManagerMobile = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopManagerMobile);
var user = await _userServices.QueryByClauseAsync(p => p.id == _user.ID);
if (user == null)
{
jm.status = false;
jm.msg = "用户获取失败";
return jm;
}
var isManager = !string.IsNullOrEmpty(shopManagerMobile) && shopManagerMobile.Contains(user.mobile);
if (!isManager)
{
var stroes = await _clerkServices.QueryListByClauseAsync(p => p.userId == _user.ID);
var stroeIds = stroes.Select(p => p.storeId).ToList();
where = where.And(p => stroeIds.Contains(p.id));
}
jm.status = true;
var data = await _storeServices.QueryPageAsyncByCoordinate(where, p => p.distance, OrderByType.Asc, entity.page, entity.limit, entity.latitude, entity.longitude);
foreach (var item in data)
{
if (item.distance > 0)
{
if (item.distance > 1000)
{
item.distanceStr = Math.Round(item.distance / 1000, 2) + "km";
}
else
{
item.distanceStr = Math.Round(item.distance, 2) + "m";
}
}
else
{
item.distanceStr = "";
}
}
jm.data = data;
jm.otherData = new
{
totalCount = data.TotalCount,
totalPages = data.TotalPages,
};
}
catch (Exception e)
{
jm.msg = GlobalConstVars.DataHandleEx;
jm.data = e.ToString();
}
return jm;
}
#endregion
#region 获取个人订单列表
///
/// 获取个人订单列表
///
///
[HttpPost]
[Authorize]
public async Task GetOrderPageByMerchant([FromBody] GetOrderPageByMerchantPost entity)
{
var jm = new WebApiCallBack();
var store = await _clerkServices.IsClerk(_user.ID);
if (store != null && store.otherData.ObjectToBool())
{
jm = await _orderServices.GetOrderPageByMerchant(entity.dateType, entity.date, entity.status, entity.receiptType, entity.storeId, entity.page, entity.limit);
}
else
{
jm.status = false;
jm.msg = "你不是店员";
}
return jm;
}
#endregion
#region 搜索订单
///
/// 搜索订单
///
///
[HttpPost]
[Authorize]
public async Task GetOrderPageByMerchantSearch([FromBody] GetOrderPageByMerchantSearcgPost entity)
{
var jm = new WebApiCallBack();
var store = await _clerkServices.IsClerk(_user.ID);
if (store != null && store.otherData.ObjectToBool())
{
jm = await _orderServices.GetOrderPageByMerchantSearch(entity.keyword, entity.status, entity.receiptType, entity.storeId, entity.page, entity.limit);
}
else
{
jm.status = false;
jm.msg = "你不是店员";
}
return jm;
}
#endregion
#region 店铺提货单列表
///
/// 店铺提货单列表
///
///
[HttpPost]
[Authorize]
public async Task StoreLadingList([FromBody] FMPageByIntId entity)
{
var jm = await _billLadingServices.GetStoreLadingList(_user.ID, entity.id, entity.page, entity.limit);
return jm;
}
#endregion
#region 删除提货单数据
///
/// 删除提货单数据
///
///
[HttpPost]
[Authorize]
public async Task LadingDelete([FromBody] FMStringId entity)
{
var jm = await _billLadingServices.LadingDelete(entity.id, _user.ID);
return jm;
}
#endregion
#region 获取单个提货单详情
///
/// 获取单个提货单详情
///
///
[HttpPost]
[Authorize]
public async Task LadingInfo([FromBody] FMStringId entity)
{
var jm = new WebApiCallBack();
if (string.IsNullOrEmpty(entity.id))
{
jm.msg = "请提交查询数据关键词";
return jm;
}
jm = await _billLadingServices.GetInfo(entity.id, _user.ID);
return jm;
}
#endregion
#region 核销订单
///
/// 核销订单
///
///
[HttpPost]
[Authorize]
public async Task Lading([FromBody] FMStringId entity)
{
var jm = new WebApiCallBack();
if (string.IsNullOrEmpty(entity.id))
{
jm.msg = "请提交查询数据关键词";
return jm;
}
var array = entity.id.Split(",");
var result = await _billLadingServices.LadingOperating(array, _user.ID);
jm.status = result.code == 0;
jm.msg = result.msg;
return jm;
}
#endregion
}
}