using CoreCms.Net.Auth.HttpContextUser;
|
using CoreCms.Net.Caching.AutoMate.RedisCache;
|
using CoreCms.Net.Configuration;
|
using CoreCms.Net.DTO.WeChatShipping;
|
using CoreCms.Net.IRepository.UnitOfWork;
|
using CoreCms.Net.IServices;
|
using CoreCms.Net.IServices.CYOAServices;
|
using CoreCms.Net.Model.Entities.Expression;
|
using CoreCms.Net.Model.FromBody;
|
using CoreCms.Net.Model.ViewModels.UI;
|
using CoreCms.Net.Utility.Extensions;
|
using EC_SeckillInfo;
|
using EnumsNET;
|
using Essensoft.Paylink.Alipay.Domain;
|
using Microsoft.OpenApi.Validations;
|
using Nest;
|
using Newtonsoft.Json;
|
using NPOI.HPSF;
|
using NPOI.SS.Formula.Functions;
|
using SqlSugar;
|
using SqlSugar.Extensions;
|
using StackExchange.Redis;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Xml.Linq;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinGetCurrentSelfMenuInfoResponse.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinQrcodeCreateRequest.Types.Action.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinTagsMembersGetBlackListResponse.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinUserInfoBatchGetRequest.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionRequest.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.ScanProductAddV2Request.Types.Product.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.SemanticSemproxySearchResponse.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaSecOrderUploadCombinedShippingInfoRequest.Types.SubOrder.Types;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaServiceMarketServiceGetServiceBuyerListResponse.Types.Buyer.Types;
|
|
namespace CoreCms.Net.Services.CYOAServices
|
{
|
/// <summary>
|
/// 川印相关服务
|
/// </summary>
|
public class CyinOAService : ICyinOAService
|
{
|
/// <summary>
|
/// 是否是司机key
|
/// </summary>
|
const string IsCYDbDbKey = "IsCYDbDbKey:";
|
/// <summary>
|
/// 司机订单开始后锁单key
|
/// </summary>
|
const string LockFilshDeliverOderKey = "LockFilshDeliverOderKey:";
|
const string LockFilshDeliverOderString = "GOODLuck:";
|
/// <summary>
|
/// 是否拥有川印教育局订单管理
|
/// </summary>
|
const string IsSchoolID = "IsShoodsID:";
|
const string IsSchoolMangerID = "IsSchoolManger:";
|
const string IsDeliverManageKey = "IsDeliverManageKey:";
|
private readonly ISqlSugarClient _CyDbClient;
|
private readonly IUnitOfWork _UnitOfWork;
|
private readonly IHttpContextUser _User;
|
private readonly ICoreCmsUserServices _coreCmsUserServices;
|
private readonly IRedisOperationRepository _redisOperationRepository;
|
private readonly string _UserMoble;
|
private string? _DriveName { get; set; }
|
|
/// <summary>
|
/// 学校管理员ID,有则是,没有则不是
|
/// </summary>
|
private Guid? _SchoolManagerKeyId { get; set; } = null;
|
|
public CyinOAService(IUnitOfWork unitOfWork, IHttpContextUser contextUser, ICoreCmsUserServices coreCmsUserServices,
|
IRedisOperationRepository redisOperationRepository, ICoreCmsUserServices coreCmsUser)
|
{
|
|
_UnitOfWork = unitOfWork;
|
_CyDbClient = unitOfWork.GetDbClient().GetConnection(AppSettingsConstVars.CYDbDbID);
|
_User = contextUser;
|
_coreCmsUserServices = coreCmsUserServices;
|
_redisOperationRepository = redisOperationRepository;
|
_coreCmsUserServices = coreCmsUserServices;
|
|
_UserMoble = _coreCmsUserServices.QueryById(_User.ID).mobile ?? "没有找到用户";
|
}
|
|
|
/// <summary>
|
/// 是否是学校方
|
/// </summary>
|
/// <returns></returns>
|
public async Task<bool> IsSchooler()
|
{
|
|
if (_User?.ID == null)
|
{
|
|
|
throw new Exception("登录信息错误,请重新登录");
|
|
}
|
|
|
var user = _coreCmsUserServices.QueryById(_User.ID);
|
if (user == null)
|
{
|
|
throw new Exception("登录信息错误,请重新登录");
|
}
|
var isdrive = await _redisOperationRepository.Get(IsSchoolID + user.mobile);
|
if (string.IsNullOrEmpty(isdrive))
|
{
|
//没有键值
|
|
|
|
|
|
var data = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(x => x.shipMobile == user.mobile&&x.isdelete==false).FirstAsync();
|
|
if (data != null)
|
{
|
isdrive = "true";
|
}
|
else
|
isdrive = "false";
|
await _redisOperationRepository.StringSetAsync(IsSchoolID + user.mobile, isdrive, TimeSpan.FromMinutes(1));
|
}
|
|
//db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\5", "EC_SeckillInfo"); ;
|
//var data= db.Queryable<EC_PrizeInfo>().ToList();
|
//ret.data= data;
|
if (isdrive == "true")
|
{
|
return true;
|
|
}
|
else
|
{
|
return false;
|
}
|
|
}
|
public async Task<bool> IsSchoolManger()
|
{
|
|
if (_User?.ID == null)
|
{
|
|
|
throw new Exception("登录信息错误,请重新登录");
|
|
}
|
|
|
var user = _coreCmsUserServices.QueryById(_User.ID);
|
if (user == null)
|
{
|
|
throw new Exception("登录信息错误,请重新登录");
|
}
|
var isdrive = await _redisOperationRepository.Get(IsSchoolMangerID + user.mobile);
|
|
if (string.IsNullOrEmpty(isdrive))
|
{
|
//没有键值
|
|
|
|
|
|
var data = await _CyDbClient.Queryable<OA_CustomerCommunications>().Where(x => x.CompanyPhone == user.mobile).FirstAsync();
|
|
if (data != null)
|
{
|
_SchoolManagerKeyId = data.Keyid;
|
isdrive = _SchoolManagerKeyId.ToString();
|
|
}
|
else
|
isdrive = "false";
|
await _redisOperationRepository.StringSetAsync(IsSchoolMangerID + user.mobile, isdrive, TimeSpan.FromMinutes(1));
|
}
|
else
|
{
|
Guid keyid;
|
if( Guid.TryParse(isdrive,out keyid))
|
{
|
_SchoolManagerKeyId = keyid;
|
}
|
else
|
{
|
|
var data = await _CyDbClient.Queryable<OA_CustomerCommunications>().Where(x => x.CompanyPhone == user.mobile).FirstAsync();
|
|
if (data != null)
|
{
|
_SchoolManagerKeyId = data.Keyid;
|
isdrive = _SchoolManagerKeyId.ToString();
|
|
}
|
else
|
isdrive = "false";
|
await _redisOperationRepository.StringSetAsync(IsSchoolMangerID + user.mobile, isdrive, TimeSpan.FromMinutes(1));
|
}
|
}
|
|
//db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\5", "EC_SeckillInfo"); ;
|
//var data= db.Queryable<EC_PrizeInfo>().ToList();
|
//ret.data= data;
|
if (isdrive != "false")
|
{
|
|
return true;
|
|
}
|
else
|
{
|
return false;
|
}
|
}
|
/// <summary>
|
/// 是否是送货管理员
|
/// </summary>
|
/// <returns></returns>
|
/// <exception cref="Exception"></exception>
|
public async Task<bool> IsDeliverManage()
|
{
|
var ret = new WebApiCallBack();
|
if (_User?.ID == null)
|
{
|
|
throw new Exception("登录信息错误,请重新登录");
|
|
}
|
var user = _coreCmsUserServices.QueryById(_User.ID);
|
if (user == null)
|
{
|
|
throw new Exception("登录信息错误,请重新登录");
|
}
|
var isdrive = await _redisOperationRepository.Get(IsDeliverManageKey + user.mobile);
|
if (string.IsNullOrEmpty(isdrive))
|
{
|
|
|
var FirmIds = AppSettingsConstVars.CyOsFirmIds;
|
var firmidlist = FirmIds?.Split(",")?.Select(x => new Guid(x));
|
|
|
var data = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "在职" && x.MobieNum == user.mobile && x.BF_IsDeliverManage == true).FirstAsync();
|
|
if (data != null)
|
{
|
isdrive = "true";
|
}
|
else
|
isdrive = "false";
|
await _redisOperationRepository.StringSetAsync(IsDeliverManageKey + user.mobile, isdrive, TimeSpan.FromMinutes(1));
|
}
|
|
//db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\5", "EC_SeckillInfo"); ;
|
//var data= db.Queryable<EC_PrizeInfo>().ToList();
|
//ret.data= data;
|
if (isdrive == "true")
|
{
|
return true;
|
|
}
|
else
|
{
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 是否是司机
|
/// </summary>
|
/// <returns></returns>
|
public async Task<bool> IsDrive()
|
{
|
var ret = new WebApiCallBack();
|
if (_User?.ID == null)
|
{
|
|
throw new Exception("登录信息错误,请重新登录");
|
|
}
|
var user = _coreCmsUserServices.QueryById(_User.ID);
|
if (user == null)
|
{
|
|
throw new Exception("登录信息错误,请重新登录");
|
}
|
var isdrive = await _redisOperationRepository.Get(IsCYDbDbKey + user.mobile);
|
if (string.IsNullOrEmpty(isdrive))
|
{
|
|
|
var FirmIds = AppSettingsConstVars.CyOsFirmIds;
|
var firmidlist = FirmIds?.Split(",")?.Select(x => new Guid(x));
|
|
|
var data = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "在职" && x.MobieNum == user.mobile && x.BF_IsDriver == true).FirstAsync();
|
|
if (data != null)
|
{
|
_DriveName = data.Name;
|
isdrive = "true";
|
}
|
else
|
{
|
_DriveName = null;
|
isdrive = "false";
|
}
|
|
await _redisOperationRepository.StringSetAsync(IsCYDbDbKey + user.mobile, isdrive, TimeSpan.FromMinutes(1));
|
}
|
|
//db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\5", "EC_SeckillInfo"); ;
|
//var data= db.Queryable<EC_PrizeInfo>().ToList();
|
//ret.data= data;
|
if (isdrive == "true")
|
{
|
|
|
return true;
|
|
}
|
else
|
{
|
return false;
|
}
|
|
|
}
|
#region 学校端列表
|
|
public async Task<WebApiCallBack> GetOderListOfSchoolManager(FMPageByWhereOrder entity)
|
{
|
|
var rt = await IsSchoolManger();
|
//var rt2 = await IsSchooler();
|
if (rt == false)
|
{
|
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
var user = await _coreCmsUserServices.QueryByIdAsync(_User.ID);
|
if (user == null)
|
{
|
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
|
var where = PredicateBuilder.True<CoreCmsPlanOrder>();
|
where = where.And(p => p.isdelete == false);
|
if (!string.IsNullOrWhiteSpace(entity.where))
|
{
|
var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
|
{
|
quxianId = "",
|
sheng = "",
|
shi = "",
|
quxian = "",
|
pianqu = "",
|
shipAddress = "",
|
DeliverState = ""
|
|
});
|
if (!string.IsNullOrWhiteSpace(obj.sheng))
|
{
|
|
|
where = where.And(p => p.sheng == obj.sheng);
|
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.shi))
|
{
|
|
|
where = where.And(p => p.shi == obj.shi);
|
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.quxian))
|
{
|
|
|
where = where.And(p => p.quxian == obj.quxian);
|
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.quxianId))
|
{
|
var quxianId = obj.quxianId.ObjToInt(0);
|
if (quxianId >= 0)
|
{
|
|
where = where.And(p => p.quxianId == quxianId);
|
|
}
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.pianqu))
|
{
|
var pianqu = obj.pianqu;
|
|
|
where = where.And(p => p.pianqu.Contains(pianqu));
|
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.shipAddress))
|
{
|
var shipAddress = obj.shipAddress;
|
|
|
where = where.And(p => p.shipAddress.Contains(shipAddress));
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.DeliverState))
|
{
|
|
if (Enum.TryParse(obj.DeliverState, out DeliverStateType result))
|
{
|
where = where.And(p => p.DeliverState == result);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
}
|
//where = where.And(p => user.mobile == p.userMobile);
|
//whereManger = whereManger.And(p => p.DeliverState == result);
|
where = where.And(p => p.isdelete == false);
|
RefAsync<int> totalNumbe = 0;
|
//var listSchool = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).OrderBy(p => p.quxianId).Select(p => new CoreCmsPlanOrderListDto(), true);
|
//var listSchoolManger = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).OrderBy(p => p.quxianId).Select(p => new CoreCmsPlanOrderListDto(), true);
|
var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).
|
LeftJoin<EC_OrderBasic>((p, or) => p.orderkeyid == or.Keyid)
|
.LeftJoin<OA_CustomerCommunications>((p, or, cus) => or.BuyerId == cus.Keyid)
|
.Where((p, or, cus) => cus.Keyid == _SchoolManagerKeyId)
|
.OrderBy((p, or, cus) => p.quxianId).Select((p, or, cus) => p, true).MergeTable().Select(p => new CoreCmsPlanOrderListDto(), true).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
|
//.QueryPageByDTOAsync(where, entity.page, entity.limit, true);
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = new
|
{
|
list,
|
entity.page,
|
totalNumbe,
|
entity.limit,
|
entity.where,
|
|
}
|
|
};
|
}
|
|
/// <summary>
|
/// 获取学校账号端的School
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
public async Task<WebApiCallBack> GetOderListOfSchool(FMPageByWhereOrder entity)
|
{
|
|
var rt = await IsSchooler();
|
var rt2 = await IsSchoolManger();
|
if (rt == false && rt2 == false)
|
{
|
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
var user = await _coreCmsUserServices.QueryByIdAsync(_User.ID);
|
if (user == null)
|
{
|
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
|
var where = PredicateBuilder.True<CoreCmsPlanOrder>();
|
|
where= where.And(p => p.isdelete == false);
|
if (!string.IsNullOrWhiteSpace(entity.where))
|
{
|
|
var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
|
{
|
quxianId = "",
|
sheng = "",
|
shi = "",
|
quxian = "",
|
pianqu = "",
|
shipAddress = "",
|
DeliverState = ""
|
|
});
|
if (!string.IsNullOrWhiteSpace(obj.sheng))
|
{
|
|
|
where = where.And(p => p.sheng == obj.sheng);
|
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.shi))
|
{
|
|
|
where = where.And(p => p.shi == obj.shi);
|
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.quxian))
|
{
|
|
|
where = where.And(p => p.quxian == obj.quxian);
|
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.quxianId))
|
{
|
var quxianId = obj.quxianId.ObjToInt(0);
|
if (quxianId >= 0)
|
{
|
|
where = where.And(p => p.quxianId == quxianId);
|
|
}
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.pianqu))
|
{
|
var pianqu = obj.pianqu;
|
|
|
where = where.And(p => p.pianqu.Contains(pianqu));
|
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.shipAddress))
|
{
|
var shipAddress = obj.shipAddress;
|
|
|
where = where.And(p => p.shipAddress.Contains(shipAddress));
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.DeliverState))
|
{
|
|
if (Enum.TryParse(obj.DeliverState, out DeliverStateType result))
|
{
|
where = where.And(p => p.DeliverState == result);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
}
|
//where = where.And(p => user.mobile == p.userMobile);
|
//whereManger = whereManger.And(p => p.DeliverState == result);
|
where = where.And(p => p.isdelete == false);
|
RefAsync<int> totalNumbe = 0;
|
var listSchool = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).Where(p => user.mobile == p.shipMobile).Select(p => new CoreCmsPlanOrderListDto(), true);
|
var listmager = _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).
|
LeftJoin<EC_OrderBasic>((p, or) => p.orderkeyid == or.Keyid)
|
.LeftJoin<OA_CustomerCommunications>((p, or, cus) => or.BuyerId == cus.Keyid)
|
.Where((p, or, cus) => cus.Keyid == _SchoolManagerKeyId)
|
.Select((p, or, cus) => p, true).Select(p => new CoreCmsPlanOrderListDto(), true);
|
|
List<CoreCmsPlanOrderListDto> list = new List<CoreCmsPlanOrderListDto>();
|
if (rt && rt2)
|
list = await _CyDbClient.Union(listSchool, listmager).OrderBy(p => p.quxianId).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
else
|
if (rt)
|
list = await listSchool.OrderBy(p => p.quxianId).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
else if (rt2)
|
list = await listmager.OrderBy(p => p.quxianId).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
|
//var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).OrderBy(p => p.quxianId).Select(p => new CoreCmsPlanOrderListDto(), true).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
|
//.QueryPageByDTOAsync(where, entity.page, entity.limit, true);
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = new
|
{
|
list,
|
entity.page,
|
totalNumbe,
|
entity.limit,
|
entity.where,
|
|
}
|
|
};
|
|
|
|
|
}
|
/// <summary>
|
/// 获取订单详情
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
public async Task<WebApiCallBack> GetOderInfo(FMIntId entity)
|
{
|
var rt = await IsSchooler();
|
var rtb = await IsDrive();
|
|
var rt2 = await IsSchoolManger();
|
if (rt == false && rt2 == false && rt2 == false)
|
{
|
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
if (rt == false && rtb == false)
|
{
|
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
|
|
var list = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items)
|
.Includes(x => x.DeliverOrderItems, o => o.items)
|
.Where(x => x.id == entity.id)
|
.Mapper(x =>
|
{
|
|
|
x.deliverOrder = x.DeliverOrderItems.OrderByDescending(de => de.CreateTime).FirstOrDefault();
|
}).FirstAsync();
|
|
var countList = await CountLessCount(list.DeliverOrderItems);
|
|
foreach (var item in list.items)
|
{
|
|
item.DeliveredCount = countList.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.OverCount).FirstOrDefault(0);
|
if (item.nums - item.DeliveredCount > 0)
|
item.unDeliveredCount = item.nums - item.DeliveredCount;
|
else
|
item.unDeliveredCount = 0;
|
|
}
|
|
|
return
|
new WebApiCallBack()
|
{
|
status = true,
|
data = list,
|
};
|
}
|
|
|
|
public async Task<WebApiCallBack> SetOderOfSchool(CoreCmsPlanOrderInfoDto planOrderInfoDto)
|
{
|
var rt = await IsSchooler();
|
var rt2 = await IsSchoolManger();
|
if (rt == false && rt2 == false)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
if (string.IsNullOrEmpty(planOrderInfoDto.shipMobile) || !planOrderInfoDto.shipMobile.IsPhoneNumberValid())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg="联系人电话必须是手机号码"
|
};
|
|
var oldOder = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Where(x => x.id == planOrderInfoDto.id).FirstAsync();
|
if (oldOder.status == 2)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "已经锁单"
|
};
|
}
|
if (oldOder.isdelete == true)
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "订单已删除"
|
};
|
|
decimal auturo = 0;
|
foreach (var item in oldOder.items)
|
{
|
item.nums = planOrderInfoDto.items.Where(x => x.id == item.id).FirstOrDefault().nums;
|
|
item.amount = item.price * item.nums;
|
auturo += item.amount;
|
|
}
|
oldOder.shipMobile = planOrderInfoDto.shipMobile;
|
oldOder.userMobile = planOrderInfoDto.shipMobile;
|
oldOder.shipName = planOrderInfoDto.shipName;
|
oldOder.orderAmount = auturo;
|
|
await _CyDbClient.AsTenant().BeginTranAsync();
|
try
|
{
|
await _CyDbClient.Updateable(oldOder).ExecuteCommandAsync();
|
await _CyDbClient.Updateable(oldOder.items).ExecuteCommandAsync();
|
await _CyDbClient.AsTenant().CommitTranAsync();
|
}
|
catch (Exception)
|
{
|
|
await _CyDbClient.AsTenant().RollbackTranAsync();
|
throw;
|
}
|
//await _CyDbClient.UpdateNav(oldOder).Include(x => x.items,new UpdateNavOptions
|
//{
|
// OneToOneSaveByPrimaryKey=true,
|
//}).ExecuteCommandAsync();
|
|
|
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOAjisuanjine, oldOder.orderkeyid?.ToString());
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = true
|
};
|
}
|
|
public async Task<WebApiCallBack> GetDeliveryOrderInfoOfSchool(FMStringId entity)
|
{
|
|
var rt = await IsSchooler();
|
var rt2 = await IsSchoolManger();
|
if (rt == false && rt2 == false)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
var data = _CyDbClient.Queryable<CoreDeliverOrder>()
|
.Where(x => x.id == new Guid(entity.id))
|
.Includes(x => x.items)
|
.Includes(x => x.tracks)
|
.Includes(x => x.Oreder, o => o.items)
|
.Includes(x => x.Oreder, o => o.DeliverOrderItems)
|
.Select(x => new CoreDeliverOrder()
|
{
|
DeliveryMoble = "",
|
|
|
|
}, true).Mapper(x =>
|
{
|
|
}).FirstAsync();
|
|
|
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = data
|
};
|
}
|
|
public async Task<WebApiCallBack> SetDeliveryDataOfschool(SetDeliveryDataDto entity)
|
{
|
var rt = await IsSchooler();
|
var rt2 = await IsSchoolManger();
|
if (rt == false && rt2 == false)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
|
|
var olddata = await _CyDbClient.Queryable<CoreCmsPlanOrder>()
|
.Includes(x => x.items)
|
.Includes(x => x.DeliverOrderItems, de => de.items)
|
.Where(x => x.id == entity.PlanOrderId)
|
.Mapper(x => x.deliverOrder = x.DeliverOrderItems.Where(y => y.OrderState == CoreDeliverOrderType.UnStart).FirstOrDefault())
|
.FirstAsync();
|
|
if (olddata == null)
|
{
|
return new WebApiCallBack()
|
{
|
status = false,
|
msg = "没有找到相关订单"
|
};
|
}
|
if (olddata.DeliverState == DeliverStateType.CompletedDelivery)
|
{
|
return new WebApiCallBack()
|
{
|
status = false,
|
msg = "已经完成配送不可修改"
|
};
|
}
|
var user = await _coreCmsUserServices.QueryByIdAsync(_User.ID);
|
await _CyDbClient.AsTenant().BeginTranAsync();
|
try
|
{
|
if (entity.MakeTime != null)
|
{
|
if (olddata.deliverOrder == null)
|
{
|
//没有配送单 新建
|
olddata.deliverOrder = await CreatDeliverItem(olddata);
|
olddata.deliverOrder.MakeTime = entity.MakeTime;
|
|
await _CyDbClient.InsertNav(olddata.deliverOrder).Include(x => x.items).ExecuteCommandAsync();
|
|
}
|
else
|
{
|
if (olddata.deliverOrder.MakeTime != entity.MakeTime)
|
{ //有配送单
|
olddata.deliverOrder.MakeTime = entity.MakeTime;
|
olddata.upDataBy = _UserMoble;
|
olddata.upDataTime = DateTime.Now;
|
await _CyDbClient.Updateable(olddata.deliverOrder).ExecuteCommandAsync();
|
}
|
}
|
}
|
|
if (olddata.DeliverRemark != entity.DeliverRemark)
|
|
{
|
olddata.DeliverRemark = entity.DeliverRemark;
|
olddata.upDataBy = _UserMoble;
|
olddata.upDataTime = DateTime.Now;
|
await _CyDbClient.Updateable(olddata).ExecuteCommandAsync();
|
}
|
await _CyDbClient.AsTenant().CommitTranAsync();
|
return new WebApiCallBack()
|
{
|
status = true,
|
|
};
|
}
|
catch (Exception)
|
{
|
await _CyDbClient.AsTenant().RollbackTranAsync();
|
throw;
|
}
|
|
|
}
|
public async Task<WebApiCallBack> GetDeliveryTracksOfSchool(FMStringId entity)
|
{
|
var rt = await IsSchooler();
|
var rt2 = await IsSchoolManger();
|
if (rt == false && rt2 == false)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
var data = await _CyDbClient.Queryable<CoreDeliveryOrderTracks>().Where(x => x.OrderID == new Guid(entity.id)).OrderByDescending(x=>x.CreateTime)
|
.ToListAsync();
|
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = data
|
};
|
}
|
|
|
|
public async Task<WebApiCallBack> GetDriverPhoneOfSchool(FMStringId entity)
|
{
|
|
var rt = await IsSchooler();
|
var rt2 = await IsSchoolManger();
|
if (rt == false && rt2 == false)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
if (!Guid.TryParse(entity.id, out Guid guid))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "id格式错误"
|
|
};
|
}
|
var data = await _CyDbClient.Queryable<CoreDeliverOrder>().Where(x => x.id == guid).FirstAsync();
|
if (data != null && !string.IsNullOrEmpty(data.DeliveryMoble))
|
{
|
return new WebApiCallBack
|
{
|
status = true,
|
data = data.DeliveryMoble
|
};
|
}
|
else
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有找到联系电话"
|
};
|
}
|
}
|
#endregion
|
|
|
#region 送货管理相关
|
public async Task<WebApiCallBack> GetOderListOfDeliveryManage(FMPageByWhereOrder entity)
|
{
|
if (!await IsDeliverManage())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
|
var where = PredicateBuilder.True<CoreCmsPlanOrder>();
|
if (!string.IsNullOrWhiteSpace(entity.where))
|
{
|
var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
|
{
|
quxianId = "",
|
pianqu = "",
|
shipAddress = "",
|
isScheduled = "",
|
sheng = "",
|
shi = "",
|
quxian = "",
|
|
|
});
|
if (!string.IsNullOrWhiteSpace(obj.sheng))
|
{
|
|
|
where = where.And(n => n.sheng == obj.sheng);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.shi))
|
{
|
|
|
where = where.And(n => n.shi == obj.shi);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.quxian))
|
{
|
|
|
where = where.And(n => n.quxian == obj.quxian);
|
|
}
|
if (!string.IsNullOrEmpty(obj.isScheduled))
|
{
|
if (obj.isScheduled == "1")
|
where = where.And(n => n.IngDeliverOrderID != null);
|
else
|
where = where.And(n => n.IngDeliverOrderID == null);
|
}
|
|
if (!string.IsNullOrEmpty(obj.quxianId))
|
{
|
var ad = obj.quxianId.ToInt32OrDefault(0);
|
if (ad > 0)
|
{
|
where = where.And(n => n.quxianId == ad);
|
}
|
|
}
|
|
|
if (!string.IsNullOrEmpty(obj.pianqu))
|
{
|
|
where = where.And(n => n.pianqu.Contains(obj.pianqu));
|
|
|
}
|
|
if (!string.IsNullOrEmpty(obj.shipAddress))
|
{
|
|
where = where.And(n => n.shipAddress.Contains(obj.shipAddress));
|
|
|
}
|
|
}
|
where = where.And(n => n.isdelete == false);
|
RefAsync<int> totalNumbe = 0;
|
var dlist = await _CyDbClient.Queryable<CoreCmsPlanOrder>()
|
//.Where(n => n.DeliverState != DeliverStateType.CompletedDelivery)
|
//.Where(n => n.isdelete ==false)
|
.Select((n) => new CoreCmsPlanOrder
|
{
|
|
IngDeliverOrderID = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
|
&& x.OrderState != CoreDeliverOrderType.Faile
|
&& x.OrderState != CoreDeliverOrderType.Completed
|
&& (x.DeliveryMoble != "" && x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x => x.id),
|
deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
|
&& x.OrderState != CoreDeliverOrderType.Faile
|
&& x.OrderState != CoreDeliverOrderType.Completed
|
&& (x.DeliveryMoble != "" && x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).First(),
|
MakeTime = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
|
&& x.OrderState != CoreDeliverOrderType.Faile
|
&& x.OrderState != CoreDeliverOrderType.Completed
|
&& (x.DeliveryMoble != "" && x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x=>x.MakeTime)
|
},
|
|
true
|
).MergeTable().Where(where).OrderBy(n=>n.MakeTime).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
|
var data = dlist.Select(x => new
|
{
|
id = x.id,
|
MakeTime = x.deliverOrder?.MakeTime,
|
shipAddress = x.shipAddress,
|
isScheduled = x.deliverOrder != null ? "1" : "0",
|
x.DeliverState
|
|
}).ToList();
|
return new WebApiCallBack
|
{
|
status = true,
|
data = new
|
{
|
totalNumbe,
|
data,
|
}
|
|
};
|
}
|
public async Task<WebApiCallBack> GetSendDeliveryOderListOfDeliveryManage(FMPageByWhereOrder entity)
|
{
|
if (!await IsDeliverManage())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
|
var where = PredicateBuilder.True<CoreCmsPlanOrder>();
|
if (!string.IsNullOrWhiteSpace(entity.where))
|
{
|
var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
|
{
|
quxianId = "",
|
pianqu = "",
|
shipAddress = "",
|
MakeTime = "",
|
sheng = "",
|
shi = "",
|
quxian = "",
|
DeliveryMoble="",
|
|
|
});
|
if(!string.IsNullOrEmpty(obj.DeliveryMoble))
|
{
|
where = where.And(n => n.DeliveryMoble == obj.DeliveryMoble);
|
}
|
if (!string.IsNullOrWhiteSpace(obj.sheng))
|
{
|
|
|
where = where.And(n => n.sheng == obj.sheng);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.shi))
|
{
|
|
|
where = where.And(n => n.shi == obj.shi);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.quxian))
|
{
|
|
|
where = where.And(n => n.quxian == obj.quxian);
|
|
}
|
if (!string.IsNullOrEmpty(obj.MakeTime))
|
{
|
var date = obj.MakeTime.ParseDateTimeRange();
|
if (date.StartDate != null && date.EndDate != null)
|
{
|
|
where = where.And(n => n.deliverOrder.MakeTime > date.StartDate && n.deliverOrder.MakeTime < date.EndDate);
|
}
|
}
|
|
if (!string.IsNullOrEmpty(obj.quxianId))
|
{
|
var ad = obj.quxianId.ToInt32OrDefault(0);
|
if (ad > 0)
|
{
|
where = where.And(n => n.quxianId == ad);
|
}
|
|
}
|
|
|
if (!string.IsNullOrEmpty(obj.pianqu))
|
{
|
|
where = where.And(n => n.pianqu.Contains(obj.pianqu));
|
|
|
}
|
|
if (!string.IsNullOrEmpty(obj.shipAddress))
|
{
|
|
where = where.And(n => n.shipAddress.Contains(obj.shipAddress));
|
|
|
}
|
|
}
|
where = where.And(n => n.isdelete == false);
|
RefAsync<int> totalNumbe = 0;
|
var dlist = await _CyDbClient.Queryable<CoreCmsPlanOrder>()
|
//.Where(n => n.DeliverState != DeliverStateType.CompletedDelivery)
|
.Select((n) => new CoreCmsPlanOrder
|
{
|
|
deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
|
&& x.OrderState != CoreDeliverOrderType.Faile
|
&& x.OrderState != CoreDeliverOrderType.Completed
|
&& (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).First(),
|
MakeTime = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
|
&& x.OrderState != CoreDeliverOrderType.Faile
|
&& x.OrderState != CoreDeliverOrderType.Completed
|
&& (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x => x.MakeTime),
|
|
DeliveryMoble = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id
|
&& x.OrderState != CoreDeliverOrderType.Faile
|
&& x.OrderState != CoreDeliverOrderType.Completed
|
&& (x.DeliveryMoble != "" || x.DeliveryMoble != null)).OrderByDesc(x => x.CreateTime).Select(x => x.DeliveryMoble)
|
}
|
|
, true
|
).MergeTable().Where(where).OrderBy(x=>x.MakeTime).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
|
var deliveryList = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "在职" && x.BF_IsDriver == true).Select(x => new
|
{
|
deliveryMoble = x.MobieNum,
|
name = x.Name,
|
|
}).ToListAsync();
|
return new WebApiCallBack
|
{
|
status = true,
|
data = new
|
{
|
totalNumbe,
|
data = dlist.Select(x => new
|
{
|
id = x.id.ToString(),
|
x.shipAddress,
|
x.quxian,
|
x.pianqu,
|
x.deliverOrder,
|
x.DeliverState,
|
x.DeliveryMoble
|
|
|
}).ToList(),
|
|
deliveryList
|
|
}
|
};
|
}
|
public async Task<WebApiCallBack> GetDeliveryOderInfoOfDeliveryManage(FMIntId entity)
|
{
|
if (!await IsDeliverManage())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
|
var data = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Includes(x => x.DeliverOrderItems, itm => itm.items)
|
.Where(x => x.isdelete == false && x.id == entity.id)
|
.FirstAsync();
|
if (data == null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "订单已完成"
|
};
|
};
|
|
//只统计已经开始配送的,和已经配送完成的订单
|
var DeliverOrderlist = data.DeliverOrderItems.Where(x => x.OrderState == CoreDeliverOrderType.Start || x.OrderState == CoreDeliverOrderType.Completed).ToList();
|
|
var DeliverOrderItemList = new List<CoreDeliverOrderItem>();
|
foreach (var Deliveritem in DeliverOrderlist)
|
{
|
DeliverOrderItemList.AddRange(Deliveritem.items);
|
|
}
|
|
// 按 ZYBName 和 ZYBSpecification 分组,并统计每个分组的 Number 总和
|
var groupedItems = DeliverOrderItemList
|
.GroupBy(item => new { item.ZYBName, item.ZYBSpecification })
|
.Select(group => new CoreDeliverOrderItem
|
{
|
ZYBName = group.Key.ZYBName,
|
ZYBSpecification = group.Key.ZYBSpecification,
|
Number = group.Sum(item => item.Number)
|
})
|
.ToList();
|
///有并且未执行配送的订单
|
var UndoDeliver = data.DeliverOrderItems.Where(x => x.OrderState == CoreDeliverOrderType.UnStart).FirstOrDefault();
|
//配送单列表详情
|
var orderItm = new List<CoreCmsPlanOrderItemDto>();
|
|
foreach (var item in data.items)
|
{
|
var unDeliver = groupedItems.Where(x => x.ZYBName == item.name && x.ZYBSpecification == item.specification).FirstOrDefault()?.Number ?? 0;
|
unDeliver = item.nums - unDeliver;
|
if (unDeliver < 0)
|
unDeliver = 0;
|
int DeliveredCount = UndoDeliver?.items.Where(x => x.ZYBSpecification == item.name && x.ZYBName == item.name).FirstOrDefault()?.Number ??
|
unDeliver;
|
orderItm.Add(new CoreCmsPlanOrderItemDto
|
{
|
amount = item.amount,
|
id = item.id,
|
name = item.name,
|
nums = item.nums,
|
Number = DeliveredCount,
|
price = item.price,
|
specification = item.specification,
|
isOld = item.isOld,
|
unDeliveredCount = unDeliver,
|
DeliveredCount = DeliveredCount
|
});
|
}
|
|
var deliveryList = await _CyDbClient.Queryable<OA_Staff>().Where(x => x.Status == "在职" && x.BF_IsDriver == true).Select(x => new
|
{
|
deliveryMoble = x.MobieNum,
|
name = x.Name,
|
|
}).ToListAsync();
|
|
return new WebApiCallBack
|
{
|
status = true,
|
data = new
|
{
|
id = UndoDeliver?.id,
|
OrderId = data.id,
|
//司机电话
|
DeliveryMoble = UndoDeliver?.DeliveryMoble,
|
items = orderItm,
|
UndoDeliver?.MakeTime,
|
//司机列表
|
deliveryList
|
|
}
|
};
|
|
}
|
public async Task<WebApiCallBack> SetDeliveryOderOfDeliveryManage(DeliveryOrderDto entity)
|
{
|
if (!await IsDeliverManage())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
bool isallZone = true;
|
foreach (var item in entity.items)
|
{
|
if (item.Number != 0)
|
isallZone = false;
|
}
|
if (isallZone)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "配送货物为0"
|
};
|
}
|
var planOrder = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Where(x => x.id == entity.OrderId).FirstAsync();
|
if (planOrder == null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没找到订单",
|
};
|
}
|
|
|
if (entity.id != null)
|
{
|
//是修改
|
|
var DeliverOrder = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Where(x => x.id == entity.id).FirstAsync();
|
if (DeliverOrder == null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没找到订单",
|
};
|
}
|
if (entity.MakeTime != null)
|
|
DeliverOrder.MakeTime = entity.MakeTime;
|
if (entity.items != null && entity.items.Count > 0)
|
{
|
foreach (var item in DeliverOrder.items)
|
{
|
var newitem = entity.items.Where(x => x.name == item.ZYBName && x.specification == item.ZYBSpecification).FirstOrDefault();
|
if (newitem != null)
|
{
|
if (item.Number != newitem.Number)
|
{
|
item.Number = newitem.Number ?? 0;
|
item.UpDataBy = _UserMoble;
|
item.UpdataTime = DateTime.Now;
|
}
|
|
|
}
|
}
|
}
|
//DeliverOrder.items= entity.items;
|
if (!string.IsNullOrEmpty(entity.DeliveryMoble))
|
DeliverOrder.DeliveryMoble = entity.DeliveryMoble;
|
DeliverOrder.UpDataBy = _coreCmsUserServices.QueryById(_User.ID)?.mobile;
|
|
DeliverOrder.UpdataTime = DateTime.Now;
|
|
await _CyDbClient.UpdateNav(DeliverOrder).Include(x => x.items).ExecuteCommandAsync();
|
|
|
|
}
|
else
|
|
{
|
|
var olddeliver = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Where(x => x.OrderId == entity.OrderId && x.OrderState == CoreDeliverOrderType.UnStart).FirstAsync();
|
if (olddeliver != null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "配送单已经改变,请刷新后重新配置新的配送单",
|
};
|
}
|
//新建
|
var DeliverOrder = new CoreDeliverOrder()
|
{
|
MakeTime = entity.MakeTime,
|
OrderId = entity.OrderId,
|
CreateTime = DateTime.Now,
|
CreateBy = _UserMoble,
|
DeliveryMoble = entity.DeliveryMoble,
|
id = Guid.NewGuid(),
|
OrderState = CoreDeliverOrderType.UnStart,
|
items = new List<CoreDeliverOrderItem>()
|
};
|
if (entity.items != null && entity.items.Count > 0)
|
{
|
foreach (var item in entity.items)
|
{
|
DeliverOrder.items.Add(new CoreDeliverOrderItem()
|
{
|
CreateBy = _UserMoble,
|
CreateTime = DateTime.Now,
|
id = Guid.NewGuid(),
|
Number = item.Number ?? 0,
|
OrderID = DeliverOrder.id,
|
ZYBName = item.name,
|
ZYBSpecification = item.specification,
|
|
|
});
|
|
}
|
|
}
|
|
await _CyDbClient.InsertNav(DeliverOrder).Include(x => x.items).ExecuteCommandAsync();
|
}
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = true
|
};
|
|
}
|
|
public async Task<WebApiCallBack> GetSchoolInventory(FMIntId entity)
|
{
|
var rt = await IsDeliverManage();
|
if (rt == false)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
}
|
var data = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Includes(x => x.DeliverOrderItems, de => de.items).Where(x => x.isdelete == false && x.id == entity.id).FirstAsync();
|
if (data == null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "订单已失效"
|
};
|
}
|
var DataCountlist = await CountLessCount(data.DeliverOrderItems);
|
List<CoreCmsPlanOrderItemDto> datalist = new List<CoreCmsPlanOrderItemDto>();
|
|
foreach (var item in data.items)
|
{
|
var overCount = DataCountlist.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.OverCount).FirstOrDefault(0);
|
datalist.Add(new CoreCmsPlanOrderItemDto()
|
{
|
amount = item.amount,
|
nums = item.nums,
|
name=item.name,
|
specification=item.specification,
|
price= item.price,
|
|
DeliveredCount = overCount,
|
unDeliveredCount = item.nums - overCount,
|
LessNumber = DataCountlist.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.LessCount).FirstOrDefault(0),
|
Inventory=0
|
|
|
});
|
|
|
}
|
return new WebApiCallBack
|
{
|
status = true,
|
data = new
|
{
|
data.shipAddress,
|
data.shipMobile,
|
data.shipName,
|
data.shouhuoAddress,
|
data.status,
|
data.DeliverState,
|
data.DeliverRemark,
|
data.keYongAmount,
|
items = datalist,
|
|
|
}
|
};
|
|
|
}
|
public async Task<WebApiCallBack> MakeMultiDeliveryOderOfDeliveryManage(MakeMultiDeliveryOrderDto entity)
|
{
|
|
|
var oder = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(x => entity.ids.Contains(x.id) && x.isdelete == false).Select(x => new CoreCmsPlanOrder()
|
{
|
deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(y => y.OrderId == x.id && y.OrderState != CoreDeliverOrderType.Completed).First()
|
}
|
).ToListAsync();
|
if (oder == null || oder.Count == 0)
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = true
|
|
};
|
//检验
|
foreach (var item in oder)
|
{
|
if (item.deliverOrder != null && item.deliverOrder.OrderState != CoreDeliverOrderType.UnStart)
|
return new WebApiCallBack()
|
{
|
status = false,
|
msg = $"学校:{item.shipAddress} 订单已经在送货中,不能安排送货"
|
};
|
};
|
|
|
//安排送货
|
|
await _CyDbClient.AsTenant().BeginTranAsync();
|
try
|
{
|
foreach (var item in oder)
|
{
|
|
if (item.deliverOrder != null && item.deliverOrder.OrderState == CoreDeliverOrderType.UnStart)
|
{
|
if (item.deliverOrder.MakeTime != entity.Time || item.deliverOrder.DeliveryMoble != entity.DeliveryMoble)
|
|
{
|
item.deliverOrder.MakeTime = entity.Time;
|
item.deliverOrder.DeliveryMoble = entity.DeliveryMoble;
|
item.deliverOrder.UpDataBy = _UserMoble;
|
item.deliverOrder.UpdataTime = DateTime.Now;
|
await _CyDbClient.Updateable(item.deliverOrder).ExecuteCommandAsync();
|
}
|
}
|
else if (item.deliverOrder == null)
|
{
|
var oderold = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.items).Includes(x => x.DeliverOrderItems, devs => devs.items).Where(x => x.id == item.id).FirstAsync();
|
//创建新表
|
var deliverOrder = await CreatDeliverItem(oderold);
|
deliverOrder.MakeTime = DateTime.Now;
|
deliverOrder.DeliveryMoble = entity.DeliveryMoble;
|
|
await _CyDbClient.InsertNav(deliverOrder).Include(x => x.items).ExecuteCommandAsync();
|
}
|
|
|
|
}
|
await _CyDbClient.AsTenant().CommitTranAsync();
|
|
return new WebApiCallBack
|
{
|
status = true,
|
data = true,
|
};
|
}
|
catch (Exception)
|
{
|
await _CyDbClient.AsTenant().RollbackTranAsync();
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "系统处理失败"
|
|
};
|
}
|
|
|
|
}
|
|
#endregion
|
#region 司机端
|
|
public async Task<WebApiCallBack> GetDeliverOderListOfDrver(FMPageByWhereOrder entity)
|
{
|
if (!await IsDrive())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
var where = PredicateBuilder.True<CoreCmsPlanOrder>();
|
if (!string.IsNullOrWhiteSpace(entity.where))
|
{
|
var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
|
{
|
quxianId = "",
|
sheng = "",
|
pianqu = "",
|
shipAddress = "",
|
shi = "",
|
quxian = "",
|
DeliverState = ""
|
|
|
|
});
|
if (!string.IsNullOrWhiteSpace(obj.DeliverState))
|
{
|
var ad = obj.DeliverState.ToInt32OrDefault(0);
|
|
where = where.And(n => n.DeliverState == (DeliverStateType)ad);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.sheng))
|
{
|
|
|
where = where.And(n => n.sheng == obj.sheng);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.shi))
|
{
|
|
|
where = where.And(n => n.shi == obj.shi);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.quxian))
|
{
|
|
|
where = where.And(n => n.quxian == obj.quxian);
|
|
}
|
if (!string.IsNullOrEmpty(obj.quxianId))
|
{
|
var ad = obj.quxianId.ToInt32OrDefault(0);
|
if (ad > 0)
|
{
|
where = where.And(n => n.quxianId == ad);
|
}
|
|
}
|
|
|
if (!string.IsNullOrEmpty(obj.pianqu))
|
{
|
|
where = where.And(n => n.pianqu.Contains(obj.pianqu));
|
|
|
}
|
|
if (!string.IsNullOrEmpty(obj.shipAddress))
|
{
|
|
where = where.And(n => n.shipAddress.Contains(obj.shipAddress));
|
|
|
}
|
|
}
|
where = where.And(n => n.isdelete == false);
|
var user = _coreCmsUserServices.QueryById(_User.ID);
|
if (user == null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "登录信息错误"
|
};
|
}
|
RefAsync<int> totalNumbe = 0;
|
var lisdata = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(where).Select(n => new CoreCmsPlanOrder
|
{
|
|
IngDeliverOrderID = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id && (x.OrderState == CoreDeliverOrderType.UnStart || x.OrderState == CoreDeliverOrderType.Start)
|
&& x.DeliveryMoble == user.mobile).Select(x => x.id),
|
deliverOrder = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(x => x.OrderId == n.id && (x.OrderState == CoreDeliverOrderType.UnStart || x.OrderState == CoreDeliverOrderType.Start)
|
&& x.DeliveryMoble == user.mobile).First()
|
|
}, true).MergeTable().Where(x => x.IngDeliverOrderID != null).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
return new WebApiCallBack
|
{
|
status = true,
|
data = new
|
{
|
totalNumbe,
|
data = lisdata
|
}
|
};
|
}
|
public async Task<WebApiCallBack> ManageDeliverOderListOfDrver(FMPageByWhereOrder entity)
|
{
|
if (!await IsDrive())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
|
var where = PredicateBuilder.True<CoreDeliverOrder>();
|
if (!string.IsNullOrWhiteSpace(entity.where))
|
{
|
var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
|
{
|
quxianId = "",
|
sheng = "",
|
pianqu = "",
|
shipAddress = "",
|
shi = "",
|
quxian = "",
|
OrderState = "",
|
StartTimeZone = "",
|
EndTimeStartZone = "",
|
|
|
});
|
if (!string.IsNullOrWhiteSpace(obj.OrderState))
|
{
|
var ad = obj.OrderState.ToInt32OrDefault(0);
|
|
where = where.And(n => n.OrderState == (CoreDeliverOrderType)ad);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.sheng))
|
{
|
|
|
where = where.And(n => n.Oreder.sheng == obj.sheng);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(obj.shi))
|
{
|
|
|
where = where.And(n => n.Oreder.shi == obj.shi);
|
|
}
|
if (!string.IsNullOrWhiteSpace(obj.quxian))
|
{
|
|
|
where = where.And(n => n.Oreder.quxian == obj.quxian);
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(obj.pianqu))
|
{
|
|
where = where.And(n => n.Oreder.pianqu.Contains(obj.pianqu));
|
|
|
}
|
|
if (!string.IsNullOrEmpty(obj.shipAddress))
|
{
|
|
where = where.And(n => n.Oreder.shipAddress.Contains(obj.shipAddress));
|
|
|
}
|
|
|
if (!string.IsNullOrEmpty(obj.EndTimeStartZone))
|
{
|
var date = obj.EndTimeStartZone.ParseDateTimeRange();
|
if (date.StartDate != null && date.EndDate != null)
|
|
where = where.And(n => n.OverTime < date.EndDate && n.OverTime > date.EndDate);
|
|
|
}
|
if (!string.IsNullOrEmpty(obj.StartTimeZone))
|
{
|
var date = obj.StartTimeZone.ParseDateTimeRange();
|
if (date.StartDate != null && date.EndDate != null)
|
where = where.And(n => n.StartTime < date.EndDate && n.StartTime > date.EndDate);
|
|
|
}
|
|
}
|
where = where.And(n => n.DeliveryMoble == _UserMoble);
|
where = where.And(n => n.OrderState == CoreDeliverOrderType.Completed);
|
RefAsync<int> totalNumbe = 0;
|
var data = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(n => n.Oreder).Where(where).Where(x=>x.Oreder.isdelete==false).OrderByDescending(n => n.StartTime).ToPageListAsync(entity.page, entity.limit, totalNumbe);
|
//var datalist= await _CyDbClient.Queryable<CoreCmsPlanOrder>().Includes(x => x.DeliverOrderItems).Where(where).Select(x => new CoreCmsPlanOrder
|
//{
|
// IngDeliverOrderID = SqlFunc.Subqueryable<CoreDeliverOrder>().Where(ide => ide.DeliveryMoble == _UserMoble && ide.OrderId == x.id).Select(ide => ide.id)
|
//},true).MergeTable().Where(x => x.IngDeliverOrderID != null).Mapper(x=>
|
//{
|
// x.DeliverOrderItems.Where(x => x.DeliveryMoble == _UserMoble).ToList();
|
// x.IngDeliverOrderID = null;
|
//}).ToListAsync();
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = new
|
{
|
list = data,
|
totalNumbe
|
}
|
};
|
|
}
|
|
|
|
|
public async Task<WebApiCallBack> GetDeliverInfoOfDrver(FMStringId entity)
|
{
|
|
|
if (!Guid.TryParse(entity.id, out Guid guid))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "id格式错误"
|
|
};
|
}
|
|
var data = await _CyDbClient.Queryable<CoreDeliverOrder>()
|
.Where(x => x.id == guid && x.OrderState != CoreDeliverOrderType.Faile)
|
.Includes(x => x.items).Includes(x => x.Oreder, or => or.items).FirstAsync();
|
if (data == null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有配送订单可以操作"
|
};
|
}
|
var DeliverOrderlist = await _CyDbClient.Queryable<CoreDeliverOrder>().Where(x => x.OrderId == data.OrderId).ToListAsync();
|
var lessdata = await CountLessCount(DeliverOrderlist);
|
var finish = await _redisOperationRepository.Get(LockFilshDeliverOderKey + data.id);
|
var CanFinishOrder = true;
|
|
if (data.OrderState != CoreDeliverOrderType.Start)
|
{
|
CanFinishOrder = false;
|
}
|
else
|
CanFinishOrder = true;
|
if (finish == LockFilshDeliverOderString)
|
CanFinishOrder = false;
|
var ret = new DeliveryOrderDto()
|
{
|
MakeTime = data.MakeTime,
|
DeliveryMoble = data.DeliveryMoble,
|
OrderState = data.OrderState,
|
Remarke= data.Remarke,
|
PlanOrdInfo = new CoreCmsPlanOrderInfoDto()
|
{
|
pianqu = data.Oreder.pianqu,
|
quxianId = data.Oreder.quxianId,
|
shipMobile = data.Oreder.shipMobile,
|
shipAddress = data.Oreder.shipAddress,
|
shouhuoAddress = data.Oreder.shipAddress,
|
DeliverRemark = data.Oreder.DeliverRemark,
|
shipName = data.Oreder.shipName,
|
sheng = data.Oreder.sheng,
|
shi = data.Oreder.shi,
|
quxian = data.Oreder.quxian,
|
DeliveryOderID = data.id,
|
|
|
|
|
|
},
|
CanFinishOrder=CanFinishOrder,
|
items = new List<CoreCmsPlanOrderItemDto>()
|
|
};
|
foreach (var item in data.Oreder.items)
|
{
|
var count = lessdata.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.OverCount).FirstOrDefault(0);
|
var thisNumber = data.items.Where(x => x.ZYBName == item.name && x.ZYBSpecification == item.specification).FirstOrDefault();
|
ret.items.Add(new CoreCmsPlanOrderItemDto()
|
{
|
name = item.name,
|
specification = item.specification,
|
nums = item.nums,
|
DeliveredCount = count,
|
Number = thisNumber?.Number ?? count,
|
unDeliveredCount = item.nums > count ? item.nums - count : 0,
|
LessNumber = thisNumber.LessNumber,
|
});
|
|
|
}
|
return new WebApiCallBack()
|
{
|
status = true,
|
data = ret
|
};
|
|
}
|
|
public async Task<WebApiCallBack> StartDeliverOrderOfDrver(FMStringId entity)
|
{
|
|
if (!Guid.TryParse(entity.id, out Guid guid))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "id格式错误"
|
|
};
|
}
|
|
var data = await _CyDbClient.Queryable<CoreDeliverOrder>()
|
.Where(x => x.id == guid && x.OrderState == CoreDeliverOrderType.UnStart)
|
.FirstAsync();
|
if (data == null)
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有数据,或者是没有权限可操作"
|
};
|
data.OrderState = CoreDeliverOrderType.Start;
|
data.UpDataBy = _UserMoble;
|
data.UpdataTime = DateTime.Now;
|
data.StartTime = DateTime.Now;
|
await _CyDbClient.Updateable(data).ExecuteCommandAsync();
|
_redisOperationRepository.StringSet(LockFilshDeliverOderKey + data.id, LockFilshDeliverOderString, TimeSpan.FromMinutes(5));
|
return new WebApiCallBack()
|
{
|
status = true
|
};
|
|
}
|
|
public async Task<WebApiCallBack> SetDeliverOrdeOfDrver(DeliveryOrderDto entity)
|
{
|
|
if (!await IsDrive())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有权限操作"
|
};
|
bool isallZone = true;
|
foreach (var item in entity.items)
|
{
|
if (item.Number != 0)
|
isallZone = false;
|
}
|
if (isallZone)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "配送货物为0"
|
};
|
}
|
|
var data = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Includes(x => x.Oreder).Where(x => x.id == entity.id && x.OrderState != CoreDeliverOrderType.Faile && x.DeliveryMoble == _UserMoble).FirstAsync();
|
if (data == null)
|
{
|
return new WebApiCallBack()
|
{
|
status = false,
|
msg = "没有权限或者状态已经锁定不可更改"
|
};
|
}
|
var deliverlist = await _CyDbClient.Queryable<CoreDeliverOrder>().Includes(x => x.items).Where(x => x.OrderId == data.OrderId).ToListAsync();
|
var countlist = await CountLessCount(deliverlist);
|
//司机不可改
|
//if (!string.IsNullOrEmpty(data.Oreder?.DeliverRemark))
|
//{
|
// if (data.Oreder.DeliverRemark != data.Oreder?.DeliverRemark)
|
// {
|
// data.Oreder.DeliverRemark = data.Oreder?.DeliverRemark;
|
|
// data.Oreder.upDataTime = DateTime.Now;
|
// data.Oreder.upDataBy = _UserMoble;
|
// }
|
//}
|
if (entity.Remarke != data.Remarke)
|
{
|
data.Remarke = entity.Remarke;
|
data.UpDataBy = _UserMoble;
|
data.UpdataTime = DateTime.Now;
|
}
|
foreach (var item in data.items)
|
{
|
var it = entity.items.Where(x => x.name == item.ZYBName && x.specification == item.ZYBSpecification).FirstOrDefault();
|
if (it?.LessNumber != null)
|
if (item.LessNumber != it.LessNumber)
|
{
|
item.LessNumber = it.LessNumber ?? 0;
|
item.UpDataBy = _UserMoble;
|
item.UpdataTime = DateTime.Now;
|
|
|
}
|
// 送货数量是否能超过预定数量?
|
//item.Number- countlist.Where(x=>x.name==item.ZYBName&&x.Specification==item.ZYBSpecification).Select(x=>x.OverCount).FirstOrDefault(0)
|
if (it?.nums != null)
|
if (item.Number != it.Number)
|
{
|
item.Number = it.Number ?? 0;
|
item.UpDataBy = _UserMoble;
|
item.UpdataTime = DateTime.Now;
|
}
|
|
|
}
|
await _CyDbClient.UpdateNav(data).Include(x => x.Oreder).Include(x => x.items).ExecuteCommandAsync();
|
|
return new WebApiCallBack
|
{
|
status = true
|
};
|
|
}
|
|
public async Task<WebApiCallBack> FinishDeliverOrdeOfDrver(FMStringId entity)
|
{
|
|
if (!Guid.TryParse(entity.id, out Guid guid))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "id格式错误"
|
|
};
|
}
|
if (!await IsDrive())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有权限操作"
|
};
|
|
var data = await _CyDbClient.Queryable<CoreDeliverOrder>()
|
.Where(x => x.id == guid && x.OrderState == CoreDeliverOrderType.Start)
|
.FirstAsync();
|
if (data == null)
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有数据,或者是没有权限可操作"
|
};
|
var lockflg = await _redisOperationRepository.Get(LockFilshDeliverOderKey + data.id.ToString());
|
if (lockflg != null&&lockflg== LockFilshDeliverOderString)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "开始配送后5分钟之内不能完成订单操作"
|
};
|
}
|
|
|
var order = await _CyDbClient.Queryable<CoreCmsPlanOrder>().Where(x => x.id == data.OrderId).Includes(x => x.items)
|
.Includes(x => x.DeliverOrderItems, deo => deo.items).FirstAsync();
|
if (order == null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有找到订单"
|
};
|
}
|
var countlist = await CountLessCount(order.DeliverOrderItems);
|
await _CyDbClient.AsTenant().BeginTranAsync();
|
try
|
{
|
if (countlist != null)
|
{
|
//修改订单状态
|
DeliverStateType isOver = DeliverStateType.CompletedDelivery;
|
for (int i = 0; i < order.items.Count; i++)
|
{
|
|
var dcount = countlist.Where(x => x.name == order.items[i].name && x.Specification == order.items[i].specification).FirstOrDefault();
|
if (dcount != null)
|
{
|
|
if (order.items[i].nums > (dcount.OverCount + dcount.IngCount))
|
|
{
|
isOver = DeliverStateType.PartialDelivery;
|
break;
|
}
|
}
|
}
|
|
|
if (countlist.Count == 0)
|
{
|
|
isOver = DeliverStateType.NoDelivery;
|
}
|
if (order.DeliverState != isOver)
|
|
{
|
order.DeliverState = isOver;
|
order.upDataBy = _UserMoble;
|
order.upDataTime = DateTime.Now;
|
await _CyDbClient.Updateable(order).ExecuteCommandAsync();
|
}
|
|
|
}
|
data.OrderState = CoreDeliverOrderType.Completed;
|
data.UpDataBy = _UserMoble;
|
data.UpdataTime = DateTime.Now;
|
data.OverTime = DateTime.Now;
|
await _CyDbClient.Updateable(data).ExecuteCommandAsync();
|
|
await _CyDbClient.AsTenant().CommitTranAsync();
|
return new WebApiCallBack()
|
{
|
status = true
|
};
|
|
}
|
catch (Exception)
|
{
|
await _CyDbClient.AsTenant().RollbackTranAsync();
|
throw;
|
}
|
|
}
|
public async Task<WebApiCallBack> SetTarcks(TracksDto entity)
|
{
|
|
if (!await IsDrive())
|
{
|
|
return new WebApiCallBack()
|
{
|
status = false,
|
|
msg = "非司机端不集坐标数据",
|
};
|
}
|
entity.Moble = _UserMoble;
|
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOrderTarcks, JsonConvert.SerializeObject(entity));
|
return new WebApiCallBack()
|
{
|
status = true,
|
};
|
}
|
|
|
#endregion
|
#region 其他接口函数
|
public async Task<List<Sys_CitySite>> GetZoneList(Sys_CitySite cyte = null)
|
{
|
if (cyte == null)
|
return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 1 && x.IsDisplay == true && x.ProvinceId == 0 && x.CityId == 0).OrderBy(x => x.OrderNum).ToListAsync();
|
if (cyte.CityLevel == 3)
|
return new List<Sys_CitySite>();
|
if (cyte.CityLevel == 2)
|
//区
|
return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 3 && x.IsDisplay == true && x.ProvinceId == cyte.ProvinceId && x.CityId == cyte.Keyid).OrderBy(x => x.OrderNum).ToListAsync();
|
if (cyte.CityLevel == 1)
|
//查市级
|
return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.CityLevel == 2 && x.IsDisplay == true && x.ProvinceId == cyte.Keyid && x.CityId == 0).OrderBy(x => x.OrderNum).ToListAsync();
|
return new List<Sys_CitySite>();
|
}
|
|
public async Task<List<Sys_CitySite>> GetZoneListALL()
|
{
|
return await _CyDbClient.Queryable<Sys_CitySite>().Where(x => x.IsDisplay == true).ToListAsync();
|
}
|
|
#endregion
|
|
#region 其他函数
|
/// <summary>
|
/// 创建新的配送单列表,会根据当前订单情况创建订单
|
/// </summary>
|
/// <param name="order"></param>
|
/// <returns></returns>
|
private async Task<CoreDeliverOrder> CreatDeliverItem(CoreCmsPlanOrder order)
|
{
|
if (order.items == null)
|
order.items = await _CyDbClient.Queryable<CoreCmsPlanOrderItem>().Where(x => x.orderId == order.id).ToListAsync();
|
if (order.DeliverOrderItems == null)
|
order.DeliverOrderItems = await _CyDbClient.Queryable<CoreDeliverOrder>().Where(x => x.OrderId == order.id).Includes(x => x.items).ToListAsync();
|
|
var countlist = await CountLessCount(order.DeliverOrderItems);
|
var DeliverOrder = new CoreDeliverOrder()
|
{
|
CreateBy = _UserMoble,
|
CreateTime = DateTime.Now,
|
OrderId = order.id,
|
id = Guid.NewGuid(),
|
OrderState= CoreDeliverOrderType.UnStart,
|
|
};
|
var ret = new List<CoreDeliverOrderItem>();
|
|
foreach (var item in order.items)
|
{
|
var Number = item.nums - countlist.Where(x => x.name == item.name && x.Specification == item.specification).Select(x => x.OverCount ).FirstOrDefault(0);
|
if (Number < 0)
|
Number = 0;
|
|
ret.Add(new CoreDeliverOrderItem()
|
{
|
CreateBy = _UserMoble,
|
CreateTime = DateTime.Now,
|
Number = Number,
|
ZYBName = item.name,
|
ZYBSpecification = item.specification,
|
id = Guid.NewGuid(),
|
OrderID = DeliverOrder.id,
|
|
});
|
}
|
DeliverOrder.items = ret;
|
return DeliverOrder;
|
}
|
/// <summary>
|
/// 已配送货物统计
|
/// </summary>
|
/// <param name=""></param>
|
/// <returns></returns>
|
private async Task<List<SendCountDto>> CountLessCount(List<CoreDeliverOrder> datain)
|
{
|
|
var OverCountlistdata = new List<CoreDeliverOrderItem>();
|
//统计已经完结的单
|
foreach (var item in datain.Where(x => x.OrderState == CoreDeliverOrderType.Completed).ToList())
|
{
|
//先统计已经完结的配送单
|
if (item.items == null || item.items.Count == 0)
|
{
|
item.items = await _CyDbClient.Queryable<CoreDeliverOrderItem>().Where(x => x.OrderID == item.id).ToListAsync();
|
}
|
OverCountlistdata.AddRange(item.items);
|
}
|
|
var overlist = OverCountlistdata.GroupBy(x => new
|
{
|
x.ZYBName,
|
x.ZYBSpecification
|
}).Select(x => new
|
{
|
name = x.Key.ZYBName,
|
Specification = x.Key.ZYBSpecification,
|
num = x.Sum(x => x.Number),
|
lessCount = x.Sum(x => x.LessNumber)
|
|
}).ToList();
|
|
//统计未完成的单
|
var ingCountlistdata = new List<CoreDeliverOrderItem>();
|
foreach (var item in datain.Where(x => x.OrderState == CoreDeliverOrderType.UnStart || x.OrderState == CoreDeliverOrderType.Start).ToList())
|
{
|
//先统计已经完结的配送单
|
if (item.items == null || item.items.Count == 0)
|
{
|
item.items = await _CyDbClient.Queryable<CoreDeliverOrderItem>().Where(x => x.OrderID == item.id).ToListAsync();
|
}
|
ingCountlistdata.AddRange(item.items);
|
}
|
|
var inglist = ingCountlistdata.GroupBy(x => new
|
{
|
x.ZYBName,
|
x.ZYBSpecification
|
}).Select(x => new
|
{
|
name = x.Key.ZYBName,
|
Specification = x.Key.ZYBSpecification,
|
num = x.Sum(x => x.Number),
|
lessCount = x.Sum(x => x.LessNumber)
|
|
}).ToList();
|
var retlist = new List<SendCountDto>();
|
var countlist = overlist;
|
//这一句是防止没有已完成订单造成的空轮询
|
if (countlist.Count == 0)
|
countlist = inglist;
|
foreach (var item in countlist)
|
{
|
retlist.Add(new SendCountDto
|
{
|
name = item.name,
|
Specification = item.Specification,
|
OverCount = overlist.Where(x => x.name == item.name && x.Specification == item.Specification).Select(x => x.num).FirstOrDefault(0),
|
IngCount = inglist.Where(x => x.name == item.name && x.Specification == item.Specification).Select(x => x.num).FirstOrDefault(0),
|
LessCount = overlist.Where(x => x.name == item.name && x.Specification == item.Specification).Select(x => x.lessCount).FirstOrDefault(0)
|
});
|
}
|
|
return retlist;
|
|
}
|
|
|
/// <summary>
|
/// 解析xml图片
|
/// </summary>
|
/// <param name="xmlstr"></param>
|
/// <returns></returns>
|
private List<InquiryWorkBookModel> ParseXml( string xmlstr)
|
{
|
// 解析 XML 字符串
|
XDocument doc = XDocument.Parse(xmlstr);
|
|
// 提取 InquiryWorkBookList 中的数据
|
var inquiryWorkBookList = doc.Descendants("InquiryWorkBookModel");
|
|
// 转换为 List<InquiryWorkBookModel>
|
List<InquiryWorkBookModel> inquiryWorkBookModels = new List<InquiryWorkBookModel>();
|
|
foreach (var item in inquiryWorkBookList)
|
{
|
var model = new InquiryWorkBookModel
|
{
|
WorkBookName = item.Element("WorkBookName")?.Value ?? "",
|
WorkBookNameTxt = item.Element("WorkBookNameTxt")?.Value ?? "",
|
WorkBookSize = item.Element("WorkBookSize")?.Value ?? "",
|
WorkBookSizeTxt = item.Element("WorkBookSizeTxt")?.Value ?? "",
|
WorkBookCount = item.Element("WorkBookCount")?.Value ?? "",
|
ysUnit = item.Element("ysUnit")?.Value ?? "",
|
ysUnitTxt = item.Element("ysUnitTxt")?.Value ?? "",
|
WorkBookPrice = item.Element("WorkBookPrice")?.Value ?? "",
|
WorkBookMoney = item.Element("WorkBookMoney")?.Value ?? "",
|
WorkBookFengMian = item.Element("WorkBookFengMian")?.Value ?? "",
|
WorkBookFengMianTxt = item.Element("WorkBookFengMianTxt")?.Value ?? "",
|
FengMianYaoqiu = item.Element("FengMianYaoqiu")?.Value ?? "",
|
FengMianYaoqiuTxt = item.Element("FengMianYaoqiuTxt")?.Value ?? "",
|
WorkBookNeiXing = item.Element("WorkBookNeiXing")?.Value ?? "",
|
WorkBookNeiXingTxt = item.Element("WorkBookNeiXingTxt")?.Value ?? "",
|
NeiXingYaoqiu = item.Element("NeiXingYaoqiu")?.Value ?? "",
|
NeiXingYaoqiuTxt = item.Element("NeiXingYaoqiuTxt")?.Value ?? "",
|
WorkBookpageNum = item.Element("WorkBookpageNum")?.Value ?? "",
|
fengmian = item.Element("fengmian")?.Value ?? "",
|
neiye = item.Element("neiye")?.Value ?? ""
|
};
|
|
inquiryWorkBookModels.Add(model);
|
}
|
return inquiryWorkBookModels;
|
}
|
|
|
|
|
|
#endregion
|
|
#region 学校管理端
|
/// <summary>
|
/// 获取新建订单学校订单列表
|
/// </summary>
|
/// <param name="Oderid"></param>
|
/// <returns></returns>
|
/// <exception cref="NotImplementedException"></exception>
|
public async Task<WebApiCallBack> CreatSchoolOfSchoolManage(CoreCmsPlanOrderInfoDto entity)
|
{
|
|
if (!await IsDeliverManage())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
|
if(entity.orderkeyid==null||entity.orderkeyid==0)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有对应订单"
|
};
|
}
|
if(string.IsNullOrEmpty(entity.shipAddress))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "学校地址必填"
|
};
|
}
|
if (string.IsNullOrEmpty(entity.shipMobile)&&(!entity.shipMobile.IsPhoneNumberValid()))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "学校联系人电话必填且必须是电话号码"
|
};
|
}
|
if (string.IsNullOrEmpty(entity.shipName))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "联系人必填"
|
};
|
}
|
if (string.IsNullOrEmpty(entity.pianqu))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "片区必填"
|
};
|
}
|
var Oder = await _CyDbClient.Queryable<EC_OrderBasic>().Where(x => x.Keyid == entity.orderkeyid&&x.OrderState>0).FirstAsync();
|
if(Oder==null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = $"订单失效或者已经完结"
|
};
|
}
|
var Oderxml= await _CyDbClient.Queryable<EC_OrderPrintParameter>().Where(x => x.OrderId == entity.orderkeyid).Select(x => x.PrintParameter).FirstAsync();
|
if(string.IsNullOrEmpty(Oderxml))
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "订单错误(0)"
|
};
|
}
|
var custinfo = await _CyDbClient.Queryable<OA_CustomerCommunications>().Where(x => x.CompanyPhone == _UserMoble).FirstAsync();
|
if(custinfo ==null)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "操作用户没有绑定省市区"
|
};
|
}
|
|
var xmlist= ParseXml(Oderxml);
|
|
if ( entity.items.Count>0)
|
{
|
var data = new CoreCmsPlanOrder
|
{
|
orderkeyid = entity.orderkeyid,
|
items = new List<CoreCmsPlanOrderItem>(),
|
createBy = _UserMoble,
|
createTime = DateTime.Now,
|
huaFeiAmount = 0,
|
DeliverState = DeliverStateType.NoDelivery,
|
keYongAmount = 0,
|
pianqu = entity.pianqu,
|
quxianId = entity.quxianId,
|
sheng = custinfo.Province,
|
quxian = custinfo.County,
|
shengId = entity.shengId,
|
shi = custinfo.City,
|
shiId = entity.shiId,
|
shipAddress = entity.shipAddress,
|
shipMobile = entity.shipMobile,
|
shipName = entity.shipName,
|
shouhuoAddress = entity.shipAddress,
|
status = 1,
|
isdelete = false,
|
userMobile = entity.shipMobile,
|
FirmId = Oder.SellerId.ToString()
|
|
|
|
|
};
|
foreach (var item in entity.items)
|
{
|
var inxml = xmlist.Where(x => x.WorkBookNameTxt == item.name && x.WorkBookSizeTxt == item.specification).FirstOrDefault();
|
decimal price = 0m;
|
decimal.TryParse(inxml.WorkBookPrice, out price);
|
|
|
data.items.Add(new CoreCmsPlanOrderItem
|
{
|
isOld=false,
|
amount = item.nums*price,
|
createBy = _UserMoble,
|
createTime=DateTime.Now,
|
fengmian=inxml.fengmian,
|
neiye=inxml.neiye,
|
price=price,
|
name=item.name,
|
specification=item.specification,
|
nums=item.nums,
|
|
|
});
|
}
|
|
data.orderAmount= data.items.Sum(x => x.amount);
|
data.oldOrderAmount = data.items.Sum(x => x.amount);
|
await _CyDbClient.InsertNav(data).Include(x => x.items).ExecuteCommandAsync();
|
|
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOAjisuanjine, entity.orderkeyid?.ToString());
|
return new WebApiCallBack
|
{
|
status = true,
|
data = true,
|
};
|
|
}
|
else
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有作业本详情表"
|
};
|
}
|
|
|
}
|
|
public async Task<WebApiCallBack> GetCreatSchoolOfSchoolManage()
|
{
|
|
if (!await IsSchoolManger())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
if(_SchoolManagerKeyId==null)
|
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
|
var listmager = await _CyDbClient.Queryable<CoreCmsPlanOrder>().
|
LeftJoin<EC_OrderBasic>((p, or) => p.orderkeyid == or.Keyid)
|
.LeftJoin<OA_CustomerCommunications>((p, or, cus) => or.BuyerId == cus.Keyid)
|
.Where((p, or, cus) => cus.Keyid == _SchoolManagerKeyId)
|
.Select((p, or, cus) => p, true).ToListAsync();
|
if(listmager == null||listmager.Count==0)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "未找拥有订单"
|
};
|
}
|
var ListZoneKeyID = listmager.GroupBy(x => x.orderkeyid).Select(x => new
|
{
|
keyid = x.Key.Value,
|
count = x.Count(),
|
}).ToList();
|
|
if(ListZoneKeyID.Count==0)
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "未找拥有订单"
|
};
|
}
|
//订单详情列表
|
var ZoneOderList = await _CyDbClient.Queryable<EC_OrderBasic>().In(ListZoneKeyID.Select(y=>y.keyid).ToList()).Select(x => new zongoderinfo
|
{
|
Keyid = x.Keyid,
|
DocumentName= x.DocumentName,
|
WorkBooksxmlstr= SqlFunc.Subqueryable<EC_OrderPrintParameter>().Where(pa=>pa.OrderId==x.Keyid).Select(pa=>pa.PrintParameter)
|
|
}).Mapper(x=>
|
{
|
x.WorkBooks= ParseXml(x.WorkBooksxmlstr);
|
x.WorkBooksxmlstr = null;
|
}).ToListAsync();
|
|
|
|
return new WebApiCallBack
|
{
|
status = true,
|
data = ZoneOderList,
|
|
};
|
|
|
|
|
}
|
|
public async Task<WebApiCallBack> DelSchoolOfSchoolManage(FMIntId entity)
|
{
|
|
if (!await IsSchoolManger())
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "你没有权限操作"
|
};
|
if(entity.id==0)
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "id无效"
|
};
|
|
var data= await _CyDbClient.Queryable<CoreCmsPlanOrder, EC_OrderBasic>((core, order) => new JoinQueryInfos(
|
JoinType.Left, core.orderkeyid == order.Keyid
|
)
|
|
|
).Where((core, order) => order.BuyerId == _SchoolManagerKeyId&&core.id==entity.id).Select((core, order)=>core).FirstAsync();
|
if(data!=null)
|
{
|
data.isdelete = true;
|
data.upDataBy = _UserMoble;
|
data.upDataTime = data.upDataTime;
|
await _CyDbClient.Updateable(data).ExecuteCommandAsync();
|
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.CyDeliverOAjisuanjine, data.orderkeyid?.ToString());
|
return new WebApiCallBack
|
{
|
status = true,
|
data =true
|
};
|
|
}
|
else
|
{
|
return new WebApiCallBack
|
{
|
status = false,
|
msg = "没有权限删除该订单"
|
};
|
}
|
|
|
}
|
#endregion
|
}
|
class SendCountDto
|
{
|
/// <summary>
|
/// 名称
|
/// </summary>
|
public string name { get; set; }
|
/// <summary>
|
/// 开本
|
/// </summary>
|
public string Specification { get; set; }
|
/// <summary>
|
/// 已完成配送
|
/// </summary>
|
public int OverCount { get; set; }
|
/// <summary>
|
/// 已设置或者未完成
|
/// </summary>
|
public int IngCount { get; set; }
|
/// <summary>
|
/// 节约数量
|
/// </summary>
|
public int LessCount { get; set; }
|
}
|
|
/// <summary>
|
/// 订单参数列表
|
/// </summary>
|
public class zongoderinfo
|
{
|
public int Keyid { get; set; }
|
public string DocumentName { get; set; }
|
public List<InquiryWorkBookModel> WorkBooks { get; set; }
|
public string WorkBooksxmlstr { get; set; }
|
|
}
|
|
public class InquiryWorkBookModel
|
{
|
public string WorkBookName { get; set; }
|
public string WorkBookNameTxt { get; set; }
|
public string WorkBookSize { get; set; }
|
public string WorkBookSizeTxt { get; set; }
|
public string WorkBookCount { get; set; }
|
public string ysUnit { get; set; }
|
public string ysUnitTxt { get; set; }
|
public string WorkBookPrice { get; set; }
|
public string WorkBookMoney { get; set; }
|
public string WorkBookFengMian { get; set; }
|
public string WorkBookFengMianTxt { get; set; }
|
public string FengMianYaoqiu { get; set; }
|
public string FengMianYaoqiuTxt { get; set; }
|
public string WorkBookNeiXing { get; set; }
|
public string WorkBookNeiXingTxt { get; set; }
|
public string NeiXingYaoqiu { get; set; }
|
public string NeiXingYaoqiuTxt { get; set; }
|
public string WorkBookpageNum { get; set; }
|
public string fengmian { get; set; }
|
public string neiye { get; set; }
|
}
|
|
}
|