From 8c9ba6667b89cc0494d05b5da4355dde205b8d4a Mon Sep 17 00:00:00 2001
From: PC <PC@PC1RHZ4L>
Date: 星期日, 31 三月 2024 09:59:04 +0800
Subject: [PATCH] update by wangzq

---
 smart-man-boot/src/main/java/com/qianwen/smartman/modules/perf/service/impl/EmployeeOnOffWorkServiceImpl.java |  789 +++++++++++++++++++++----------------------------------
 1 files changed, 306 insertions(+), 483 deletions(-)

diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/modules/perf/service/impl/EmployeeOnOffWorkServiceImpl.java b/smart-man-boot/src/main/java/com/qianwen/smartman/modules/perf/service/impl/EmployeeOnOffWorkServiceImpl.java
index 16e4b67..66ced51 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/modules/perf/service/impl/EmployeeOnOffWorkServiceImpl.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/modules/perf/service/impl/EmployeeOnOffWorkServiceImpl.java
@@ -23,8 +23,10 @@
 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;
@@ -55,487 +57,308 @@
 import com.qianwen.smartman.modules.perf.vo.SearchWorkEmployeeVO;
 import org.springframework.stereotype.Service;
 
-@Service
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/perf/service/impl/EmployeeOnOffWorkServiceImpl.class */
 public class EmployeeOnOffWorkServiceImpl extends BladeServiceImpl<EmployeeOnOffWorkMapper, EmployeeOnOffWork> implements IEmployeeOnOffWorkService {
-    private static final Logger log = LoggerFactory.getLogger(EmployeeOnOffWorkServiceImpl.class);
-    private final IEmployeeService employeeService;
-    private final IWorkstationService workstationService;
-    private final IEmployeeSendService employeeSendService;
-
-    private static /* synthetic */ Object $deserializeLambda$(SerializedLambda lambda) {
-        String implMethodName = lambda.getImplMethodName();
-        boolean z = true;
-        switch (implMethodName.hashCode()) {
-            case -698756170:
-                if (implMethodName.equals("getOnlineTime")) {
-                    z = true;
-                    break;
-                }
-                break;
-            case -698740701:
-                if (implMethodName.equals("getOnlineType")) {
-                    z = true;
-                    break;
-                }
-                break;
-            case -557259320:
-                if (implMethodName.equals("getWorkstationId")) {
-                    z = false;
-                    break;
-                }
-                break;
-            case 408973850:
-                if (implMethodName.equals("getOfflineTime")) {
-                    z = true;
-                    break;
-                }
-                break;
-            case 840166942:
-                if (implMethodName.equals("getOnEmployeeId")) {
-                    z = true;
-                    break;
-                }
-                break;
-        }
-        switch (z) {
-            case false:
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getWorkstationId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getWorkstationId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getWorkstationId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getWorkstationId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getWorkstationId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getWorkstationId();
-                    };
-                }
-                break;
-            case true:
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Integer;")) {
-                    return (v0) -> {
-                        return v0.getOnlineType();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Integer;")) {
-                    return (v0) -> {
-                        return v0.getOnlineType();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Integer;")) {
-                    return (v0) -> {
-                        return v0.getOnlineType();
-                    };
-                }
-                break;
-            case true:
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/util/Date;")) {
-                    return (v0) -> {
-                        return v0.getOfflineTime();
-                    };
-                }
-                break;
-            case true:
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getOnEmployeeId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getOnEmployeeId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getOnEmployeeId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getOnEmployeeId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getOnEmployeeId();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
-                    return (v0) -> {
-                        return v0.getOnEmployeeId();
-                    };
-                }
-                break;
-            case true:
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/util/Date;")) {
-                    return (v0) -> {
-                        return v0.getOnlineTime();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/util/Date;")) {
-                    return (v0) -> {
-                        return v0.getOnlineTime();
-                    };
-                }
-                if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/perf/entity/EmployeeOnOffWork") && lambda.getImplMethodSignature().equals("()Ljava/util/Date;")) {
-                    return (v0) -> {
-                        return v0.getOnlineTime();
-                    };
-                }
-                break;
-        }
-        throw new IllegalArgumentException("Invalid lambda deserialization");
-    }
-
-    public EmployeeOnOffWorkServiceImpl(final IEmployeeService employeeService, final IWorkstationService workstationService, final IEmployeeSendService employeeSendService) {
-        this.employeeService = employeeService;
-        this.workstationService = workstationService;
-        this.employeeSendService = employeeSendService;
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public List<EmployeeWorkStatusVO> allWorkstationStatus(QueryWorkStatusVO vo) {
-        List<WorkstationBO> workstations = vo.getWorkstations();
-        if (Func.isEmpty(workstations)) {
-            return Lists.newArrayList();
-        }
-        WorkStatusEnum queryType = vo.getQueryType();
-        switch (queryType) {
-            case ALL:
-                return allWorkStatusList(workstations);
-            case ON:
-                return onWorkStatusList(workstations, OnOffWorkEnum.WILL_OFF.getCode());
-            case OFF:
-                return offWorkStatusList(workstations, OnOffWorkEnum.WILL_OFF.getCode());
-            case MY:
-                return currentEmployeeWork(workstations);
-            default:
-                return Lists.newArrayList();
-        }
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public EmployeeVO currentEmployee() {
-        return this.employeeService.currentEmployee(AuthUtil.getUserId());
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public Boolean batchOnOffWorkstation(BatchOnWorkVO vo) {
-        vo.getType();
-        List<Long> workstationIds = (List) vo.getWorks().stream().map((v0) -> {
-            return v0.getId();
-        }).collect(Collectors.toList());
-        EmployeeCache.clearPerfCache(workstationIds);
-        switch (OnOffWorkEnum.of(type)) {
-            case WILL_ON:
-                batchOnWorkstation(vo);
-                break;
-            case WILL_OFF:
-                batchOffWorkstation(vo);
-                break;
-        }
-        this.employeeSendService.sendMessageRocket(workstationIds);
-        return true;
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public List<GroupTreeVO> willOnWork() {
-        List<GroupTreeVO> children = this.baseMapper.willOnWork(OnOffWorkEnum.WILL_OFF.getCode());
-        CommonGroupTypeVO commonGroupType = new CommonGroupTypeVO().setGroupType(CommonGroupTypeEnum.WORKSTATION.getName()).setGroupCategory(CommonGroupConstant.DEFAULT_CATEGORY);
-        return TreeUtils.allGroupTree(commonGroupType, children);
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public List<OffEmployeeTreeVO> willOffWork() {
-        List<OffEmployeeTreeVO> children = this.baseMapper.willOffWork(OnOffWorkEnum.WILL_OFF.getCode());
-        CommonGroupTypeVO commonGroupType = new CommonGroupTypeVO().setGroupType(CommonGroupTypeEnum.WORKSTATION.getName()).setGroupCategory(CommonGroupConstant.DEFAULT_CATEGORY);
-        return TreeUtils.allGroupTreeOff(commonGroupType, children);
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public IPage<EmployeeOnOffWorkVO> queryOnOffLog(QueryEmployeeLogVO vo) {
-        IPage<EmployeeOnOffWork> page;
-        if (Func.isEmpty(vo.getWorkstationIds())) {
-            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()), (v0) -> {
-                return v0.getOnEmployeeId();
-            }, vo.getEmployeeIds()).in((v0) -> {
-                return v0.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});
-            }));
-        } else {
-            page = page(Condition.getPage(vo.getQuery()), (Wrapper) ((ExtraLambdaQueryWrapper) Lambda.in(Func.isNotEmpty(vo.getEmployeeIds()), (v0) -> {
-                return v0.getOnEmployeeId();
-            }, vo.getEmployeeIds()).nested(n -> {
-                ExtraLambdaQueryWrapper extraLambdaQueryWrapper = (ExtraLambdaQueryWrapper) ((ExtraLambdaQueryWrapper) ((ExtraLambdaQueryWrapper) n.between((v0) -> {
-                    return v0.getOnlineTime();
-                }, startTime, endTime)).or()).between((v0) -> {
-                    return v0.getOfflineTime();
-                }, startTime, endTime);
-            })).in((v0) -> {
-                return v0.getWorkstationId();
-            }, vo.getWorkstationIds()));
-        }
-        List<EmployeeOnOffWork> records = page.getRecords();
-        if (Func.isEmpty(records)) {
-            return new Page();
-        }
-        Page page2 = new Page(page.getCurrent(), page.getSize(), page.getTotal());
-        page2.setRecords((List) records.stream().map(EmployeeOnOffWorkServiceImpl::convertWork).collect(Collectors.toList()));
-        return page2;
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public List<WorkstationBO> employeeWork(SearchEmployeeWorkVO vo) {
-        List<EmployeeOnOffWork> works;
-        String dbType = SpringUtil.getContext().getEnvironment().getProperty("datasource.type");
-        String startTime = DateUtil.formatDateTime(vo.getStartTime());
-        String endTime = DateUtil.formatDateTime(vo.getEndTime());
-        if (DbTypeEnum.ORACLE.getCode().equals(dbType)) {
-            works = list((Wrapper) Lambda.eq((v0) -> {
-                return v0.getOnEmployeeId();
-            }, vo.getEmployeeId()).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'))", new Object[]{startTime, endTime});
-            }));
-        } else {
-            works = list((Wrapper) Lambda.eq((v0) -> {
-                return v0.getOnEmployeeId();
-            }, vo.getEmployeeId()).between((v0) -> {
-                return v0.getOnlineTime();
-            }, startTime, endTime));
-        }
-        if (Func.isEmpty(works)) {
-            return Lists.newArrayList();
-        }
-        return (List) works.stream().map(w -> {
-            return WorkstationBO.builder().id(w.getWorkstationId()).workstationCode(w.getWorkstationCode()).workstationName(w.getWorkstationName()).build();
-        }).filter(DistinctKeyUtil.distinctByKey((v0) -> {
-            return v0.getId();
-        })).collect(Collectors.toList());
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public List<EmployeeVO> workEmployee(SearchWorkEmployeeVO vo) {
-        List<EmployeeOnOffWork> works;
-        String dbType = SpringUtil.getContext().getEnvironment().getProperty("datasource.type");
-        String startTime = DateUtil.formatDateTime(vo.getStartTime());
-        String endTime = DateUtil.formatDateTime(vo.getEndTime());
-        if (DbTypeEnum.ORACLE.getCode().equals(dbType)) {
-            works = list((Wrapper) Lambda.eq((v0) -> {
-                return v0.getWorkstationId();
-            }, vo.getWorkstationId()).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'))", new Object[]{startTime, endTime});
-            }));
-        } else {
-            works = list((Wrapper) Lambda.eq((v0) -> {
-                return v0.getWorkstationId();
-            }, vo.getWorkstationId()).between((v0) -> {
-                return v0.getOnlineTime();
-            }, startTime, endTime));
-        }
-        if (Func.isEmpty(works)) {
-            return Lists.newArrayList();
-        }
-        return (List) works.stream().map(w -> {
-            EmployeeVO res = new EmployeeVO();
-            res.setId(w.getOnEmployeeId());
-            res.setCode(w.getOnEmployeeCode());
-            res.setName(w.getOnEmployeeName());
-            return res;
-        }).filter(DistinctKeyUtil.distinctByKey((v0) -> {
-            return v0.getId();
-        })).collect(Collectors.toList());
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public List<CurrWorkDetailVO> currWorkLog(CurrWorkLogVO vo) {
-        return this.baseMapper.currWorkLog(vo.getWorkstationId());
-    }
-
-    @Override // org.springblade.modules.perf.service.IEmployeeOnOffWorkService
-    public void currentEmployeeWork(String employeeId, String workstationId) {
-        List<EmployeeOnOffWork> currEmployeeId = list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
-            return v0.getOnEmployeeId();
-        }, employeeId)).eq((v0) -> {
-            return v0.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((v0) -> {
-            return v0.getWorkstationId();
-        }, workstationId)).eq((v0) -> {
-            return v0.getOnlineType();
-        }, OnOffWorkEnum.WILL_OFF.getCode()));
-        if (Func.isNotEmpty(works)) {
-            throw new ServiceException(MessageUtils.message("perf.current.work.login", new Object[0]));
-        }
-    }
-
-    private List<EmployeeWorkStatusVO> allWorkStatusList(List<WorkstationBO> workstations) {
-        Map<Long, Workstation> workstationMap = workstationMap();
-        List<Long> wIds = (List) workstations.stream().map((v0) -> {
-            return v0.getId();
-        }).collect(Collectors.toList());
-        List<EmployeeOnOffWork> works = this.baseMapper.queryWork(wIds, null);
-        Map<Long, EmployeeOnOffWork> onOffWorkMap = (Map) works.stream().collect(Collectors.toMap((v0) -> {
-            return v0.getWorkstationId();
-        }, v -> {
-            return v;
-        }));
-        return (List) workstations.stream().map(c -> {
-            Long workstationId = c.getId();
-            Workstation workstation = (Workstation) workstationMap.get(workstationId);
-            if (Func.isNull(workstation)) {
-                return null;
-            }
-            EmployeeOnOffWork employeeOnOffWork = (EmployeeOnOffWork) onOffWorkMap.get(workstationId);
-            EmployeeWorkStatusVO res = EmployeeWorkStatusVO.builder().onType(OnOffWorkEnum.WILL_ON.getCode()).workstationId(workstationId).workstationCode(workstation.getCode()).workstationName(workstation.getName()).avatar(workstation.getAvatar()).build();
-            if (Func.isNull(employeeOnOffWork) || employeeOnOffWork.getOnlineType().equals(OnOffWorkEnum.WILL_ON.getCode())) {
-                return res;
-            }
-            res.setId(employeeOnOffWork.getId());
-            res.setOnType(employeeOnOffWork.getOnlineType());
-            res.setOnEmployeeId(employeeOnOffWork.getOnEmployeeId());
-            res.setOnEmployeeCode(employeeOnOffWork.getOnEmployeeCode());
-            res.setOnEmployeeName(employeeOnOffWork.getOnEmployeeName());
-            res.setOnEmployeeAvatar(employeeOnOffWork.getOnEmployeeAvatar());
-            res.setOnlineTime(employeeOnOffWork.getOnlineTime());
-            return res;
-        }).filter((v0) -> {
-            return Func.notNull(v0);
-        }).collect(Collectors.toList());
-    }
-
-    private List<EmployeeWorkStatusVO> onWorkStatusList(List<WorkstationBO> workstations, Integer onType) {
-        List<Long> wIds = (List) workstations.stream().map((v0) -> {
-            return v0.getId();
-        }).collect(Collectors.toList());
-        List<EmployeeOnOffWork> works = this.baseMapper.queryWork(wIds, onType);
-        if (Func.isEmpty(works)) {
-            return Lists.newArrayList();
-        }
-        return (List) works.stream().map(EmployeeOnOffWorkServiceImpl::convert).collect(Collectors.toList());
-    }
-
-    private List<EmployeeWorkStatusVO> offWorkStatusList(List<WorkstationBO> workstations, Integer onType) {
-        Map<Long, Workstation> workstationMap = workstationMap();
-        List<Long> wIds = (List) workstations.stream().map((v0) -> {
-            return v0.getId();
-        }).collect(Collectors.toList());
-        List<EmployeeOnOffWork> works = this.baseMapper.queryWork(wIds, onType);
-        Set<Long> workstationIds = (Set) works.stream().map((v0) -> {
-            return v0.getWorkstationId();
-        }).collect(Collectors.toSet());
-        return (List) workstations.stream().filter(c -> {
-            return !workstationIds.contains(c.getId());
-        }).map(c2 -> {
-            Long workstationId = c2.getId();
-            Workstation workstation = (Workstation) workstationMap.get(workstationId);
-            if (Func.isNull(workstation)) {
-                return null;
-            }
-            return EmployeeWorkStatusVO.builder().onType(OnOffWorkEnum.WILL_ON.getCode()).workstationId(workstationId).workstationCode(workstation.getCode()).workstationName(workstation.getName()).avatar(workstation.getAvatar()).build();
-        }).filter((v0) -> {
-            return Func.notNull(v0);
-        }).collect(Collectors.toList());
-    }
-
-    private List<EmployeeWorkStatusVO> currentEmployeeWork(List<WorkstationBO> workstations) {
-        EmployeeVO employee = currentEmployee();
-        if (Func.isNull(employee)) {
-            return Lists.newArrayList();
-        }
-        List<Long> wIds = (List) workstations.stream().map((v0) -> {
-            return v0.getId();
-        }).collect(Collectors.toList());
-        List<EmployeeOnOffWork> works = list((Wrapper) ((ExtraLambdaQueryWrapper) ((ExtraLambdaQueryWrapper) Lambda.create().in((v0) -> {
-            return v0.getWorkstationId();
-        }, wIds)).eq((v0) -> {
-            return v0.getOnEmployeeId();
-        }, employee.getId())).eq((v0) -> {
-            return v0.getOnlineType();
-        }, OnOffWorkEnum.WILL_OFF.getCode()));
-        if (Func.isEmpty(works)) {
-            return Lists.newArrayList();
-        }
-        Map<Long, Workstation> workMap = workstationMap();
-        return (List) works.stream().map(w -> {
-            EmployeeWorkStatusVO vo = convert(w);
-            Workstation workstation = (Workstation) workMap.get(w.getWorkstationId());
-            if (Func.isNull(workstation)) {
-                return null;
-            }
-            vo.setAvatar(workstation.getAvatar());
-            return vo;
-        }).filter((v0) -> {
-            return Func.notNull(v0);
-        }).collect(Collectors.toList());
-    }
-
-    private static EmployeeWorkStatusVO convert(EmployeeOnOffWork work) {
-        return EmployeeWorkStatusVO.builder().id(work.getId()).onType(work.getOnlineType()).onEmployeeId(work.getOnEmployeeId()).onEmployeeCode(work.getOnEmployeeCode()).onEmployeeName(work.getOnEmployeeName()).onEmployeeAvatar(work.getOnEmployeeAvatar()).workstationId(work.getWorkstationId()).workstationCode(work.getWorkstationCode()).workstationName(work.getWorkstationName()).onlineTime(work.getOnlineTime()).build();
-    }
-
-    private static EmployeeOnOffWorkVO convertWork(EmployeeOnOffWork work) {
-        return EmployeeOnOffWorkVO.builder().id(work.getId()).employeeId(work.getOnEmployeeId()).employeeName(work.getOnEmployeeName()).employeeCode(work.getOnEmployeeCode()).workstationId(work.getWorkstationId()).workstationCode(work.getWorkstationCode()).workstationName(work.getWorkstationName()).onlineTime(work.getOnlineTime()).offlineTime(work.getOfflineTime()).createTime(work.getCreateTime()).build();
-    }
-
-    private void batchOnWorkstation(BatchOnWorkVO vo) {
-        List<WorkstationBO> works = vo.getWorks();
-        List<EmployeeOnOffWork> onOffWorks = (List) works.stream().map(w -> {
-            return convertWork(vo, w);
-        }).collect(Collectors.toList());
-        saveBatch(onOffWorks);
-    }
-
-    private void batchOffWorkstation(BatchOnWorkVO vo) {
-        List<WorkstationBO> works = vo.getWorks();
-        List<EmployeeOnOffWork> offWorks = (List) works.stream().map(w -> {
-            EmployeeOnOffWork work = new EmployeeOnOffWork().setOffEmployeeId(vo.getEmployeeId()).setOffEmployeeCode(vo.getEmployeeCode()).setOffEmployeeName(vo.getEmployeeName()).setOffEmployeeAvatar(vo.getEmployeeAvatar()).setOnlineType(OnOffWorkEnum.WILL_ON.getCode()).setOfflineTime(vo.getTime());
-            work.setId(w.getLogId());
-            return work;
-        }).collect(Collectors.toList());
-        updateBatchById(offWorks);
-    }
-
-    private EmployeeOnOffWork convertWork(BatchOnWorkVO vo, WorkstationBO work) {
-        return new EmployeeOnOffWork().setOnlineTime(vo.getTime()).setOnEmployeeId(vo.getEmployeeId()).setOnEmployeeName(vo.getEmployeeName()).setOnEmployeeCode(vo.getEmployeeCode()).setOnEmployeeAvatar(vo.getEmployeeAvatar()).setWorkstationId(work.getId()).setWorkstationName(work.getWorkstationName()).setWorkstationCode(work.getWorkstationCode()).setWorkstationAvatar(work.getAvatar()).setOnlineType(OnOffWorkEnum.WILL_OFF.getCode());
-    }
-
-    private Map<Long, Workstation> workstationMap() {
-        List<Workstation> workstations = this.workstationService.list();
-        return (Map) workstations.stream().collect(Collectors.toMap((v0) -> {
-            return v0.getId();
-        }, v -> {
-            return v;
-        }));
-    }
-}
+	  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;
+	  
+	  private final IWorkstationService workstationService;
+	  
+	  private final IEmployeeSendService employeeSendService;
+	  
+	  public EmployeeOnOffWorkServiceImpl(IEmployeeService employeeService, IWorkstationService workstationService, IEmployeeSendService employeeSendService) {
+	    this.employeeService = employeeService;
+	    this.workstationService = workstationService;
+	    this.employeeSendService = employeeSendService;
+	  }
+	  
+	  public List<EmployeeWorkStatusVO> allWorkstationStatus(QueryWorkStatusVO vo) {
+	    List<WorkstationBO> workstations = vo.getWorkstations();
+	    if (Func.isEmpty(workstations))
+	      return Lists.newArrayList(); 
+	    WorkStatusEnum queryType = vo.getQueryType();
+	    switch ($SwitchMap$com$qianwen$smartman$modules$perf$enums$WorkStatusEnum[queryType.ordinal()]) {
+	                            //com.qianwen.smartman.modules.perf.enums.WorkStatusEnum
+	      case 1:
+	        return allWorkStatusList(workstations);
+	      case 2:
+	        return onWorkStatusList(workstations, OnOffWorkEnum.WILL_OFF.getCode());
+	      case 3:
+	        return offWorkStatusList(workstations, OnOffWorkEnum.WILL_OFF.getCode());
+	      case 4:
+	        return currentEmployeeWork(workstations);
+	    } 
+	    return Lists.newArrayList();
+	  }
+	  
+	  public EmployeeVO currentEmployee() {
+	    return this.employeeService.currentEmployee(AuthUtil.getUserId());
+	  }
+	  
+	  public Boolean batchOnOffWorkstation(BatchOnWorkVO vo) {
+	    Integer type = vo.getType();
+	    List<Long> workstationIds = (List<Long>)vo.getWorks().stream().map(WorkstationBO::getId).collect(Collectors.toList());
+	    EmployeeCache.clearPerfCache(workstationIds);
+	    switch ($SwitchMap$com$qianwen$smartman$modules$perf$enums$WorkStatusEnum[OnOffWorkEnum.of(type).ordinal()]) {
+	      case 1:
+	        batchOnWorkstation(vo);
+	        break;
+	      case 2:
+	        batchOffWorkstation(vo);
+	        break;
+	    } 
+	    this.employeeSendService.sendMessageRocket(workstationIds);
+	    return Boolean.valueOf(true);
+	  }
+	  
+	  public List<GroupTreeVO> willOnWork() {
+	    List<GroupTreeVO> children = ((EmployeeOnOffWorkMapper)this.baseMapper).willOnWork(OnOffWorkEnum.WILL_OFF.getCode());
+	    CommonGroupTypeVO commonGroupType = (new CommonGroupTypeVO()).setGroupType(CommonGroupTypeEnum.WORKSTATION.getName()).setGroupCategory(CommonGroupConstant.DEFAULT_CATEGORY);
+	    return TreeUtils.allGroupTree(commonGroupType, children);
+	  }
+	  
+	  public List<OffEmployeeTreeVO> willOffWork() {
+	    List<OffEmployeeTreeVO> children = ((EmployeeOnOffWorkMapper)this.baseMapper).willOffWork(OnOffWorkEnum.WILL_OFF.getCode());
+	    CommonGroupTypeVO commonGroupType = (new CommonGroupTypeVO()).setGroupType(CommonGroupTypeEnum.WORKSTATION.getName()).setGroupCategory(CommonGroupConstant.DEFAULT_CATEGORY);
+	    return TreeUtils.allGroupTreeOff(commonGroupType, children);
+	  }
+	  
+	  public IPage<EmployeeOnOffWorkVO> queryOnOffLog(QueryEmployeeLogVO vo) {
+	    IPage<EmployeeOnOffWork> page;
+	    if (Func.isEmpty(vo.getWorkstationIds()))
+	      return (IPage<EmployeeOnOffWorkVO>)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()))
+	          .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 });
+	        	  }));
+	    } 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)))
+	          
+	          .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()
+	        .map(com.qianwen.smartman.modules.perf.service.impl.EmployeeOnOffWorkServiceImpl::convertWork)
+	        .collect(Collectors.toList()));
+	    return (IPage<EmployeeOnOffWorkVO>)page1;
+	  }
+	  
+	  public List<WorkstationBO> employeeWork(SearchEmployeeWorkVO vo) {
+	    List<EmployeeOnOffWork> works;
+	    String dbType = SpringUtil.getContext().getEnvironment().getProperty("datasource.type");
+	    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 })));
+	    } else {
+	      works = list((Wrapper)Lambda.eq(EmployeeOnOffWork::getOnEmployeeId, vo.getEmployeeId())
+	          .between(EmployeeOnOffWork::getOnlineTime, startTime, endTime));
+	    } 
+	    if (Func.isEmpty(works))
+	      return Lists.newArrayList(); 
+	    return (List<WorkstationBO>)works.stream()
+	      .map(w -> WorkstationBO.builder().id(w.getWorkstationId()).workstationCode(w.getWorkstationCode()).workstationName(w.getWorkstationName()).build())
+	      
+	      .filter(DistinctKeyUtil.distinctByKey(WorkstationBO::getId))
+	      .collect(Collectors.toList());
+	  }
+	  
+	  public List<EmployeeVO> workEmployee(SearchWorkEmployeeVO vo) {
+	    List<EmployeeOnOffWork> works;
+	    String dbType = SpringUtil.getContext().getEnvironment().getProperty("datasource.type");
+	    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 })));
+	    } else {
+	      works = list((Wrapper)Lambda.eq(EmployeeOnOffWork::getWorkstationId, vo.getWorkstationId())
+	          .between(EmployeeOnOffWork::getOnlineTime, startTime, endTime));
+	    } 
+	    if (Func.isEmpty(works))
+	      return Lists.newArrayList(); 
+	    return (List<EmployeeVO>)works.stream()
+	      .map(w -> {
+	          EmployeeVO res = new EmployeeVO();
+	          res.setId(w.getOnEmployeeId());
+	          res.setCode(w.getOnEmployeeCode());
+	          res.setName(w.getOnEmployeeName());
+	          return res;
+	        }).filter(DistinctKeyUtil.distinctByKey(EmployeeVO::getId))
+	      .collect(Collectors.toList());
+	  }
+	  
+	  public List<CurrWorkDetailVO> currWorkLog(CurrWorkLogVO vo) {
+	    return ((EmployeeOnOffWorkMapper)this.baseMapper).currWorkLog(vo.getWorkstationId());
+	  }
+	  
+	  public void currentEmployeeWork(String employeeId, String workstationId) {
+		
+	    List<EmployeeOnOffWork> currEmployeeId = list((Wrapper)((LambdaQueryWrapper)Wrappers.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))
+	        .eq(EmployeeOnOffWork::getOnlineType, OnOffWorkEnum.WILL_OFF.getCode()));
+	    if (Func.isNotEmpty(works))
+	      throw new ServiceException(MessageUtils.message("perf.current.work.login", new Object[0])); 
+	    
+	  }
+	  
+	  private List<EmployeeWorkStatusVO> allWorkStatusList(List<WorkstationBO> workstations) {
+	    Map<Long, Workstation> workstationMap = workstationMap();
+	    List<Long> wIds = (List<Long>)workstations.stream().map(WorkstationBO::getId).collect(Collectors.toList());
+	    List<EmployeeOnOffWork> works = ((EmployeeOnOffWorkMapper)this.baseMapper).queryWork(wIds, null);
+	    Map<Long, EmployeeOnOffWork> onOffWorkMap = (Map<Long, EmployeeOnOffWork>)works.stream().collect(Collectors.toMap(EmployeeOnOffWork::getWorkstationId, v -> v));
+	    return (List<EmployeeWorkStatusVO>)workstations.stream()
+	      .map(c -> {
+	          Long workstationId = c.getId();
+	          Workstation workstation = (Workstation)workstationMap.get(workstationId);
+	          if (Func.isNull(workstation))
+	            return null; 
+	          EmployeeOnOffWork employeeOnOffWork = (EmployeeOnOffWork)onOffWorkMap.get(workstationId);
+	          EmployeeWorkStatusVO res = EmployeeWorkStatusVO.builder().onType(OnOffWorkEnum.WILL_ON.getCode()).workstationId(workstationId).workstationCode(workstation.getCode()).workstationName(workstation.getName()).avatar(workstation.getAvatar()).build();
+	          if (Func.isNull(employeeOnOffWork) || employeeOnOffWork.getOnlineType().equals(OnOffWorkEnum.WILL_ON.getCode()))
+	            return res; 
+	          res.setId(employeeOnOffWork.getId());
+	          res.setOnType(employeeOnOffWork.getOnlineType());
+	          res.setOnEmployeeId(employeeOnOffWork.getOnEmployeeId());
+	          res.setOnEmployeeCode(employeeOnOffWork.getOnEmployeeCode());
+	          res.setOnEmployeeName(employeeOnOffWork.getOnEmployeeName());
+	          res.setOnEmployeeAvatar(employeeOnOffWork.getOnEmployeeAvatar());
+	          res.setOnlineTime(employeeOnOffWork.getOnlineTime());
+	          return res;
+	        }).filter(Func::notNull)
+	      .collect(Collectors.toList());
+	  }
+	  
+	  private List<EmployeeWorkStatusVO> onWorkStatusList(List<WorkstationBO> workstations, Integer onType) {
+	    List<Long> wIds = (List<Long>)workstations.stream().map(WorkstationBO::getId).collect(Collectors.toList());
+	    List<EmployeeOnOffWork> works = ((EmployeeOnOffWorkMapper)this.baseMapper).queryWork(wIds, onType);
+	    if (Func.isEmpty(works))
+	      return Lists.newArrayList(); 
+	    return (List<EmployeeWorkStatusVO>)works.stream()
+	      .map(com.qianwen.smartman.modules.perf.service.impl.EmployeeOnOffWorkServiceImpl::convert)
+	      .collect(Collectors.toList());
+	  }
+	  
+	  private List<EmployeeWorkStatusVO> offWorkStatusList(List<WorkstationBO> workstations, Integer onType) {
+	    Map<Long, Workstation> workstationMap = workstationMap();
+	    List<Long> wIds = (List<Long>)workstations.stream().map(WorkstationBO::getId).collect(Collectors.toList());
+	    List<EmployeeOnOffWork> works = ((EmployeeOnOffWorkMapper)this.baseMapper).queryWork(wIds, onType);
+	    Set<Long> workstationIds = (Set<Long>)works.stream().map(EmployeeOnOffWork::getWorkstationId).collect(Collectors.toSet());
+	    return (List<EmployeeWorkStatusVO>)workstations.stream()
+	      .filter(c -> !workstationIds.contains(c.getId()))
+	      .map(c -> {
+	          Long workstationId = c.getId();
+	          Workstation workstation = (Workstation)workstationMap.get(workstationId);
+	          return Func.isNull(workstation) ? null : EmployeeWorkStatusVO.builder().onType(OnOffWorkEnum.WILL_ON.getCode()).workstationId(workstationId).workstationCode(workstation.getCode()).workstationName(workstation.getName()).avatar(workstation.getAvatar()).build();
+	        }).filter(Func::notNull)
+	      .collect(Collectors.toList());
+	  }
+	  
+	  private List<EmployeeWorkStatusVO> currentEmployeeWork(List<WorkstationBO> workstations) {
+	    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()))
+	        .eq(EmployeeOnOffWork::getOnlineType, OnOffWorkEnum.WILL_OFF.getCode()));
+	    if (Func.isEmpty(works))
+	      return Lists.newArrayList(); 
+	    Map<Long, Workstation> workMap = workstationMap();
+	    return (List<EmployeeWorkStatusVO>)works.stream()
+	      .map(w -> {
+	          EmployeeWorkStatusVO vo = convert(w);
+	          Workstation workstation = (Workstation)workMap.get(w.getWorkstationId());
+	          if (Func.isNull(workstation))
+	            return null; 
+	          vo.setAvatar(workstation.getAvatar());
+	          return vo;
+	        }).filter(Func::notNull)
+	      .collect(Collectors.toList());
+	  }
+	  
+	  private static EmployeeWorkStatusVO convert(EmployeeOnOffWork work) {
+	    return EmployeeWorkStatusVO.builder()
+	      .id(work.getId())
+	      .onType(work.getOnlineType())
+	      .onEmployeeId(work.getOnEmployeeId())
+	      .onEmployeeCode(work.getOnEmployeeCode())
+	      .onEmployeeName(work.getOnEmployeeName())
+	      .onEmployeeAvatar(work.getOnEmployeeAvatar())
+	      .workstationId(work.getWorkstationId())
+	      .workstationCode(work.getWorkstationCode())
+	      .workstationName(work.getWorkstationName())
+	      .onlineTime(work.getOnlineTime())
+	      .build();
+	  }
+	  
+	  private static EmployeeOnOffWorkVO convertWork(EmployeeOnOffWork work) {
+	    return EmployeeOnOffWorkVO.builder()
+	      .id(work.getId())
+	      .employeeId(work.getOnEmployeeId())
+	      .employeeName(work.getOnEmployeeName())
+	      .employeeCode(work.getOnEmployeeCode())
+	      .workstationId(work.getWorkstationId())
+	      .workstationCode(work.getWorkstationCode())
+	      .workstationName(work.getWorkstationName())
+	      .onlineTime(work.getOnlineTime())
+	      .offlineTime(work.getOfflineTime())
+	      .createTime(work.getCreateTime())
+	      .build();
+	  }
+	  
+	  private void batchOnWorkstation(BatchOnWorkVO vo) {
+	    List<WorkstationBO> works = vo.getWorks();
+	    List<EmployeeOnOffWork> onOffWorks = (List<EmployeeOnOffWork>)works.stream().map(w -> convertWork(vo, w)).collect(Collectors.toList());
+	    saveBatch(onOffWorks);
+	  }
+	  
+	  private void batchOffWorkstation(BatchOnWorkVO vo) {
+	    List<WorkstationBO> works = vo.getWorks();
+	    List<EmployeeOnOffWork> offWorks = (List<EmployeeOnOffWork>)works.stream().map(w -> {
+	          EmployeeOnOffWork work = (new EmployeeOnOffWork()).setOffEmployeeId(vo.getEmployeeId()).setOffEmployeeCode(vo.getEmployeeCode()).setOffEmployeeName(vo.getEmployeeName()).setOffEmployeeAvatar(vo.getEmployeeAvatar()).setOnlineType(OnOffWorkEnum.WILL_ON.getCode()).setOfflineTime(vo.getTime());
+	          work.setId(w.getLogId());
+	          return work;
+	        }).collect(Collectors.toList());
+	    updateBatchById(offWorks);
+	  }
+	  
+	  private EmployeeOnOffWork convertWork(BatchOnWorkVO vo, WorkstationBO work) {
+	    return (new EmployeeOnOffWork())
+	      .setOnlineTime(vo.getTime())
+	      .setOnEmployeeId(vo.getEmployeeId())
+	      .setOnEmployeeName(vo.getEmployeeName())
+	      .setOnEmployeeCode(vo.getEmployeeCode())
+	      .setOnEmployeeAvatar(vo.getEmployeeAvatar())
+	      .setWorkstationId(work.getId())
+	      .setWorkstationName(work.getWorkstationName())
+	      .setWorkstationCode(work.getWorkstationCode())
+	      .setWorkstationAvatar(work.getAvatar())
+	      .setOnlineType(OnOffWorkEnum.WILL_OFF.getCode());
+	  }
+	  
+	  private Map<Long, Workstation> workstationMap() {
+	    List<Workstation> workstations = this.workstationService.list();
+	    return (Map<Long, Workstation>)workstations.stream().collect(Collectors.toMap(BaseEntity::getId, v -> v));
+	  }
+	}

--
Gitblit v1.9.3