using cylsg.Model.ECTEModel;
using cylsg.Model.utilityViewModel;
using cylsg.utility.Extend;
using ECTESTOA;
using EzCoreNet.Redis;
using Furion.LinqBuilder;
using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace cylsg.Application.CyOS
{
///
/// 川印配送控制器
///
[Authorize]
[ApiDescriptionSettings("CYOA")]
public class CyOsDeliverManage : IDynamicApiController
{
private readonly ISqlSugarClient _client;
private readonly IOAServices _oAServices;
private readonly IEzCoreNetRedisService _eZCoreNetRedisService;
private ECTESTOAPermissions Permissions;
public CyOsDeliverManage(ISqlSugarClient client, IOAServices oAServices, IEzCoreNetRedisService netRedisService)
{
_client = client.AsTenant().GetConnection("ECTESTOADB");
_oAServices = oAServices;
_eZCoreNetRedisService = netRedisService;
}
[HttpGet]
[AllowAnonymous]
public async Task testc()
{
return await CreatDeliverPlanSn();
}
///
/// 获取预约配送信息
///
///
///
[HttpPost]
public async Task GetListAppointmentDeliverList(ApoointmentDeliverSearchParam Param)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
Expression> SearchList = (x) => true;
SearchList = SearchList.And(x => x.FirmId == _oAServices.firmId);
if (!string.IsNullOrEmpty(Param.Content))
{
SearchList = SearchList.And(x => x.Remark.Contains(Param.Content));
}
if (Param.MemberId != null)
{
SearchList = SearchList.And(x => x.FirmId == Param.MemberId);
}
if (Param.TimeStart != null)
{
SearchList = SearchList.And(x => x.CreateTime > Param.TimeStart);
}
if (Param.TimeEnd != null)
{
SearchList = SearchList.And(x => x.CreateTime < Param.TimeEnd);
}
//报销状态
if (Param.DeliverState != null)
{
SearchList = SearchList.And(x => x.Chulistatus == Param.DeliverState);
}
//强制增加员工过滤
RefAsync totle = 0;
var data = await _client.Queryable().Includes(x => x.SentStaff)
.Where(SearchList).OrderByDescending(x => x.ChuliTime).ToPageListAsync(Param.page.PageIndex, Param.page.PageSize, totle);
Param.page.TotalCount = totle;
return new AppointmentDeliverRet
{
Data = data,
page = Param.page,
};
}
///
/// 送货预约单详情
///
///
///
public async Task GetAppointmentDeliverInfo(int KeiId)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var data = await _client.Queryable().Includes(x => x.SentStaff).Where(x => x.Keyid == KeiId && x.FirmId == _oAServices.firmId).FirstAsync();
return data;
}
///
/// 受理
///
///
///
public async Task AcceptAppointmentDeliver(int KeiId)
{
if (!(KeiId > 0))
throw Oops.Oh("Keyid不能为空");
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var data = await _client.Queryable().Where(x => x.Keyid == KeiId && x.FirmId == _oAServices.firmId).FirstAsync();
if (data == null)
throw Oops.Oh("没找到数据");
if (data.Chulistatus != AppointmentDeliverState.unAccept)
throw Oops.Oh("订单已处理");
data.Chulistatus = AppointmentDeliverState.Accept;
data.LastUpdateTime = DateTime.Now;
data.Updater = Permissions.MemberId;
return await _client.Updateable(data).ExecuteCommandAsync();
}
///
/// 创建配送单
///
/// 只需要传递
///
[HttpPost]
public async Task CreatDeliverPlan(OA_DeliverPlan Param)
{
OA_CarManage car = null;
if (Param.DriverId != null)
car = await _client.Queryable().Where(x => x.StaffID == Param.DriverId && x.MemberID == _oAServices.firmId).FirstAsync();
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
OA_CorporateClients cor = null;
if (Param.BuyerId != null)
cor = await _client.Queryable().Where(x => x.Keyid == Param.BuyerId).FirstAsync();
OA_DeliverPlan DeliverPlan = new OA_DeliverPlan()
{
Keyid = Guid.NewGuid(),
FirmId = _oAServices.firmId,
BuyerId = Param.BuyerId ?? Guid.Empty,
DeliverTime = Param.DeliverTime,
CarId = car == null ? 0 : car.Keyid,
Wentifankui = "",
Xingzhengzhuize = "",
Yichangchuli = "",
Zhuyishixiang = "",
Gongzuokaoping = "",
Transferstatus = 1,
Sort = 1,
Creater = Param.Creater ?? Permissions.MemberId,
CreateTime = DateTime.Now,
DriverId = Param.DriverId,
SellerOrderId = await CreatDeliverPlanSn(),
Dianhua = Param.Dianhua,
Dizhi = Param.Dizhi,
Remark = Param.Remark,
BusinessManagerId = cor == null ? 0 : cor.BusinessManagerId,
Biddingcompany = cor == null ? 0 : (cor.Biddingcompany ?? 0),
ShifouDelivery = 1,
Lianxiren = Param.Lianxiren,
Deliveredstatus = (int)DeliveredType.Undeliver,
CompanyName = Param.CompanyName,
}; return await _client.Insertable(DeliverPlan).ExecuteCommandAsync();
}
///
/// 获取送货单
///
///
///
[HttpPost]
public async Task GetDeliverPlans(DeliverPlanSearchParam Param)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
Expression> SearchList = (x) => true;
SearchList = SearchList.And(x => x.FirmId == _oAServices.firmId);
//SearchList = SearchList.And(x => x.Creater == Permissions.MemberId);//只看自己
SearchList = SearchList.And(x => x.ShifouDelivery != 2);//过滤有效
if (Param.DeliverKeyID != null)
{
SearchList = SearchList.And(x => x.DriverId == Param.DeliverKeyID);
}
//客户名称
if (!string.IsNullOrEmpty(Param.CorporateClient))
{
SearchList = SearchList.And(x => x.CompanyName.Contains(Param.CorporateClient));
}
if (Param.TimeStart != null)
{
SearchList = SearchList.And(x => x.DeliverTime > Param.TimeStart);
}
if (Param.TimeEnd != null)
{
SearchList = SearchList.And(x => x.DeliverTime < Param.TimeEnd.Value.AddDays(1));
}
if (Param.DeliveredState != null)
{
if (Param.DeliveredState != DeliveredType.Delivered)
{
SearchList = SearchList.And(x => x.Deliveredstatus != DeliveredType.Delivered);
}
else
{
SearchList = SearchList.And(x => x.Deliveredstatus == DeliveredType.Delivered);
}
}
//强制增加员工过滤
RefAsync totle = 0;
var data = await _client.Queryable().Includes(x => x.Driver).Includes(x => x.SentStaff)
.Where(SearchList).OrderBy(x => x.Dizhi).OrderBy(x => x.Sort).ToPageListAsync(Param.page.PageIndex, Param.page.PageSize, totle);
Param.page.TotalCount = totle;
return new DeliverOderPageRet
{
Data = data,
page = Param.page,
};
}
///
/// 修改订单
///
///
///
public async Task UpDataDeliverPlans(OA_DeliverPlan Param)
{
if (Param.Keyid == null)
throw Oops.Oh("ID错误");
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var data = await _client.Queryable().Where(x => x.ShifouDelivery != 2 && x.Keyid == Param.Keyid).FirstAsync();
data.LastUpdateTime = DateTime.Now;
data.Updater = Permissions.MemberId;
if (data.DriverId != Param.DriverId)
{
data.DriverId = Param.DriverId;
var car = await _client.Queryable().Where(x => x.StaffID == Param.DriverId && x.MemberID == _oAServices.firmId).FirstAsync();
data.CarId = car == null ? 0 : car.Keyid;
}
data.DeliverTime = Param.DeliverTime;
data.Remark = Param.Remark;
data.CompanyName = Param.CompanyName;
data.Dizhi = Param.Dizhi;
data.Lianxiren = Param.Lianxiren;
data.Dianhua = Param.Dianhua;
data.Sort = Param.Sort;
if (Param.Attachments != null)
foreach (var item in Param.Attachments)
{
if (item.Keyid > 0)
{
}
else
{
item.OA_Id = data.Keyid;
item.CreateTime = DateTime.Now;
item.Operator = Permissions.Name;
}
}
data.Attachments = Param.Attachments;
return await _client.UpdateNav(data).Include(x => x.Attachments, new UpdateNavOptions()
{
OneToManyInsertOrUpdate = true,
}).ExecuteCommandAsync();
}
///
/// 修改订单
///
///
///
public async Task SortDeliverPlans(SortPlanIn Param)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var Active = await _client.Queryable().Where(x => x.Keyid == Param.ActiveKeyId).FirstAsync();
if (Active == null)
throw Oops.Oh("当前无法排序");
var ActiveList = await _client.Queryable().Where(x => x.CreateTime < Active.CreateTime.Value.AddDays(1).Date && x.CreateTime > Active.CreateTime.Value.Date).ToListAsync();
return true;
}
///
/// 获取送货单详情
///
///
///
public async Task GetDeliverPlanInfo(Guid KeyId)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
return await _client.Queryable().Includes(x => x.SentStaff).Includes(x => x.Attachments).Includes(x => x.Driver).Includes(x => x.Manager)
.Where(x => x.Keyid == KeyId && x.ShifouDelivery != 2).FirstAsync();
}
///
/// 判断是否具有权限
///
///
private async Task CheckRols()
{
var pr = await _oAServices.GetOAPermissions();
Permissions = pr;
if (pr != null && pr.MemberId != null)
{
if (pr.BF_IsDeliverManage == true)
return true;
else
return false;
}
else
return false;
}
///
/// 生成sn号
///
///
private async Task CreatDeliverPlanSn()
{
// var sn = await _client.Queryable().Where(x => x.CreateTime >= DateTime.Now.Date && x.CreateTime < DateTime.Now.AddDays(1).Date).OrderByDescending(x => x.SellerOrderId).Select(x => x.SellerOrderId).FirstAsync();
var sn = await _client.Queryable().Where(x => x.CreateTime.Value.Date == DateTime.Now.Date).OrderByDescending(x => x.SellerOrderId).Select(x => x.SellerOrderId).FirstAsync();
if (sn != null)
{
try
{
var datasn = sn.Length > 3
? sn.Substring(sn.Length - 3)
: sn; ;
int data = datasn.toInt();
data += 1;
var str = DateTime.Now.ToString("yyyyMMdd");
return DateTime.Now.ToString("yyyyMMdd") + data.ToString("D3");
}
catch (Exception)
{
return DateTime.Now.ToString("yyyyMMdd") + 1.ToString("D3");
}
}
return DateTime.Now.ToString("yyyymmdd") + 1.ToString("D3");
}
}
public class ApoointmentDeliverSearchParam
{
///
/// 起始时间
///
public DateTime? TimeStart { get; set; }
///
/// 结束时间
///
public DateTime? TimeEnd { get; set; }
///
/// 内容
///
public string Content { get; set; }
///
/// 员工ID
///
public Guid? MemberId { get; set; }
///
/// 受理状态
///
public AppointmentDeliverState? DeliverState { get; set; }
///
/// 页面参数
///
public PageModel page { get; set; }
}
public class DeliverPlanSearchParam
{
///
/// 起始时间
///
public DateTime? TimeStart { get; set; }
///
/// 结束时间
///
public DateTime? TimeEnd { get; set; }
///
/// 司机KeyID
///
public int? DeliverKeyID { get; set; }
///
/// 客户名称
///
public string CorporateClient { get; set; }
///
/// 配送状态
///
public DeliveredType? DeliveredState { get; set; }
///
/// 页面参数
///
public PageModel page { get; set; }
}
///
/// 拖动时最后变量
///
public class SortPlanIn()
{
///
/// 拖动的KeyID
///
public Guid ActiveKeyId { get; set; }
///
/// 下一层的项的KeyID
///
public Guid LowerKeyId { get; set; }
///
/// 上一层的邻居的KeyId
///
public Guid SuperiorKeyId { get; set; }
///
/// 拖动方向
///
public DirectionalType Directional { get; set; }
}
public enum DirectionalType
{
///
/// 向上拖动
///
Up,
///
/// 向下拖动
///
Down,
}
}