using cylsg.Model.ECTEModel;
using cylsg.Model.utilityViewModel;
using cylsg.utility.Extend;
using ECTESTOA;
using EzCoreNet.Redis;
using Furion.LinqBuilder;
using Models;
using StackExchange.Profiling;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using TencentCloud.Iecp.V20210914.Models;
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()
{
OA_DriverRecord data = null;
data = await _client.Queryable().Where(x =>
x.Id == new Guid("BE15D584-DFE3-438D-863B-705DB1AB14ED")
).Includes(x=>x.Attachments).FirstAsync();
data.Attachments?.Add(new OA_attachment
{
PlanAttachment = "1111",
AttachmentType = 4,
Operator= "sdasd"
});
data.CarConditionAttachments = null;
await _client.UpdateNav(data).Include(x => x.CarConditionAttachments,new UpdateNavOptions
{
OneToManyInsertOrUpdate=true,
}).ExecuteCommandAsync();
return await _client.Queryable().Where(x => x.Id == new Guid("BE15D584-DFE3-438D-863B-705DB1AB14ED")).Includes(x => x.Attachments).Includes(x => x.CarConditionAttachments).FirstAsync();
}
///
/// 获取预约配送信息
///
///
///
[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;
}
///
/// 受理 弃用,用 CreatDeliverPlan 代替
///
///
///
[Obsolete]
public async Task AcceptAppointmentDeliver(int KeiId)
{
throw Oops.Oh("已经启用");
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_DeliverPlanPaiche Param)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
OA_DeliverTixing? tixing=null;
if(Param.DeliverTixingId>0)
{
//是提醒订单,需要执行提醒单 状态干煸
tixing = await _client.Queryable().Where(x => x.Keyid == Param.DeliverTixingId).FirstAsync();
if(tixing == null)
{
throw Oops.Oh("提醒单不存在了");
}
if(tixing.Chulistatus != AppointmentDeliverState.unAccept)
throw Oops.Oh("提醒单已经处理了");
tixing.Chulistatus= AppointmentDeliverState.Accept;
tixing.ChuliTime = DateTime.Now;
tixing.ChuliRen=Permissions.MemberId;
tixing.LastUpdateTime = DateTime.Now;
tixing.Updater = Permissions.MemberId;
}
OA_CarManage car = null;
if (Param.DriverId != null)
car = await _client.Queryable().Where(x => x.StaffID == Param.DriverId && x.MemberID == _oAServices.firmId).FirstAsync();
OA_CorporateClients cor = null;
if (Param.BuyerId != null)
cor = await _client.Queryable().Where(x => x.Keyid == Param.BuyerId).FirstAsync();
OA_DeliverPlanPaiche DeliverPlan = new OA_DeliverPlanPaiche()
{
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 = Param.Sort,
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,
};
try
{
if (tixing!=null)
{
tixing.DeliverPlanPaicheId = DeliverPlan.Keyid;
await _client.Updateable(tixing).ExecuteCommandAsync();
}
return await _client.Insertable(DeliverPlan).ExecuteCommandAsync();
}
catch (Exception)
{
throw;
}
}
///
/// 获取送货单
///
///
///
[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.Value.Date);
}
if (Param.TimeEnd != null)
{
SearchList = SearchList.And(x => x.DeliverTime < Param.TimeEnd.Value.Date.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).Includes(x=>x.DeliverPlans)
.Where(SearchList).OrderBy(x => x.DeliverTime).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_DeliverPlanPaiche Param)
{
if (Param.Keyid == null)
throw Oops.Oh("ID错误");
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var data = await _client.Queryable().Includes(x=>x.DeliverPlans).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;
foreach (var item in data.DeliverPlans)
{
item.DriverId = Param.DriverId;
item.CarId = car == null ? 0 : car.Keyid;
item.Updater = Permissions.MemberId;
item.LastUpdateTime = DateTime.Now;
item.DeliverTime = Param.DeliverTime;
}
}
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,
}).Include(x => x.DeliverPlans, new UpdateNavOptions()
{
OneToManyInsertOrUpdate = true,
}).ExecuteCommandAsync();
}
///
/// 撤销订单
///
///
///
public async Task UndoDeliverPlans(Guid KeyId)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var data= await _client.Queryable().Includes(x=>x.DeliverPlans).Includes(x=>x.DelvceTiXing).Where(x=>x.Keyid == KeyId).FirstAsync();
if (data != null)
{
if (data.Deliveredstatus != DeliveredType.Delivered)
{
await _client.AsTenant().BeginTranAsync();
try
{
if (data.DelvceTiXing != null)
{
data.DelvceTiXing.Chulistatus = AppointmentDeliverState.unAccept;
data.DelvceTiXing.LastUpdateTime = DateTime.Now;
data.DelvceTiXing.Updater = Permissions.MemberId;
data.DelvceTiXing.ChuliTime = DateTime.Now;
data.DelvceTiXing.ChuliRen = Permissions.MemberId;
await _client.Updateable(data.DelvceTiXing).ExecuteCommandAsync();
}
if (data.DeliverPlans != null)
{
foreach (var item in data.DeliverPlans)
{
item.DriverId = 0;
item.DeliverPlanPaicheid = Guid.Empty;
item.Deliveredstatus = DeliveredType.Undeliver;
item.Updater = Permissions.MemberId;
item.LastUpdateTime = DateTime.Now;
}
await _client.Updateable(data.DeliverPlans).ExecuteCommandAsync();
}
var a = await _client.Deleteable(data).ExecuteCommandAsync();
await _client.AsTenant().CommitTranAsync();
return a;
}
catch (Exception)
{
await _client.AsTenant().RollbackTranAsync();
throw;
}
}
else
{
throw Oops.Oh("配送已完成,无法撤销");
}
}
else
throw Oops.Oh("没有找到订单");
}
///
/// 修改订单 弃用
///
///
///
[Obsolete]
public async Task SortDeliverPlans(SortPlanIn Param)
{
throw Oops.Oh("已经弃用");
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.Attachments).Includes(x => x.Driver).Includes(x => x.Manager).Includes(x=>x.DeliverPlans)
.Where(x => x.Keyid == KeyId && x.ShifouDelivery != 2).FirstAsync();
}
///
/// 打卡记录详情
///
public async Task GetDriverRecordInfo(Guid Id)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var data = await _client.Queryable()
.Includes(x=>x.Car)
.Includes(x => x.Attachments)
.Includes(x => x.CarConditionAttachments)
.Where(x => x.Id == Id).FirstAsync();
if (data == null)
throw Oops.Oh("没有权限");
return data;
}
///
/// 获取车辆打卡记录
///
///
///
[HttpPost]
public async Task GetDriverRecords(DeliverRecordSearchParam Param)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
Expression> SearchList = (x) => true;
SearchList = SearchList.And(x => x.ClockType != DriverClockType.RoughDraft);//不看草稿
if (Param.CarID != null)
{
SearchList = SearchList.And(x => x.CarID == Param.CarID);
}
if (Param.TimeStart != null)
{
SearchList = SearchList.And(x => x.CreatTime >= Param.TimeStart.Value.Date);
}
if (Param.TimeEnd != null)
{
SearchList = SearchList.And(x => x.CreatTime < Param.TimeEnd.Value.Date.AddDays(1));
}
if (Param.ClockType != null)
{
SearchList = SearchList.And(x => x.ClockType == Param.ClockType);
}
//强制增加员工过滤
RefAsync totle = 0;
var data = await _client.Queryable().Includes(x=>x.Car)
.Where(SearchList).OrderByDescending(x => x.CreatTime.Date).ToPageListAsync(Param.page.PageIndex, Param.page.PageSize, totle);
Param.page.TotalCount = totle;
// var count = await _client.Queryable().Where(x => x.CreatTime.Date == DateTime.Now.Date).CountAsync();
return new DeliverRecordPageRet
{
Data = data,
page = Param.page
};
}
///
/// 判断是否具有权限
///
///
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,
}
}