| | |
| | | package com.qianwen.smartman.modules.perf.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import java.lang.invoke.SerializedLambda; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import org.apache.commons.compress.utils.Lists; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.qianwen.core.log.exception.ServiceException; |
| | | import com.qianwen.core.mp.base.BaseEntity; |
| | | import com.qianwen.core.mp.service.impl.BladeServiceImpl; |
| | | import com.qianwen.core.mp.support.Condition; |
| | | import com.qianwen.core.secure.utils.AuthUtil; |
| | | import com.qianwen.core.tool.utils.DateUtil; |
| | | import com.qianwen.core.tool.utils.Func; |
| | | import com.qianwen.core.tool.utils.SpringUtil; |
| | | import com.qianwen.smartman.common.cache.cps.EmployeeCache; |
| | | import com.qianwen.smartman.common.constant.CommonGroupConstant; |
| | | import com.qianwen.smartman.common.enums.CommonGroupTypeEnum; |
| | |
| | | import com.qianwen.smartman.common.utils.MessageUtils; |
| | | import com.qianwen.smartman.common.utils.TimeUtils; |
| | | import com.qianwen.smartman.common.utils.TreeUtils; |
| | | import com.qianwen.core.log.exception.ServiceException; |
| | | import com.qianwen.core.mp.base.BaseEntity; |
| | | import com.qianwen.core.mp.service.impl.BladeServiceImpl; |
| | | import com.qianwen.core.mp.support.Condition; |
| | | import com.qianwen.core.notify.DefaultNotifyType; |
| | | import com.qianwen.core.secure.utils.AuthUtil; |
| | | import com.qianwen.core.tool.utils.DateUtil; |
| | | import com.qianwen.core.tool.utils.Func; |
| | | import com.qianwen.core.tool.utils.SpringUtil; |
| | | import com.qianwen.smartman.modules.cps.entity.Workstation; |
| | | import com.qianwen.smartman.modules.cps.service.IEmployeeService; |
| | | import com.qianwen.smartman.modules.cps.service.IWorkstationService; |
| | |
| | | import com.qianwen.smartman.modules.perf.vo.QueryWorkStatusVO; |
| | | import com.qianwen.smartman.modules.perf.vo.SearchEmployeeWorkVO; |
| | | import com.qianwen.smartman.modules.perf.vo.SearchWorkEmployeeVO; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | public class EmployeeOnOffWorkServiceImpl extends BladeServiceImpl<EmployeeOnOffWorkMapper, EmployeeOnOffWork> implements IEmployeeOnOffWorkService { |
| | | private static final Logger log = LoggerFactory.getLogger(com.qianwen.smartman.modules.perf.service.impl.EmployeeOnOffWorkServiceImpl.class); |
| | | |
| | | static final /* synthetic */ int[] $SwitchMap$com$qianwen$smartman$modules$perf$enums$WorkStatusEnum; |
| | | |
| | | private final IEmployeeService employeeService; |
| | | |
| | |
| | | |
| | | public List<EmployeeWorkStatusVO> allWorkstationStatus(QueryWorkStatusVO vo) { |
| | | List<WorkstationBO> workstations = vo.getWorkstations(); |
| | | if (Func.isEmpty(workstations)) |
| | | if (Func.isEmpty(workstations)) { |
| | | return Lists.newArrayList(); |
| | | } |
| | | |
| | | WorkStatusEnum queryType = vo.getQueryType(); |
| | | switch(queryType) { |
| | | case ALL://0 |
| | | return allWorkStatusList(workstations); |
| | | case ON://1 |
| | | return onWorkStatusList(workstations, OnOffWorkEnum.WILL_OFF.getCode()); |
| | | |
| | | case OFF://2 |
| | | return offWorkStatusList(workstations, OnOffWorkEnum.WILL_OFF.getCode()); |
| | | case MY: |
| | | return currentEmployeeWork(workstations); |
| | | |
| | | } |
| | | |
| | | /* |
| | | switch ($SwitchMap$com$qianwen$smartman$modules$perf$enums$WorkStatusEnum[queryType.ordinal()]) { |
| | | //com.qianwen.smartman.modules.perf.enums.WorkStatusEnum |
| | | case 1: |
| | |
| | | return offWorkStatusList(workstations, OnOffWorkEnum.WILL_OFF.getCode()); |
| | | case 4: |
| | | return currentEmployeeWork(workstations); |
| | | } |
| | | }*/ |
| | | return Lists.newArrayList(); |
| | | } |
| | | |
| | |
| | | Integer type = vo.getType(); |
| | | List<Long> workstationIds = (List<Long>)vo.getWorks().stream().map(WorkstationBO::getId).collect(Collectors.toList()); |
| | | EmployeeCache.clearPerfCache(workstationIds); |
| | | |
| | | switch (OnOffWorkEnum.of(type)) { |
| | | case WILL_ON: |
| | | batchOnWorkstation(vo); |
| | | break; |
| | | case WILL_OFF: |
| | | batchOffWorkstation(vo); |
| | | break; |
| | | } |
| | | |
| | | /* |
| | | switch ($SwitchMap$com$qianwen$smartman$modules$perf$enums$WorkStatusEnum[OnOffWorkEnum.of(type).ordinal()]) { |
| | | case 1: |
| | | batchOnWorkstation(vo); |
| | |
| | | case 2: |
| | | batchOffWorkstation(vo); |
| | | break; |
| | | } |
| | | } */ |
| | | this.employeeSendService.sendMessageRocket(workstationIds); |
| | | return Boolean.valueOf(true); |
| | | } |
| | |
| | | public IPage<EmployeeOnOffWorkVO> queryOnOffLog(QueryEmployeeLogVO vo) { |
| | | IPage<EmployeeOnOffWork> page; |
| | | if (Func.isEmpty(vo.getWorkstationIds())) |
| | | return (IPage<EmployeeOnOffWorkVO>)new Page(); |
| | | return new Page<>(); |
| | | |
| | | String dbType = SpringUtil.getContext().getEnvironment().getProperty("datasource.type"); |
| | | String startTime = TimeUtils.getStartTime(vo.getStartTime()); |
| | | String endTime = TimeUtils.getEndTime(vo.getEndTime()); |
| | | if (DbTypeEnum.ORACLE.getCode().equals(dbType)) { |
| | | page = page(Condition.getPage(vo.getQuery()), |
| | | (Wrapper)((ExtraLambdaQueryWrapper)Lambda.in(Func.isNotEmpty(vo.getEmployeeIds()), EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeIds()) |
| | | .in(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationIds())) |
| | | Lambda.in(Func.isNotEmpty(vo.getEmployeeIds()), EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeIds()) |
| | | .in(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationIds()) |
| | | .nested(nt -> { |
| | | ExtraLambdaQueryWrapper extraLambdaQueryWrapper = (ExtraLambdaQueryWrapper) nt.apply("(online_time between TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({1}, 'yyyy-mm-dd hh24:mi:ss')) or (offline_time between TO_DATE({2}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({3}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[] { startTime, endTime, startTime, endTime }); |
| | | ExtraLambdaQueryWrapper extraLambdaQueryWrapper = nt.apply("(online_time between TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({1}, 'yyyy-mm-dd hh24:mi:ss')) or (offline_time between TO_DATE({2}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({3}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[] { startTime, endTime, startTime, endTime }); |
| | | })); |
| | | } else { |
| | | page = page(Condition.getPage(vo.getQuery()), |
| | | (Wrapper)((ExtraLambdaQueryWrapper)Lambda.in(Func.isNotEmpty(vo.getEmployeeIds()), EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeIds()) |
| | | .nested(n -> (ExtraLambdaQueryWrapper)((ExtraLambdaQueryWrapper)((ExtraLambdaQueryWrapper)n.between(EmployeeOnOffWork::getOnlineTime, startTime, endTime)).or()).between(EmployeeOnOffWork::getOfflineTime, startTime, endTime))) |
| | | Lambda.in(Func.isNotEmpty(vo.getEmployeeIds()), EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeIds()) |
| | | .nested(n -> n.between(EmployeeOnOffWork::getOnlineTime, startTime, endTime).or().between(EmployeeOnOffWork::getOfflineTime, startTime, endTime)) |
| | | |
| | | .in(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationIds())); |
| | | } |
| | | List<EmployeeOnOffWork> records = page.getRecords(); |
| | | if (Func.isEmpty(records)) |
| | | return (IPage<EmployeeOnOffWorkVO>)new Page(); |
| | | Page page1 = new Page(page.getCurrent(), page.getSize(), page.getTotal()); |
| | | page1.setRecords((List)records.stream() |
| | | return new Page<>(); |
| | | Page<EmployeeOnOffWorkVO> page1 = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); |
| | | page1.setRecords(records.stream() |
| | | .map(com.qianwen.smartman.modules.perf.service.impl.EmployeeOnOffWorkServiceImpl::convertWork) |
| | | .collect(Collectors.toList())); |
| | | return (IPage<EmployeeOnOffWorkVO>)page1; |
| | | return page1; |
| | | } |
| | | |
| | | public List<WorkstationBO> employeeWork(SearchEmployeeWorkVO vo) { |
| | |
| | | String startTime = DateUtil.formatDateTime(vo.getStartTime()); |
| | | String endTime = DateUtil.formatDateTime(vo.getEndTime()); |
| | | if (DbTypeEnum.ORACLE.getCode().equals(dbType)) { |
| | | works = list((Wrapper)Lambda.eq(EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeId()) |
| | | .nested(nt -> (ExtraLambdaQueryWrapper)nt.apply("(online_time between TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({1}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[] { startTime, endTime }))); |
| | | works = list(Lambda.eq(EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeId()) |
| | | .nested(nt -> nt.apply("(online_time between TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({1}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[] { startTime, endTime }))); |
| | | } else { |
| | | works = list((Wrapper)Lambda.eq(EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeId()) |
| | | works = list(Lambda.eq(EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeId()) |
| | | .between(EmployeeOnOffWork::getOnlineTime, startTime, endTime)); |
| | | } |
| | | if (Func.isEmpty(works)) |
| | |
| | | String startTime = DateUtil.formatDateTime(vo.getStartTime()); |
| | | String endTime = DateUtil.formatDateTime(vo.getEndTime()); |
| | | if (DbTypeEnum.ORACLE.getCode().equals(dbType)) { |
| | | works = list((Wrapper)Lambda.eq(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationId()) |
| | | .nested(nt -> (ExtraLambdaQueryWrapper)nt.apply("(online_time between TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({1}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[] { startTime, endTime }))); |
| | | works = list(Lambda.eq(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationId()) |
| | | .nested(nt -> nt.apply("(online_time between TO_DATE({0}, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE({1}, 'yyyy-mm-dd hh24:mi:ss'))", new Object[] { startTime, endTime }))); |
| | | } else { |
| | | works = list((Wrapper)Lambda.eq(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationId()) |
| | | works = list(Lambda.eq(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationId()) |
| | | .between(EmployeeOnOffWork::getOnlineTime, startTime, endTime)); |
| | | } |
| | | if (Func.isEmpty(works)) |
| | |
| | | |
| | | public void currentEmployeeWork(String employeeId, String workstationId) { |
| | | |
| | | List<EmployeeOnOffWork> currEmployeeId = list((Wrapper)((LambdaQueryWrapper)Wrappers.lambdaQuery() |
| | | .eq(EmployeeOnOffWork::getOnEmployeeId, employeeId)) |
| | | List<EmployeeOnOffWork> currEmployeeId = list(Wrappers.<EmployeeOnOffWork>lambdaQuery() |
| | | .eq(EmployeeOnOffWork::getOnEmployeeId, employeeId) |
| | | .eq(EmployeeOnOffWork::getOnlineType, OnOffWorkEnum.WILL_OFF.getCode())); |
| | | if (Func.isNotEmpty(currEmployeeId)) |
| | | throw new ServiceException(MessageUtils.message("perf.current.employee.login", new Object[0])); |
| | | List<EmployeeOnOffWork> works = list((Wrapper)((LambdaQueryWrapper)Wrappers.lambdaQuery() |
| | | .eq(EmployeeOnOffWork::getWorkstationId, workstationId)) |
| | | List<EmployeeOnOffWork> works = list(Wrappers.<EmployeeOnOffWork>lambdaQuery() |
| | | .eq(EmployeeOnOffWork::getWorkstationId, workstationId) |
| | | .eq(EmployeeOnOffWork::getOnlineType, OnOffWorkEnum.WILL_OFF.getCode())); |
| | | if (Func.isNotEmpty(works)) |
| | | throw new ServiceException(MessageUtils.message("perf.current.work.login", new Object[0])); |
| | |
| | | EmployeeVO employee = currentEmployee(); |
| | | if (Func.isNull(employee)) |
| | | return Lists.newArrayList(); |
| | | List<Long> wIds = (List<Long>)workstations.stream().map(WorkstationBO::getId).collect(Collectors.toList()); |
| | | List<EmployeeOnOffWork> works = list((Wrapper)((ExtraLambdaQueryWrapper)((ExtraLambdaQueryWrapper)Lambda.create() |
| | | .in(EmployeeOnOffWork::getWorkstationId, wIds)) |
| | | .eq(EmployeeOnOffWork::getOnEmployeeId, employee.getId())) |
| | | List<Long> wIds = workstations.stream().map(WorkstationBO::getId).collect(Collectors.toList()); |
| | | List<EmployeeOnOffWork> works = list(Lambda.<EmployeeOnOffWork>create() |
| | | .in(EmployeeOnOffWork::getWorkstationId, wIds) |
| | | .eq(EmployeeOnOffWork::getOnEmployeeId, employee.getId()) |
| | | .eq(EmployeeOnOffWork::getOnlineType, OnOffWorkEnum.WILL_OFF.getCode())); |
| | | if (Func.isEmpty(works)) |
| | | return Lists.newArrayList(); |