using 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; using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinAccountGetAccountBasicInfoResponse.Types; namespace cylsg.Application.Orders { /// /// 订单公司接口 /// 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; } /// /// 查询公司已经发布的招工订单 /// /// /// [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(); var userCompanyRes = new BaseRepository(); //查询公司的所有员工的所有招工订单 var userCompany = await userCompanyRes.GetFirstAsync(x => x.UserId == userid && x.IsEn == true && x.IsDeleted == false); if (userCompany == null) { throw Oops.Oh("你没有公司!"); } var userCompanies = await userCompanyRes.GetListAsync(x => x.Suppliercode == userCompany.Suppliercode && x.IsEn == true && x.IsDeleted == false); var userids = userCompanies.Select(x => x.UserId).ToList(); Expression> expression = t => true; expression = expression.And(t => t.IsDeleted == false /*&& t.IsEn == true*/ && userids.Contains(t.OrderUserId)); //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); } if (page.IsEn.HasValue) { expression = expression.And(t => t.IsEn == page.IsEn); } RefAsync total = 0; var orderBiddingRepository = 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; } } result.Items = datadto; result.PageIndex = page.PageIndex; result.PageSize = page.PageSize; result.TotalCount = total; return result; } /// /// 保存招工信息(新增/修改) /// /// [Authorize] [HttpPost] public async Task saveOrder(OrderDto orderDto) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; string NickName = App.User?.FindFirstValue("NickName"); if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } if (!string.IsNullOrEmpty(orderDto.OrderName) && orderDto.OrderName.Length > 100) { throw Oops.Oh("招工名称长度过长!"); } if (!string.IsNullOrEmpty(orderDto.Demand) && orderDto.Demand.Length > 2000) { throw Oops.Oh("需求长度过长!"); } if (!string.IsNullOrEmpty(orderDto.WorderAddress) && orderDto.WorderAddress.Length > 500) { throw Oops.Oh("工作地点长度过长!"); } if (!string.IsNullOrEmpty(orderDto.ContactPhone) && orderDto.ContactPhone.Length > 30) { throw Oops.Oh("联系电话长度过长!"); } var userCompanyRes = new BaseRepository(); 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(); bool res; if (!orderDto.Zixinganpai.HasValue) { orderDto.Zixinganpai = false; } if (orderDto.Id > 0) { var order = await orderRes.GetByIdAsync(orderDto.Id); if (order.OrderStatus > 0 && order.IsEn == true) { throw Oops.Oh("招工已经结束不能修改!"); } var orderBiddingRes = new BaseRepository(); var count = await orderBiddingRes.CountAsync(x=>x.OrderId == orderDto.Id && x.IsEn == true && x.IsDeleted == true && x.IsSelected == true); if (count > 0 && order.IsEn == true) { throw Oops.Oh("已经确认招工人员,不能修改!"); } if (order.IsEn == false) { var orderBiddings = await orderBiddingRes.GetListAsync(x => x.OrderId == orderDto.Id); foreach (var orderBidding in orderBiddings) { res = await orderBiddingRes.DeleteByIdAsync(orderBidding.Id); } } order.OrderName = orderDto.OrderName; order.WordStartTime = orderDto.WordStartTime; order.WordEndTime = orderDto.WordEndTime; order.StartTime = orderDto.StartTime; order.EndTime = orderDto.EndTime; 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.OrderStatus = 0; order.IsEn = true; order.UpDataBy = NickName; order.UpDataTime = DateTime.Now; res = await orderRes.UpdateAsync(order); } else { var order = _mapper.Map(orderDto); order.UpDataBy = NickName; order.UpDataTime = DateTime.Now; order.CreateBy = NickName; order.CreateTime = DateTime.Now; order.OrderStatus = 0; order.OrderUserId = userid; order.IsEn = true; res = await orderRes.InsertAsync(order); } return res; } /// /// 公司选择工人 /// /// [Authorize] [HttpPost] public async Task saveQueRen(QueRenDto queRenDto) { 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 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 = NickName; orderBidding.UpDataTime = DateTime.Now; res = await orderBiddingRes.UpdateAsync(orderBidding); if(order.WorderCount == (orderBiddings + 1)) { order.OrderStatus = 1; res = await orderRes.UpdateAsync(order); } return res; } /// /// 公司不录用一个工人 /// /// [Authorize] [HttpPost] public async Task saveBuLuYong(QueRenDto queRenDto) { 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 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("该招工状态已经无法投递!"); } bool res; orderBidding.IsSelected = false; //orderBidding.Selectedtime = DateTime.Now; orderBidding.UpDataBy = NickName; orderBidding.UpDataTime = DateTime.Now; res = await orderBiddingRes.UpdateAsync(orderBidding); return res; } /// /// 公司取消选择工人 /// /// [Authorize] [HttpPost] public async Task saveQuXiao(QueRenDto queRenDto) { 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 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 count = await orderBiddingDetailRes.CountAsync(x => x.OrderBiddingId == orderBidding.Id && x.IsEn == true && x.IsDeleted == false); if (count>0) { throw Oops.Oh("该工人已有打卡信息,不能取消招工!"); } var order = await orderRes.GetByIdAsync(orderBidding.OrderId); bool res; orderBidding.IsSelected = null; orderBidding.Selectedtime = null; orderBidding.UpDataBy = NickName; orderBidding.UpDataTime = DateTime.Now; res = await orderBiddingRes.UpdateAsync(orderBidding); if (!res) { throw Oops.Oh("取消工人招工失败!"); } order.OrderStatus = 0; res = await orderRes.UpdateAsync(order); return res; } /// /// 查询公司下工人的打卡记录 /// /// /// [Authorize] [HttpPost] public async Task> PostMyComDakaListPage(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(); var userCompanyRes = new BaseRepository(); //查询公司的所有员工的所有招工订单 var userCompany = await userCompanyRes.GetFirstAsync(x => x.UserId == userid && x.IsEn == true && x.IsDeleted == false); if (userCompany == null) { throw Oops.Oh("你没有公司!"); } var userCompanies = await userCompanyRes.GetListAsync(x => x.Suppliercode == userCompany.Suppliercode && x.IsEn == true && x.IsDeleted == false); var userids = userCompanies.Select(x => x.UserId).ToList(); RefAsync total = 0; var orderBiddingDetailCheckRepository = new BaseRepository(); var userWorkerRes = 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, b.WorkerUserId == 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 && userids.Contains(a.OrderUserId)) //a.OrderUserId == userid .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.WorkerUserName), (a, b, c, d) => (d.name.Contains(page.WorkerUserName))) .WhereIF(page.WorkerUserId >0 , (a, b, c, d) => (b.WorkerUserId == page.WorkerUserId)) .OrderByDescending((a,b,c) => 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, WorkerUserId = b.WorkerUserId, WorkerUserName = d.name, }) .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, b.WorkerUserId == 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 && userids.Contains(a.OrderUserId)) //a.OrderUserId == userid .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.WorkerUserName), (a, b, c, d) => (d.name.Contains(page.WorkerUserName))) .WhereIF(page.WorkerUserId > 0, (a, b, c, d) => (b.WorkerUserId == page.WorkerUserId)) .Sum((a, b, c, d) => c.TodaySalary); 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; //var userWorker = await userWorkerRes.GetFirstAsync(x => x.UserId == dakaDto.WorkerUserId && x.IsEn == true && x.IsDeleted == false ); //if (userWorker != null) //{ // dakaDto.WorkerUserName = userWorker.name; //} } } 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 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 userTiXianDetailRes = new BaseRepository(); //var OrderBiddingDetailCheckRes = new BaseRepository(); var userWorkerRes = new BaseRepository(); var userCompanyRes = new BaseRepository(); 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 = NickName; orderBiddingDetail.UpDataTime = DateTime.Now; orderBiddingDetail.IsTiXian = true; orderBiddingDetail.TiXiantime = DateTime.Now; //orderBiddingDetail.CreateBy = NickName; //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 ) { var userCompanies = await userCompanyRes.CountAsync(x => x.Suppliercode == userCompany.Suppliercode && x.IsEn == true && x.IsDeleted == false && x.IsTiXian == true); if (userCompanies > 0) { //插入用户的结算金额 UserTiXianDetail userTiXianDetail = new UserTiXianDetail(); userTiXianDetail.UserId = orderBidding.WorkerUserId; userTiXianDetail.YiTiXianJine = TodaySalary; userTiXianDetail.ZhiChuShouRu = (int)ZhiChuShouRus.shouru; userTiXianDetail.Remark = userCompany.Suppliername + " " + orderBiddingDetail.WorkDate.Value.ToString("yyyy-MM-dd"); userTiXianDetail.UpDataBy = NickName; userTiXianDetail.UpDataTime = DateTime.Now; userTiXianDetail.CreateBy = NickName; 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; } /// /// 查询公司下所有员工 /// /// /// [Authorize] [HttpPost] public async Task> PostMystaffList() { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } var userCompanyRes = new BaseRepository(); var userRes = new BaseRepository(); var userCompany = await userCompanyRes.GetFirstAsync(x => x.UserId == userid && x.IsEn == true && x.IsDeleted == false); if (userCompany == null) { throw Oops.Oh("你没有公司!"); } var userCompanies = await userCompanyRes.GetListAsync(x => x.Suppliercode == userCompany.Suppliercode && x.IsEn == true && x.IsDeleted == false); var datadtos = _mapper.Map>(userCompanies); foreach (var datadto in datadtos) { var user = await userRes.GetByIdAsync(datadto.UserId); datadto.Nickname = user.Nickname; } return datadtos; } /// /// 保存公司下所有员工是否管理员 /// /// /// [Authorize] [HttpPost] public async Task SaveStaffAdmin(StaffAdminDto staffAdminDto) { var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; string NickName = App.User?.FindFirstValue("NickName"); if (!string.IsNullOrEmpty(UserID)) { userid = int.Parse(UserID); } var userCompanyRes = new BaseRepository(); var res = false; var userCompany = await userCompanyRes.GetByIdAsync(staffAdminDto.ComId); if(staffAdminDto.IsAdmin == false) { var userCompanies = await userCompanyRes.CountAsync(x => x.Suppliercode == userCompany.Suppliercode && x.Id != userCompany.Id && x.IsAdmin == true && x.IsEn == true && x.IsDeleted == false); if (userCompanies <= 0) { throw Oops.Oh("一个公司必须至少一个管理员!"); } } if (userCompany != null) { userCompany.IsAdmin = staffAdminDto.IsAdmin; userCompany.UpDataBy = NickName; userCompany.UpDataTime = DateTime.Now; res = await userCompanyRes.UpdateAsync(userCompany); } return res; } /// /// 职位删除功能 /// /// [Authorize] [HttpPost] public async Task deleteOrder(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 order = await orderRes.GetByIdAsync(baoMingDto.OrderId); if (order.OrderStatus > 0) { throw Oops.Oh("已经招工完毕或者结算,无法下架"); } bool res; order.IsEn = false; order.UpDataBy = NickName; order.UpDataTime = DateTime.Now; res = await orderRes.UpdateAsync(order); return res; } /// /// 查询公司下工人的工资额度 /// /// /// [Authorize] [HttpPost] public async Task> PostMyComGongZiListPage(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(); var userCompanyRes = new BaseRepository(); //查询公司的所有员工的所有招工订单 var userCompany = await userCompanyRes.GetFirstAsync(x => x.UserId == userid && x.IsEn == true && x.IsDeleted == false); if (userCompany == null) { throw Oops.Oh("你没有公司!"); } var userCompanies = await userCompanyRes.GetListAsync(x => x.Suppliercode == userCompany.Suppliercode && x.IsEn == true && x.IsDeleted == false); var userids = userCompanies.Select(x => x.UserId).ToList(); RefAsync total = 0; var orderBiddingDetailCheckRepository = new BaseRepository(); var userWorkerRes = 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, b.WorkerUserId == 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 && c.IsShenPi == 2 && userids.Contains(a.OrderUserId)) //a.OrderUserId == userid .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(!string.IsNullOrEmpty(page.WorkerUserName), (a, b, c, d) => (d.name.Contains(page.WorkerUserName))) .GroupBy((a, b, c, d) => new { b.WorkerUserId, d.name }) .Select((a, b, c, d) => new OrderDakaDto { TodaySalary = SqlFunc.AggregateSumNoNull(c.TodaySalary), WorkerUserId = b.WorkerUserId, WorkerUserName = d.name, }) .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, b.WorkerUserId == 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 && c.IsShenPi == 2 && userids.Contains(a.OrderUserId)) //a.OrderUserId == userid .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(!string.IsNullOrEmpty(page.WorkerUserName), (a, b, c, d) => (d.name.Contains(page.WorkerUserName))) .Sum((a, b, c, d) => c.TodaySalary); result.Items = data; result.PageIndex = page.PageIndex; result.PageSize = page.PageSize; result.TotalCount = total; result.Heji = heji ?? 0; return result; } } }