From 17308f6494c81fb5a5ee035724a414ec7da11936 Mon Sep 17 00:00:00 2001 From: username@email.com <yzy2002yzy@163.com> Date: 星期四, 22 八月 2024 08:38:45 +0800 Subject: [PATCH] Merge branch 'master' of http://47.108.235.38:8080/r/cylsg --- cylsg/cylsg.Application/Orders/OrderCompanyAppService.cs | 530 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 530 insertions(+), 0 deletions(-) diff --git a/cylsg/cylsg.Application/Orders/OrderCompanyAppService.cs b/cylsg/cylsg.Application/Orders/OrderCompanyAppService.cs new file mode 100644 index 0000000..c0e305c --- /dev/null +++ b/cylsg/cylsg.Application/Orders/OrderCompanyAppService.cs @@ -0,0 +1,530 @@ +锘縰sing cylsg.Application.Orders.Dtos; +using cylsg.Application.Users.Dtos; +using cylsg.Core; +using cylsg.Model.OrderModel; +using cylsg.Model.UserModel; +using Furion.LinqBuilder; +using MapsterMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; + +namespace cylsg.Application.Orders +{ + /// <summary> + /// 璁㈠崟鍏徃鎺ュ彛 + /// </summary> + public class OrderCompanyAppService : IDynamicApiController + { + private readonly ISystemService _systemService; + private ISqlSugarClient _sqlSugarClient; + private IMapper _mapper; + public OrderCompanyAppService(ISystemService systemService, ISqlSugarClient sqlSugarClient, IMapper mapper) + { + _systemService = systemService; + _sqlSugarClient = sqlSugarClient; + _mapper = mapper; + } + + + /// <summary> + /// 鏌ヨ鍏徃宸茬粡鍙戝竷鐨勬嫑宸ヨ鍗� + /// </summary> + /// <param name="page"></param> + /// <returns></returns> + [Authorize] + [HttpPost] + public async Task<PageResult<OrderDto>> PostMyListPage(OrderPageSearch page) + { + var UserID = App.User?.FindFirstValue("UserID"); + int userid = 0; + if (!string.IsNullOrEmpty(UserID)) + { + userid = int.Parse(UserID); + } + + PageResult<OrderDto> result = new PageResult<OrderDto>(); + var orderRepository = new BaseRepository<Order>(); + Expression<Func<Order, bool>> expression = t => true; + + expression = expression.And(t => t.IsDeleted == false && t.IsEn == true + && t.OrderUserId == userid); + + if (!string.IsNullOrEmpty(page.OrderName)) + { + expression = expression.And(t => t.OrderName.Contains(page.OrderName)); + } + if (page.WordStartTime.HasValue) + { + expression = expression.And(t => t.WordStartTime >= page.WordStartTime); + } + if (page.WordEndTime.HasValue) + { + expression = expression.And(t => t.WordStartTime <= page.WordEndTime); + } + + RefAsync<int> total = 0; + + + var orderBiddingRepository = new BaseRepository<OrderBidding>(); + + var data = await orderRepository.Context.Queryable<Order>() + .Where(expression) + .OrderByDescending(c => c.WordStartTime) + .ToPageListAsync(page.PageIndex, page.PageSize, total); + var datadto = _mapper.Map<List<OrderDto>>(data); + + if (datadto != null && datadto.Count > 0) + { + foreach (var orderDto in datadto) + { + switch (orderDto.OrderStatus) + { + case (int)OrderStatuses.fabu: orderDto.OrderStatusName = "鍙戝竷"; break; + case (int)OrderStatuses.zhaogongwanbi: orderDto.OrderStatusName = "鎷涘伐瀹屾瘯"; break; + case (int)OrderStatuses.jiesuanwanbi: orderDto.OrderStatusName = "缁撶畻瀹屾瘯"; break; + default: break; + } + + var orderBiddings = await orderBiddingRepository.CountAsync(x => x.OrderId == orderDto.Id && x.IsSelected == true && x.IsEn == true && x.IsDeleted == false); + orderDto.WorderCounted = orderBiddings; + + } + + } + result.Items = datadto; + result.PageIndex = page.PageIndex; + result.PageSize = page.PageSize; + result.TotalCount = total; + + return result; + } + + + /// <summary> + /// 淇濆瓨鎷涘伐淇℃伅锛堟柊澧�/淇敼锛� + /// </summary> + /// <returns></returns> + [Authorize] + [HttpPost] + public async Task<bool> saveOrder(OrderDto orderDto) + { + + var UserID = App.User?.FindFirstValue("UserID"); + int userid = 0; + string ITCode = App.User?.FindFirstValue("ITCode"); + if (!string.IsNullOrEmpty(UserID)) + { + userid = int.Parse(UserID); + } + var userCompanyRes = new BaseRepository<UserCompany>(); + var userCompany = await userCompanyRes.GetFirstAsync(p => p.UserId == userid && p.IsEn == true && p.IsDeleted == false); + if (userCompany == null || string.IsNullOrEmpty(userCompany.BusinessLicense)) + { + throw Oops.Oh("璇峰厛瀹屾垚鍏徃璁よ瘉鎵嶈兘鍙戝竷鎷涘伐锛�"); + } + + var orderRes = new BaseRepository<Order>(); + bool res; + if (orderDto.Id > 0) + { + var order = await orderRes.GetByIdAsync(orderDto.Id); + if (order.OrderStatus > 0) + { + throw Oops.Oh("鎷涘伐宸茬粡缁撴潫涓嶈兘淇敼锛�"); + } + order.OrderName = orderDto.OrderName; + order.WordStartTime = orderDto.WordStartTime; + order.WordEndTime = orderDto.WordEndTime; + order.Demand = orderDto.Demand; + order.WorderCount = orderDto.WorderCount; + order.WorderAddress = orderDto.WorderAddress; + order.ContactPhone = orderDto.ContactPhone; + order.WorkerType = orderDto.WorkerType; + order.WorkPrice = orderDto.WorkPrice; + + + order.UpDataBy = ITCode; + order.UpDataTime = DateTime.Now; + res = await orderRes.UpdateAsync(order); + + + } + else + { + var order = _mapper.Map<Order>(orderDto); + order.UpDataBy = ITCode; + order.UpDataTime = DateTime.Now; + order.CreateBy = ITCode; + order.CreateTime = DateTime.Now; + order.OrderStatus = 0; + order.OrderUserId = userid; + res = await orderRes.InsertAsync(order); + } + + + + + + + + return res; + } + + + + /// <summary> + /// 鍏徃閫夋嫨宸ヤ汉 + /// </summary> + /// <returns></returns> + [Authorize] + [HttpPost] + public async Task<bool> saveQueRen(QueRenDto queRenDto) + { + + var UserID = App.User?.FindFirstValue("UserID"); + int userid = 0; + string ITCode = App.User?.FindFirstValue("ITCode"); + if (!string.IsNullOrEmpty(UserID)) + { + userid = int.Parse(UserID); + } + + var orderBiddingRes = new BaseRepository<OrderBidding>(); + var orderRes = new BaseRepository<Order>(); + + var orderBidding = await orderBiddingRes.GetByIdAsync(queRenDto.OrderBiddingId); + if (orderBidding == null || orderBidding.IsEn != true || orderBidding.IsDeleted == true ) + { + throw Oops.Oh("璇ユ姇閫掑凡缁忔棤鏁堬紒"); + } + if(orderBidding.IsSelected == true) + { + throw Oops.Oh("璇ユ姇閫掑凡缁忕‘璁わ紝涓嶈兘閲嶅纭锛�"); + } + + var order = await orderRes.GetByIdAsync(orderBidding.OrderId); + if (order == null || order.OrderStatus > 0) + { + throw Oops.Oh("璇ユ嫑宸ョ姸鎬佸凡缁忔棤娉曟姇閫掞紒"); + } + + var orderBiddings = await orderBiddingRes.CountAsync(x => x.OrderId == orderBidding.OrderId && x.IsSelected == true && x.IsDeleted == false && x.IsEn == true); + if (orderBiddings >= order.WorderCount) + { + throw Oops.Oh("鎷涘伐浜烘暟宸茬粡婊′簡锛屼笉鑳芥姤鍚嶏紒"); + } + + + + bool res; + + orderBidding.IsSelected = true; + orderBidding.Selectedtime = DateTime.Now; + orderBidding.UpDataBy = ITCode; + orderBidding.UpDataTime = DateTime.Now; + + + res = await orderBiddingRes.UpdateAsync(orderBidding); + + if(order.WorderCount == (orderBiddings + 1)) + { + order.OrderStatus = 1; + res = await orderRes.UpdateAsync(order); + } + + return res; + } + + + + + /// <summary> + /// 鏌ヨ鍏徃涓嬪伐浜虹殑鎵撳崱璁板綍 + /// </summary> + /// <param name="page"></param> + /// <returns></returns> + [Authorize] + [HttpPost] + public async Task<PageResult<OrderDakaDto>> PostMyComDakaListPage(OrderDakaPageSearch page) + { + var UserID = App.User?.FindFirstValue("UserID"); + int userid = 0; + if (!string.IsNullOrEmpty(UserID)) + { + userid = int.Parse(UserID); + } + + PageResult<OrderDakaDto> result = new PageResult<OrderDakaDto>(); + var orderRepository = new BaseRepository<Order>(); + + RefAsync<int> total = 0; + + + var orderBiddingDetailCheckRepository = new BaseRepository<OrderBiddingDetailCheck>(); + + var data = await orderRepository.Context.Queryable<Order, OrderBidding, OrderBiddingDetail>((a, b, c) => + new JoinQueryInfos(JoinType.Inner, a.Id == b.OrderId, + JoinType.Inner, b.Id == c.OrderBiddingId + )) + .Where((a, b, c) => a.IsEn == true && a.IsDeleted == false && b.IsEn == true && b.IsDeleted == false && c.IsEn == true && c.IsDeleted == false + && b.IsSelected == true && a.OrderUserId == userid) + .WhereIF(page.WordDate.HasValue, (a, b, c) => (c.WorkDate == page.WordDate)) + .WhereIF(page.IsJieSuan.HasValue && page.IsJieSuan == true, (a, b, c) => (c.IsShenPi == 2)) + .WhereIF(page.IsJieSuan.HasValue && page.IsJieSuan == false, (a, b, c) => (c.IsShenPi < 2)) + .OrderByDescending((a,b,c) => c.WorkDate) + .Select((a, b, c) => new OrderDakaDto + { + OrderBiddingDetailId = c.Id, + OrderName = a.OrderName, + WorkDate = c.WorkDate, + WorkTime = c.WorkTime, + WorkerType = a.WorkerType, + WorkPrice = a.WorkPrice, + TodaySalary = c.TodaySalary, + IsShenPi = c.IsShenPi, + WorkCount = c.WorkCount, + }) + + .ToPageListAsync(page.PageIndex, page.PageSize, total); + + if (data != null && data.Count > 0) + { + foreach (var dakaDto in data) + { + int hours = 0; + int minutes = 0; + var orderBiddingDetailChecks = await orderBiddingDetailCheckRepository.GetListAsync(x => x.OrderBiddingDetailId == dakaDto.OrderBiddingDetailId && x.IsEn == true && x.IsDeleted == false); + string DakaMingxi = ""; + for (int i = 0; i < orderBiddingDetailChecks.Count; i++) + { + if (i != orderBiddingDetailChecks.Count - 1) + { + DakaMingxi += orderBiddingDetailChecks[i].Checktime.Value.ToString("HH:mm") + "-"; + } + else + { + DakaMingxi += orderBiddingDetailChecks[i].Checktime.Value.ToString("HH:mm"); + } + + if (i == 1 || i == 3 || i == 5 || i == 7 || i == 9 || i == 11 || i == 13 || i == 15 || i == 17 || i == 19) + { + var timeDifference = orderBiddingDetailChecks[i].Checktime.Value - orderBiddingDetailChecks[i - 1].Checktime.Value; + hours += timeDifference.Hours; + minutes += timeDifference.Minutes; + + } + } + + //濡傛灉褰撳ぉ杩樻病鏈夊~鍐欑敵璇凤紝鍒欒绠楀伐浣滄椂闂村拰宸ヨ祫 + if (dakaDto.IsShenPi == 0) + { + dakaDto.WorkTime = hours + (minutes / 60); + if (dakaDto.WorkerType == 0) + { + dakaDto.TodaySalary = dakaDto.WorkTime * dakaDto.WorkPrice; + } + else + { + var WorkCount = dakaDto.WorkCount ?? 0; + dakaDto.TodaySalary = WorkCount * dakaDto.WorkPrice; + } + + } + + switch (dakaDto.IsShenPi) + { + case (int)IsShenPis.baocun: dakaDto.IsShenPiName = "鏈粨绠�"; break; + case (int)IsShenPis.tijiao: dakaDto.IsShenPiName = "鏈粨绠�"; break; + case (int)IsShenPis.yishenpi: dakaDto.IsShenPiName = "宸茬粨绠�"; break; + default: break; + } + + switch (dakaDto.WorkerType) + { + case (int)WorkerTypes.time: dakaDto.WorkerTypeName = "璁℃椂"; break; + case (int)WorkerTypes.count: dakaDto.WorkerTypeName = "璁′环"; break; + default: break; + } + + + + + + dakaDto.DakaMingxi = DakaMingxi; + + } + + } + result.Items = data; + result.PageIndex = page.PageIndex; + result.PageSize = page.PageSize; + result.TotalCount = total; + + return result; + } + + + + + + /// <summary> + /// 鍏徃纭宸ヤ汉褰撳ぉ鎵撳崱璇︽儏 + /// </summary> + /// <returns></returns> + [Authorize] + [HttpPost] + public async Task<bool> saveDakaDetail(DakaQuerenDetailDto dakaDto) + { + + var UserID = App.User?.FindFirstValue("UserID"); + int userid = 0; + string ITCode = App.User?.FindFirstValue("ITCode"); + if (!string.IsNullOrEmpty(UserID)) + { + userid = int.Parse(UserID); + } + + var orderBiddingRes = new BaseRepository<OrderBidding>(); + var orderRes = new BaseRepository<Order>(); + var orderBiddingDetailRes = new BaseRepository<OrderBiddingDetail>(); + var userTiXianDetailRes = new BaseRepository<UserTiXianDetail>(); + //var OrderBiddingDetailCheckRes = new BaseRepository<OrderBiddingDetailCheck>(); + var userWorkerRes = new BaseRepository<UserWorker>(); + var userCompanyRes = new BaseRepository<UserCompany>(); + + var orderBiddingDetail = await orderBiddingDetailRes.GetByIdAsync(dakaDto.OrderBiddingDetailId); + var orderBidding = await orderBiddingRes.GetByIdAsync(orderBiddingDetail.OrderBiddingId); + var order = await orderRes.GetByIdAsync(orderBidding.OrderId); + + if (orderBidding == null || orderBidding.IsDeleted == true || orderBidding.IsEn == false || orderBidding.IsSelected != true) + { + throw Oops.Oh("璇ユ姇閫掔姸鎬佹棤娉曟墦鍗$‘璁わ紒"); + } + //if (order == null || order.OrderStatus > 1) + //{ + // throw Oops.Oh("璇ユ嫑宸ョ姸鎬佸凡鏃犳硶鎵撳崱纭锛�"); + //} + var res = false; + try + { + var TodaySalary = orderBiddingDetail.TodaySalary.HasValue? orderBiddingDetail.TodaySalary.Value:0; + if(orderBiddingDetail.IsShenPi == (int)IsShenPis.yishenpi) + { + TodaySalary = dakaDto.TodaySalary.Value - TodaySalary; + } + else + { + TodaySalary = dakaDto.TodaySalary.Value; + } + orderRes.Context.Ado.BeginTran(); + + orderBiddingDetail.WorkTime = dakaDto.WorkTime; + orderBiddingDetail.WorkCount = dakaDto.WorkCount; + orderBiddingDetail.TodaySalary = dakaDto.TodaySalary; + orderBiddingDetail.IsShenPi = (int)IsShenPis.yishenpi; + orderBiddingDetail.ShenPitime = DateTime.Now; + orderBiddingDetail.UpDataBy = ITCode; + orderBiddingDetail.UpDataTime = DateTime.Now; + orderBiddingDetail.IsTiXian = true; + orderBiddingDetail.TiXiantime = DateTime.Now; + //orderBiddingDetail.CreateBy = ITCode; + //orderBiddingDetail.CreateTime = DateTime.Now; + res = await orderBiddingDetailRes.UpdateAsync(orderBiddingDetail); + if (!res) + { + orderRes.Context.Ado.RollbackTran(); + throw Oops.Oh("缁撶畻澶辫触锛�"); + } + + var userCompany = await userCompanyRes.GetFirstAsync(x => x.UserId == order.OrderUserId); + if(userCompany!=null && userCompany.IsTiXian == true) + { + //鎻掑叆鐢ㄦ埛鐨勭粨绠楅噾棰� + UserTiXianDetail userTiXianDetail = new UserTiXianDetail(); + userTiXianDetail.UserId = orderBidding.WorkerUserId; + userTiXianDetail.YiTiXianJine = TodaySalary; + userTiXianDetail.ZhiChuShouRu = (int)ZhiChuShouRus.shouru; + userTiXianDetail.Remark = "鎷涘伐璁㈠崟" + order.OrderName + orderBiddingDetail.WorkDate.Value.ToString("yyyy-MM-dd") + "宸ヨ祫缁撶畻"; + userTiXianDetail.UpDataBy = ITCode; + userTiXianDetail.UpDataTime = DateTime.Now; + userTiXianDetail.CreateBy = ITCode; + userTiXianDetail.CreateTime = DateTime.Now; + + res = await userTiXianDetailRes.InsertAsync(userTiXianDetail); + if (!res) + { + orderRes.Context.Ado.RollbackTran(); + throw Oops.Oh("缁撶畻澶辫触锛�"); + } + var userWorker = await userWorkerRes.GetFirstAsync(x => x.UserId == orderBidding.WorkerUserId); + if (userWorker != null) + { + var TiXianZonge = userWorker.TiXianZonge ?? 0; + + userWorker.TiXianZonge = TiXianZonge + TodaySalary; + res = await userWorkerRes.UpdateAsync(userWorker); + if (!res) + { + orderRes.Context.Ado.RollbackTran(); + throw Oops.Oh("缁撶畻澶辫触锛�"); + } + } + } + + + + + + //鍒ゆ柇璁㈠崟鏄惁鍙互淇敼涓虹粨绠楃姸鎬� + + if (order.WordEndTime <= DateTime.Now) + { + var sss = await orderBiddingRes.GetListAsync(x => x.OrderId == order.Id && x.IsEn == true && x.IsDeleted == false && x.IsSelected == true); + var bbb =sss.Select(x => x.Id).ToList(); + var oCount = await orderBiddingDetailRes.CountAsync(x => bbb.Contains(x.OrderBiddingId) && x.IsEn == true && x.IsDeleted == false && x.IsShenPi != (int)IsShenPis.yishenpi); + if (oCount == 0) + { + order.OrderStatus = (int)OrderStatuses.jiesuanwanbi; + res = await orderRes.UpdateAsync(order); + if (!res) + { + orderRes.Context.Ado.RollbackTran(); + throw Oops.Oh("缁撶畻澶辫触锛�"); + } + } + + + } + + + + + + orderRes.Context.Ado.CommitTran(); + } + catch (Exception ex ) + { + orderRes.Context.Ado.RollbackTran(); + throw Oops.Oh(ex.Message); + } + + + + + + + + + + + + + return res; + } + } +} -- Gitblit v1.9.1