using cylsg.Application.Orders.Dtos; using cylsg.Application.Users.Dtos; using cylsg.Core; using cylsg.Model.OrderModel; using cylsg.Model.UserModel; using EzTencentCloud; using Furion.LinqBuilder; using MapsterMapper; using Microsoft.IdentityModel.Tokens; using Org.BouncyCastle.Asn1.X509; using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Security.Claims; using System.Text; using System.Threading.Tasks; using static SKIT.FlurlHttpClient.Wechat.Api.Models.ChannelsECOrderDeliverySendRequest.Types.Delivery.Types; using static SKIT.FlurlHttpClient.Wechat.Api.Models.SemanticSemproxySearchResponse.Types; namespace cylsg.Application.Orders { /// /// 订单工人接口 /// public class OrderWorkerAppService : IDynamicApiController { private readonly ISystemService _systemService; private ISqlSugarClient _sqlSugarClient; private IMapper _mapper; private readonly ITencentCloudService _tencentCloudService; public OrderWorkerAppService(ISystemService systemService, ISqlSugarClient sqlSugarClient, IMapper mapper,ITencentCloudService tencentCloudService) { _systemService = systemService; _sqlSugarClient = sqlSugarClient; _mapper = mapper; _tencentCloudService = tencentCloudService; } /// /// 查询工人可以投递的招工订单 /// /// /// [HttpPost] public async Task> PostListPage(OrderPageSearch page) { PageResult result = new PageResult(); Expression> expression = t => true; expression = expression.And(t => t.IsDeleted == false && t.IsEn == true && t.OrderStatus == 0); expression = expression.And(t => t.WordStartTime >= DateTime.Now.Date.AddDays(-30)); 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 total = 0; var orderRepository = new BaseRepository(); var orderBiddingRepository = new BaseRepository(); var userCompanyRepository = new BaseRepository(); var data = await orderRepository.Context.Queryable() .Where(expression) .OrderByDescending(c => c.WordStartTime) .ToPageListAsync(page.PageIndex, page.PageSize, total); var datadto = _mapper.Map>(data); if (datadto != null && datadto.Count > 0) { foreach (var orderDto in datadto) { var orderBiddings = await orderBiddingRepository.CountAsync(x => x.OrderId == orderDto.Id && x.IsSelected == true && x.IsEn == true && x.IsDeleted == false); orderDto.WorderCounted = orderBiddings; var userCompany = await userCompanyRepository.GetFirstAsync(x => x.UserId == orderDto.OrderUserId && x.IsDeleted == false && x.IsEn == true); if (userCompany != null) { orderDto.OrderComName = userCompany.Suppliername; } } } result.Items = datadto; result.PageIndex = page.PageIndex; result.PageSize = page.PageSize; result.TotalCount = total; return result; } /// /// 查询工人已经投递的招工订单 /// /// /// [Authorize] [HttpPost] public async Task> PostMyListPage(OrderPageSearch page) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } PageResult result = new PageResult(); var orderRepository = new BaseRepository(); Expression> expression = t => true; expression = expression.And(t => t.IsDeleted == false && t.IsEn == true && SqlFunc.Subqueryable().Where(oi => oi.OrderId == t.Id && oi.IsDeleted == false && oi.IsEn == true && oi.WorkerUserId == userid).Any()); 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 total = 0; var orderBiddingRepository = new BaseRepository(); var userCompanyRepository = new BaseRepository(); var data = await orderRepository.Context.Queryable() .Where(expression) .OrderByDescending(c => c.WordStartTime) .ToPageListAsync(page.PageIndex, page.PageSize, total); var datadto = _mapper.Map>(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; var orderBidding = await orderBiddingRepository.GetFirstAsync(x => x.OrderId == orderDto.Id && x.WorkerUserId == userid && x.IsEn == true && x.IsDeleted == false); if (orderBidding != null) { orderDto.IsSelected = orderBidding.IsSelected; if (!orderDto.IsSelected.HasValue ) { orderDto.IsSelectedName = "审核中"; } else if(orderDto.IsSelected.Value) { orderDto.IsSelectedName = "已确认"; } else { orderDto.IsSelectedName = "不录用"; } } var userCompany = await userCompanyRepository.GetFirstAsync(x => x.UserId == orderDto.OrderUserId && x.IsDeleted == false && x.IsEn == true); if (userCompany != null) { orderDto.OrderComName = userCompany.Suppliername; } } } result.Items = datadto; result.PageIndex = page.PageIndex; result.PageSize = page.PageSize; result.TotalCount = total; return result; } /// /// 根据Id查询招工明细 /// /// [Authorize] public async Task getOrder(int orderid) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } OrderDto orderDto = new OrderDto(); var orderRes = new BaseRepository(); var orderBiddingRes = new BaseRepository(); var userWorkerRes = new BaseRepository(); var userRes = new BaseRepository(); var order = await orderRes.GetByIdAsync(orderid); orderDto = _mapper.Map(order); 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 orderBiddingRes.GetListAsync(x => x.OrderId == orderDto.Id && x.IsEn == true && x.IsDeleted == false && (x.IsSelected ==null || x.IsSelected !=false) ); var IsSelected = orderBiddings.Count(x => x.IsSelected == true); orderDto.WorderCounted = IsSelected; var orderBidding = orderBiddings.Where(x => x.WorkerUserId == userid).FirstOrDefault(); if (orderBidding != null) { orderDto.IsSelected = orderBidding.IsSelected; if (!orderDto.IsSelected.HasValue) { orderDto.IsSelectedName = "审核中"; } else if (orderDto.IsSelected.Value) { orderDto.IsSelectedName = "已确认"; } else { orderDto.IsSelectedName = "不录用"; } } var orderBiddingDtos = _mapper.Map>(orderBiddings); if(orderBiddingDtos != null&& orderBiddingDtos.Count > 0) { foreach (var orderBiddingDto in orderBiddingDtos) { if (!orderBiddingDto.IsSelected.HasValue) { orderBiddingDto.IsSelectedName = "审核中"; } else if (orderBiddingDto.IsSelected.Value) { orderBiddingDto.IsSelectedName = "已确认"; } else { orderBiddingDto.IsSelectedName = "不录用"; } var user = await userRes.GetByIdAsync(orderBiddingDto.WorkerUserId); if (user != null) { orderBiddingDto.WorkerAvatar = user.Avatar; } var userWorker = await userWorkerRes.GetFirstAsync(x => x.UserId == orderBiddingDto.WorkerUserId && x.IsEn == true && x.IsDeleted == false); if (userWorker != null) { orderBiddingDto.WorkerName = userWorker.name; } } } orderDto.orderBidding = orderBiddingDtos; return orderDto; } /// /// 工人投递 /// /// [Authorize] [HttpPost] public async Task saveBaoMing(BaoMingDto baoMingDto) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; string NickName = App.User?.FindFirstValue("NickName"); if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } var orderBiddingRes = new BaseRepository(); var orderRes = new BaseRepository(); var userWorkerRes = new BaseRepository(); var userWorker = await userWorkerRes.GetFirstAsync(p=>p.UserId == userid && p.IsEn == true && p.IsDeleted == false); if (userWorker == null || string.IsNullOrEmpty(userWorker.IdCode)) { throw Oops.Oh("请先完成工人实名认证才能投递!"); } var order = await orderRes.GetByIdAsync(baoMingDto.OrderId); if (order == null || order.OrderStatus>0 || order.IsEn !=true ) { throw Oops.Oh("该招工状态已经无法投递!"); } if (order.OrderUserId == userid) { throw Oops.Oh("自己无法投递自己发布的招工!"); } bool res; var orderBidding = await orderBiddingRes.GetFirstAsync(x => x.OrderId == baoMingDto.OrderId && x.WorkerUserId == userid && x.IsDeleted == false && x.IsEn == true); if (orderBidding != null) { throw Oops.Oh("已经投递过了!"); } else { var orderBiddings = await orderBiddingRes.CountAsync(x => x.OrderId == baoMingDto.OrderId && x.IsSelected == true && x.IsDeleted == false && x.IsEn == true); if(orderBiddings>= order.WorderCount) { throw Oops.Oh("招工人数已经满了,不能报名!"); } OrderBidding orderBidding1 = new OrderBidding(); orderBidding1.WorkerUserId = userid; orderBidding1.OrderId = baoMingDto.OrderId; orderBidding1.IsSelected = null; orderBidding1.UpDataBy = NickName; orderBidding1.UpDataTime = DateTime.Now; orderBidding1.CreateBy = NickName; orderBidding1.CreateTime = DateTime.Now; res = await orderBiddingRes.InsertAsync(orderBidding1); } return res; } /// /// 进入打卡页面 /// /// [Authorize] [HttpPost] public async Task getDaka(BaoMingDto baoMingDto) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; string NickName = App.User?.FindFirstValue("NickName"); if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } OrderBiddingDetailDto orderBiddingDetailDto = null; var orderBiddingRes = new BaseRepository(); var orderRes = new BaseRepository(); var orderBiddingDetailRes = new BaseRepository(); var OrderBiddingDetailCheckRes = new BaseRepository(); var userWorkerRes = new BaseRepository(); var order = await orderRes.GetByIdAsync(baoMingDto.OrderId); if (order == null || order.OrderStatus > 1) { throw Oops.Oh("该招工状态已经无法打卡!"); } var orderBidding = await orderBiddingRes.GetFirstAsync(x => x.OrderId == baoMingDto.OrderId && x.WorkerUserId == userid && x.IsDeleted == false && x.IsEn == true); if (orderBidding == null || orderBidding.IsSelected != true) { throw Oops.Oh("没有确认的投递!"); } var dateTime = DateTime.Now.Date; var orderBiddingDetail = await orderBiddingDetailRes.GetFirstAsync(x => x.OrderBiddingId == orderBidding.Id && x.WorkDate == dateTime && x.IsDeleted == false && x.IsEn == true); if (orderBiddingDetail != null ) { if(orderBiddingDetail.IsShenPi>0) { throw Oops.Oh("当天的打卡已经提交,不能打卡!"); } orderBiddingDetailDto = _mapper.Map(orderBiddingDetail); orderBiddingDetailDto.WorkerUserId = orderBidding.WorkerUserId; var worker = await userWorkerRes.GetFirstAsync(x => x.UserId == orderBidding.WorkerUserId); if(worker != null) orderBiddingDetailDto.WorkerName = worker.name; var orderBiddingDetailChecks = await OrderBiddingDetailCheckRes.GetListAsync(x => x.OrderBiddingDetailId == orderBiddingDetail.Id && x.IsDeleted == false && x.IsEn == true); orderBiddingDetailDto.orderBiddingDetailCheck = _mapper.Map>(orderBiddingDetailChecks); } return orderBiddingDetailDto; } /// /// 工人打卡 /// /// [Authorize] [HttpPost] public async Task saveDaka(DakaDto dakaDto) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; string NickName = App.User?.FindFirstValue("NickName"); if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } var orderBiddingRes = new BaseRepository(); var orderRes = new BaseRepository(); var orderBiddingDetailRes = new BaseRepository(); var OrderBiddingDetailCheckRes = new BaseRepository(); var order = await orderRes.GetByIdAsync(dakaDto.OrderId); if (order == null || order.OrderStatus > 1) { throw Oops.Oh("该招工状态已无法打卡!"); } var orderBidding = await orderBiddingRes.GetFirstAsync(x => x.OrderId == dakaDto.OrderId && x.WorkerUserId == userid && x.IsSelected == true && x.IsEn == true && x.IsDeleted == false );//GetByIdAsync(dakaDto.OrderBiddingId); if (orderBidding == null || orderBidding.IsDeleted ==true || orderBidding.IsEn == false || orderBidding.IsSelected !=true ) { throw Oops.Oh("该投递状态无法打卡!"); } bool res; var dateTime = DateTime.Now.Date; if ( dateTime < order.WordStartTime.Value && dateTime > order.WordEndTime.Value ) { throw Oops.Oh("不在允许打卡的时间范围!"); } var orderBiddingDetail = await orderBiddingDetailRes.GetFirstAsync(x => x.OrderBiddingId == orderBidding.Id && x.WorkDate == dateTime && x.IsDeleted == false && x.IsEn == true); if (orderBiddingDetail!=null && orderBiddingDetail.IsShenPi>0) { throw Oops.Oh("该打卡记录已经审批,不能打卡!"); } //人脸识别 if (App.Configuration["VerifyFace:Enable"].ObjToBool()) { if (string.IsNullOrWhiteSpace(dakaDto.FaceImg)) { throw Oops.Oh("未识别人脸"); } var UserWorkRes = await new BaseRepository().GetFirstAsync(x => x.UserId == userid); if (UserWorkRes == null) { throw Oops.Oh("员工未注册成工人"); } var faseres = _tencentCloudService.VerifyFace(dakaDto.FaceImg, UserWorkRes.IdCode); if (faseres.IsMatch != true) { throw Oops.Oh("不是本人"); } } if(orderBiddingDetail == null) { orderBiddingDetail = new OrderBiddingDetail(); orderBiddingDetail.OrderBiddingId = orderBidding.Id; orderBiddingDetail.WorkDate = dateTime; orderBiddingDetail.IsShenPi = 0; orderBiddingDetail.IsTiXian = false; orderBiddingDetail.UpDataBy = NickName; orderBiddingDetail.UpDataTime = DateTime.Now; orderBiddingDetail.CreateBy = NickName; orderBiddingDetail.CreateTime = DateTime.Now; orderBiddingDetail.Id = await orderBiddingDetailRes.InsertReturnIdentityAsync(orderBiddingDetail); } //插入打卡记录 var orderBiddingDetailCheck = new OrderBiddingDetailCheck(); orderBiddingDetailCheck.OrderBiddingDetailId = orderBiddingDetail.Id; orderBiddingDetailCheck.CheckPhoto = dakaDto.CheckPhoto; orderBiddingDetailCheck.Checktime = DateTime.Now; orderBiddingDetailCheck.UpDataBy = NickName; orderBiddingDetailCheck.UpDataTime = DateTime.Now; orderBiddingDetailCheck.CreateBy = NickName; orderBiddingDetailCheck.CreateTime = DateTime.Now; res = await OrderBiddingDetailCheckRes.InsertAsync(orderBiddingDetailCheck); return res; } /// /// 查询工人的打卡记录 /// /// /// [Authorize] [HttpPost] public async Task> PostMyDakaListPage(OrderDakaPageSearch page) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } PageResult result = new PageResult(); var orderRepository = new BaseRepository(); RefAsync total = 0; var orderBiddingDetailCheckRepository = new BaseRepository(); var data = await orderRepository.Context.Queryable((a, b ,c ,d) => new JoinQueryInfos(JoinType.Inner, a.Id == b.OrderId , JoinType.Inner, b.Id == c.OrderBiddingId , JoinType.Inner, a.OrderUserId == d.UserId )) .Where((a, b, c, d) => a.IsEn == true && a.IsDeleted == false && b.IsEn == true && b.IsDeleted == false && c.IsEn == true && c.IsDeleted == false && b.IsSelected == true && b.WorkerUserId == userid && d.IsEn == true && d.IsDeleted == false ) .WhereIF(page.WordDate.HasValue, (a, b, c, d) => (c.WorkDate == page.WordDate)) .WhereIF(page.WordDateStart.HasValue, (a, b, c, d) => (c.WorkDate >= page.WordDateStart)) .WhereIF(page.WordDateEnd.HasValue, (a, b, c, d) => (c.WorkDate <= page.WordDateEnd)) .WhereIF(page.IsJieSuan.HasValue && page.IsJieSuan == true, (a, b, c, d) => (c.IsShenPi == 2)) .WhereIF(page.IsJieSuan.HasValue && page.IsJieSuan == false, (a, b, c, d) => (c.IsShenPi < 2)) .WhereIF(!string.IsNullOrEmpty(page.Suppliername), (a, b, c, d) =>d.Suppliername.Contains(page.Suppliername)) .OrderByDescending((a, b, c, d) => c.WorkDate) .Select((a, b, c, d) => 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, Suppliername = d.Suppliername, }) .ToPageListAsync(page.PageIndex, page.PageSize, total); var heji = orderRepository.Context.Queryable((a, b, c, d) => new JoinQueryInfos(JoinType.Inner, a.Id == b.OrderId, JoinType.Inner, b.Id == c.OrderBiddingId, JoinType.Inner, a.OrderUserId == d.UserId )) .Where((a, b, c, d) => a.IsEn == true && a.IsDeleted == false && b.IsEn == true && b.IsDeleted == false && c.IsEn == true && c.IsDeleted == false && b.IsSelected == true && b.WorkerUserId == userid && d.IsEn == true && d.IsDeleted == false) .WhereIF(page.WordDate.HasValue, (a, b, c, d) => (c.WorkDate == page.WordDate)) .WhereIF(page.WordDateStart.HasValue, (a, b, c, d) => (c.WorkDate >= page.WordDateStart)) .WhereIF(page.WordDateEnd.HasValue, (a, b, c, d) => (c.WorkDate <= page.WordDateEnd)) .WhereIF(page.IsJieSuan.HasValue && page.IsJieSuan == true, (a, b, c, d) => (c.IsShenPi == 2)) .WhereIF(page.IsJieSuan.HasValue && page.IsJieSuan == false, (a, b, c, d) => (c.IsShenPi < 2)) .WhereIF(!string.IsNullOrEmpty(page.Suppliername), (a, b, c, d) => d.Suppliername.Contains(page.Suppliername)) .Sum((a, b, c, d) => c.TodaySalary); if (data != null && data.Count > 0) { foreach (var dakaDto in data) { var orderBiddingDetailChecks = await orderBiddingDetailCheckRepository.GetListAsync(x => x.OrderBiddingDetailId == dakaDto.OrderBiddingDetailId && x.IsEn == true && x.IsDeleted == false); string DakaMingxi = ""; int hours = 0; int minutes = 0; 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; result.Heji = heji ?? 0; return result; } /// /// 进入填写/审批工价页面 /// /// [Authorize] [HttpPost] public async Task getDakaDetail(DakaDetailDto dakaDetailDto) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; string NickName = App.User?.FindFirstValue("NickName"); if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } OrderDakaMingxiDto orderDakaMingxiDto = new OrderDakaMingxiDto(); ; var orderBiddingRes = new BaseRepository(); var orderRes = new BaseRepository(); var orderBiddingDetailRes = new BaseRepository(); var OrderBiddingDetailCheckRes = new BaseRepository(); var userRes = new BaseRepository(); var userWorkerRes = new BaseRepository(); var orderBiddingDetail = await orderBiddingDetailRes.GetByIdAsync(dakaDetailDto.OrderBiddingDetailId); var orderBidding = await orderBiddingRes.GetByIdAsync(orderBiddingDetail.OrderBiddingId); var order = await orderRes.GetByIdAsync(orderBidding.OrderId); var orderBiddingDetailChecks = await OrderBiddingDetailCheckRes.GetListAsync(x => x.OrderBiddingDetailId == orderBiddingDetail.Id && x.IsEn == true && x.IsDeleted == false); orderDakaMingxiDto.orderBiddingDetailCheck = _mapper.Map>(orderBiddingDetailChecks); orderDakaMingxiDto.OrderBiddingDetailId = orderBiddingDetail.Id; orderDakaMingxiDto.OrderName = order.OrderName; orderDakaMingxiDto.WorkDate = orderBiddingDetail.WorkDate; orderDakaMingxiDto.WorkTime = orderBiddingDetail.WorkTime; orderDakaMingxiDto.WorkerType = order.WorkerType; orderDakaMingxiDto.WorkPrice = order.WorkPrice; orderDakaMingxiDto.TodaySalary = orderBiddingDetail.TodaySalary; orderDakaMingxiDto.IsShenPi = orderBiddingDetail.IsShenPi; orderDakaMingxiDto.WorkCount = orderBiddingDetail.WorkCount; orderDakaMingxiDto.WorkerUserId = orderBidding.WorkerUserId; var user = await userRes.GetByIdAsync(orderDakaMingxiDto.WorkerUserId); if (user != null) { orderDakaMingxiDto.WorkerUserAvatar = user.Avatar; } var userWorker = await userWorkerRes.GetFirstAsync(x => x.UserId == orderDakaMingxiDto.WorkerUserId && x.IsEn == true && x.IsDeleted == false); if (userWorker != null) { orderDakaMingxiDto.WorkerUserName = userWorker.name; } switch (orderDakaMingxiDto.IsShenPi) { case (int)IsShenPis.baocun: orderDakaMingxiDto.IsShenPiName = "未结算"; break; case (int)IsShenPis.tijiao: orderDakaMingxiDto.IsShenPiName = "未结算"; break; case (int)IsShenPis.yishenpi: orderDakaMingxiDto.IsShenPiName = "已结算"; break; default: break; } switch (orderDakaMingxiDto.WorkerType) { case (int)WorkerTypes.time: orderDakaMingxiDto.WorkerTypeName = "计时"; break; case (int)WorkerTypes.count: orderDakaMingxiDto.WorkerTypeName = "计件"; break; default: break; } if (orderDakaMingxiDto.IsShenPi == 0) { int hours = 0; int minutes = 0; for (int i = 0; i < orderBiddingDetailChecks.Count; i++) { 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; } } orderDakaMingxiDto.WorkTime = hours + (minutes / 60); if (orderDakaMingxiDto.WorkerType == 0) { orderDakaMingxiDto.TodaySalary = orderDakaMingxiDto.WorkTime * orderDakaMingxiDto.WorkPrice; } else { var WorkCount = orderDakaMingxiDto.WorkCount ?? 0; orderDakaMingxiDto.TodaySalary = WorkCount * orderDakaMingxiDto.WorkPrice; } } return orderDakaMingxiDto; } /// /// 工人确认当天打卡详情 /// /// [Authorize] [HttpPost] public async Task saveDakaDetail(DakaQuerenDetailDto dakaDto) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; string NickName = App.User?.FindFirstValue("NickName"); if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } var orderBiddingRes = new BaseRepository(); var orderRes = new BaseRepository(); var orderBiddingDetailRes = new BaseRepository(); //var OrderBiddingDetailCheckRes = new BaseRepository(); var orderBiddingDetail = await orderBiddingDetailRes.GetByIdAsync(dakaDto.OrderBiddingDetailId); if (orderBiddingDetail == null || orderBiddingDetail.IsShenPi > 1 || orderBiddingDetail.IsDeleted == true || orderBiddingDetail.IsEn == false) { throw Oops.Oh("该打卡状态已无法打卡确认!"); } var orderBidding = await orderBiddingRes.GetByIdAsync(orderBiddingDetail.OrderBiddingId); if (orderBidding == null || orderBidding.IsDeleted == true || orderBidding.IsEn == false || orderBidding.IsSelected != true) { throw Oops.Oh("该投递状态无法打卡确认!"); } var order = await orderRes.GetByIdAsync(orderBidding.OrderId); if (order == null || order.OrderStatus > 1 || order.IsDeleted == true || order.IsEn == false ) { throw Oops.Oh("该招工状态已无法打卡确认!"); } orderBiddingDetail.WorkTime = dakaDto.WorkTime; orderBiddingDetail.WorkCount = dakaDto.WorkCount; if(order.WorkerType == (int)WorkerTypes.count) { orderBiddingDetail.TodaySalary = dakaDto.WorkCount * order.WorkPrice; } else { orderBiddingDetail.TodaySalary = dakaDto.TodaySalary; } orderBiddingDetail.IsShenPi = (int)IsShenPis.tijiao; orderBiddingDetail.UpDataBy = NickName; orderBiddingDetail.UpDataTime = DateTime.Now; //orderBiddingDetail.CreateBy = NickName; //orderBiddingDetail.CreateTime = DateTime.Now; var res = await orderBiddingDetailRes.UpdateAsync(orderBiddingDetail); return res; } /// /// 查询工人的收入记录 /// /// /// [Authorize] [HttpPost] public async Task> PostMyTiXianDetailListPage(PageBaseSearch page) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } PageResult result = new PageResult(); RefAsync total = 0; var userTiXianDetailRepository = new BaseRepository(); var data = await userTiXianDetailRepository.Context.Queryable() .Where(a => a.IsEn == true && a.IsDeleted == false && a.UserId == userid) .OrderByDescending(a => a.CreateTime) .Select(a => new UserTiXianDetailDto { Id = a.Id, UserId = a.UserId, YiTiXianJine = a.YiTiXianJine, ZhiChuShouRu = a.ZhiChuShouRu, Remark = a.Remark, }) .ToPageListAsync(page.PageIndex, page.PageSize, total); if (data != null && data.Count > 0) { foreach (var userTiXianDetailDto in data) { switch (userTiXianDetailDto.ZhiChuShouRu) { case (int)ZhiChuShouRus.zhichu: userTiXianDetailDto.ZhiChuShouRuName = "支出"; break; case (int)ZhiChuShouRus.shouru: userTiXianDetailDto.ZhiChuShouRuName = "收入"; break; default: break; } } } result.Items = data; result.PageIndex = page.PageIndex; result.PageSize = page.PageSize; result.TotalCount = total; return result; } } }