diff --git a/log/sdk.log b/log/sdk.log index 948c08f..943377c 100644 --- a/log/sdk.log +++ b/log/sdk.log @@ -8,3 +8,459 @@ 2023-10-27 16:45:00,661 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]] 2023-11-12 21:59:10,226 [Timer-0] [A2] [INFO] - rootPath == null 2023-11-12 21:59:10,226 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties +2023-11-14 14:24:04,107 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(SERVICE-METHOD) dynamic proxy... +2023-11-14 14:24:04,116 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - +>> target:com.engine.workflow.service.impl.WorkflowTypeServiceImpl.doSaveOperation(java.util.Map,weaver.hrm.User) +>> proxy:->com.engine.plugin.workflow.service.CustomWorkflowTypeService->com.engine.plugin.workflow.service.CustomWorkflowTypeService2->com.engine.plugin.workflow.service.CustomWorkflowTypeService3->com.engine.plugin.workflow.service.CustomWorkflowTypeService4 +2023-11-14 14:24:04,116 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(COMMAND) dynamic proxy... +2023-11-14 14:24:04,120 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - +>> target:com.engine.workplan.cmd.workplanBase.BeforeWorkplanDelCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyDeleteWorkPlanCmd +>> target:com.engine.workflow.cmd.signInput.GetNodeSignSetCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.GetOdocSignInputSetCmd +>> target:com.engine.workflow.cmd.workflowPath.node.GetNodeRightInfo +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeRightInfo +>> target:com.engine.workflow.cmd.requestForm.RequestSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestSubmitCmd->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRequestCmd->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSubmitProxyCmd +>> target:com.engine.workflow.cmd.workflowPath.list.GetWorkflowListConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.list.GetAddOdocWFFormCmd +>> target:com.engine.workflow.cmd.workflowPath.node.DoSaveNodeCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuDoSaveNodeCmd->com.engine.plugin.odoc.command.workflowPath.node.DeleteOdocNodeCfgCmd +>> target:com.engine.workflow.cmd.workflowPath.node.addInOperate.GetAddInOperateConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetAddInOperateConditionCmd +>> target:com.engine.crm.cmd.chance.FormUpdateCmd +>> proxy:->com.customization.esb.crm.chance.ProxyEditChanceCmd +>> target:com.engine.crm.cmd.customer.CustomerSaveCmd +>> proxy:->com.customization.esb.crm.customer.ProxyNewCustomerCmd +>> target:com.engine.workplan.cmd.workplanBase.AfterWorkplanNormalCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyAfterWorkplanNormalCmd +>> target:com.engine.workflow.cmd.requestForm.BatchSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeBatchCmd +>> target:com.api.prj.cmd.prjBoard.DoDelBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoDelBoardStageCmd +>> target:com.engine.workflow.cmd.workflowPath.nodeLink.SaveNodeLinkCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.nodeLink.DeleteOdocNodelinkExtCmd +>> target:com.engine.cube.cmd.app.WaterMarkImg +>> proxy:->com.customization.cube.list.CustomChangeListHrefLinkCmd +>> target:com.engine.crm.cmd.customer.CustomerEditCmd +>> proxy:->com.customization.esb.crm.customer.ProxyEditCustomerCmd +>> target:com.engine.meeting.cmd.meetingbase.NewMeetingCmd +>> proxy:->com.customization.esb.meeting.meetingbase.ProxyNewMeetingCmd +>> target:com.engine.workflow.cmd.signInput.GetSignInputInfoCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestSignInput.OdocSignInputCmd +>> target:com.engine.cube.cmd.app.GetAppListCmd +>> proxy:->com.engine.plugin.mode.license.Proxy_GetAppListCmd +>> target:com.api.prj.cmd.project.DoProjectOperationCmd +>> proxy:->com.customization.esb.proj.project.ProxyDoProjectOperationCmd +>> target:com.engine.workflowDesign.cmd.WorkflowXmlParserCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicCmd +>> target:com.api.prj.cmd.project.DoPrjTempletStageSaveCmd +>> proxy:->com.customization.esb.proj.project.ProxySavePrjTempletStageCmd +>> target:com.engine.workflow.cmd.requestForm.DoTakEndCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSIgnReceiveTimeDoTakEndCmd +>> target:com.engine.crm.cmd.contacter.CreateCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyNewContacterCmd +>> target:com.engine.workflow.cmd.requestForm.GetRightMenuCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.GetOdocRightMenuCmd->com.engine.plugin.odoc.command.odoRightMenuSetForm.OdocRightMenuBtnCmd->com.engine.plugin.workflow.command.qiyuesuo.QYSRightMenuCmd +>> target:com.engine.workflowDesign.cmd.GetOperateDataCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicOperatorCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocSaveMenuSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocSaveMenuSettingsCmd +>> target:com.engine.odoc.cmd.odocMenuOperate.doEndPersonTreatCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeEndTreatCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.GetBaseInfoConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.GetBaseInfoSettingCmd +>> target:com.engine.workflow.cmd.workflowPath.node.signSet.DoSignSetSaveCmd +>> proxy:->com.engine.plugin.workflow.command.CustomDoSignSetSaveCmd +>> target:com.engine.crm.cmd.chance.DeleteCmd +>> proxy:->com.customization.esb.crm.chance.ProxyDeleteChanceCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetMenuSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetMenuSettingsCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetActionSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetActionSettingsCmd +>> target:com.engine.odoc.cmd.odocrequest.FlowNextCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeFlowCmd +>> target:com.engine.workflow.cmd.workflowType.DoSaveCmd +>> proxy:->com.engine.plugin.workflow.command.CustomDoSave2Cmd->com.engine.plugin.workflow.command.CustomDoSave3Cmd->com.engine.plugin.workflow.command.CustomDoSaveCmd +>> target:com.engine.workflowDesign.cmd.GetWfInfoCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetWfInfoCmd->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetWfInfoCmd +>> target:com.engine.workflow.cmd.workflowPath.node.GetNodeSessionkeyCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuCmd +>> target:com.engine.crm.cmd.contacter.DeleteCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyDeleteContacterCmd +>> target:com.engine.odoc.cmd.odocrequest.ForceArchiveCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForceArchiveCmd +>> target:com.engine.meeting.cmd.meetingField.GetViewMeetingFieldCmd +>> proxy:->com.customization.meeting.qc854537.CustomGetViewMeetingFieldCmd +>> target:com.api.common.cmd.login.DoUserSessionCmd +>> proxy:->com.engine.plugin.hrm.command.MyDoUserSessionCmd +>> target:com.engine.hrm.cmd.test.GetSearchConditionCmd +>> proxy:->com.engine.plugin.hrm.command.GetMySearchConditionCmd +>> target:com.engine.crm.cmd.chance.FormSaveCmd +>> proxy:->com.customization.esb.crm.chance.ProxyNewChanceCmd +>> target:com.engine.crm.cmd.customer.CrmDeleteCmd +>> proxy:->com.customization.esb.crm.customer.ProxyDeleteCustomerCmd +>> target:com.engine.workflow.cmd.workflowPath.node.addInOperate.GetPreAddInOperateConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetPreAddInOperateConditionCmd +>> target:com.api.prj.cmd.prjBoard.DoEditBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoEditBoardStageCmd +>> target:com.engine.odoc.cmd.updateSign.setting.SelectFreeFlowDatasCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowIsFree4OdocProxyCmd +>> target:com.engine.odoc.cmd.updateOperator.PlusSignatureCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAddDelCmd +>> target:com.api.prj.cmd.prjBoard.DoAddBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoAddBoardStageCmd +>> target:com.engine.workflow.cmd.requestForm.RequestManager_FlowNextNodeCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestNextNodeCmd +>> target:com.engine.odoc.cmd.odocWorkflow.OdocAddWorkflowCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignAddWorkflowCmd +>> target:com.engine.workflow.cmd.requestForm.RemarkSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRemarkCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoAddWFCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.SaveAddWFCmd +>> target:com.engine.workflow.cmd.workflowPath.nodeLink.GetNodeLinkCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeLinkCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoSaveNewVersionCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSaveNewVersionTabCmd->com.engine.plugin.odoc.command.workflowPath.SaveNewVersionCmd +>> target:com.engine.workplan.cmd.workplanBase.AddAndEditWorkPlanCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyAddAndEditWorkPlanCmd +>> target:com.engine.workflow.cmd.requestForm.WFManager_SaveNewNodeCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowWFManager_SaveNewNodeCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoEditWFCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.SaveEditWFCmd +>> target:com.engine.workflow.cmd.requestLog.LoadRequestLogBaseInfoCmd +>> proxy:->com.engine.plugin.workflow.command.CustomLoadRequestLogBaseInfoCmd +>> target:com.engine.workflow.cmd.workflowPath.node.DoRestoreDeleteNodeCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.node.RestoreOdocNodeCfgCmd +>> target:com.engine.workflow.cmd.monitor.DoDeleteCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocWorkflowDeleteProxyCmd +>> target:com.engine.meeting.cmd.meetingbase.MeetingCancelCmd +>> proxy:->com.customization.esb.meeting.meetingbase.ProxyCancelMeetingCmd +>> target:com.engine.odoc.cmd.updateSign.append.AppendSaveLogCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAppendSignCmd +>> target:com.api.prj.cmd.task.DoTaskOperationCmd +>> proxy:->com.customization.esb.proj.task.ProxyDoTaskOperationCmd +>> target:com.engine.workflow.cmd.requestForm.LoadParamCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.LoadOdocFormParam->com.engine.plugin.workflow.command.HaoQianPromptInfoCmd +>> target:com.engine.crm.cmd.contacter.EditCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyEditContacterCmd +>> target:com.engine.workflow.cmd.requestForm.ForwardSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForwardCmd +>> target:com.engine.workflow.cmd.requestForm.GetFormTabCmd +>> proxy:->com.engine.plugin.fna.command.FnaElectronicDepositFormTopTabCmd->com.engine.plugin.odoc.command.signSetting.OdocWorkflowTabManagerCmd->com.engine.plugin.workflow.command.ContractLockFormTopTabCmd +>> target:com.engine.workflowDesign.cmd.DoSaveLayout +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocDoSaveLayoutCmd +2023-11-14 14:24:04,122 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - The business class dynamic proxy is loaded. +2023-11-14 14:26:44,457 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(SERVICE-METHOD) dynamic proxy... +2023-11-14 14:26:44,460 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - +>> target:com.engine.workflow.service.impl.WorkflowTypeServiceImpl.doSaveOperation(java.util.Map,weaver.hrm.User) +>> proxy:->com.engine.plugin.workflow.service.CustomWorkflowTypeService->com.engine.plugin.workflow.service.CustomWorkflowTypeService2->com.engine.plugin.workflow.service.CustomWorkflowTypeService3->com.engine.plugin.workflow.service.CustomWorkflowTypeService4 +2023-11-14 14:26:44,461 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(COMMAND) dynamic proxy... +2023-11-14 14:26:44,466 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - +>> target:com.engine.workplan.cmd.workplanBase.BeforeWorkplanDelCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyDeleteWorkPlanCmd +>> target:com.engine.workflow.cmd.signInput.GetNodeSignSetCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.GetOdocSignInputSetCmd +>> target:com.engine.workflow.cmd.workflowPath.node.GetNodeRightInfo +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeRightInfo +>> target:com.engine.workflow.cmd.requestForm.RequestSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestSubmitCmd->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRequestCmd->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSubmitProxyCmd +>> target:com.engine.workflow.cmd.workflowPath.list.GetWorkflowListConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.list.GetAddOdocWFFormCmd +>> target:com.engine.workflow.cmd.workflowPath.node.DoSaveNodeCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuDoSaveNodeCmd->com.engine.plugin.odoc.command.workflowPath.node.DeleteOdocNodeCfgCmd +>> target:com.engine.workflow.cmd.workflowPath.node.addInOperate.GetAddInOperateConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetAddInOperateConditionCmd +>> target:com.engine.crm.cmd.chance.FormUpdateCmd +>> proxy:->com.customization.esb.crm.chance.ProxyEditChanceCmd +>> target:com.engine.crm.cmd.customer.CustomerSaveCmd +>> proxy:->com.customization.esb.crm.customer.ProxyNewCustomerCmd +>> target:com.engine.workplan.cmd.workplanBase.AfterWorkplanNormalCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyAfterWorkplanNormalCmd +>> target:com.engine.workflow.cmd.requestForm.BatchSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeBatchCmd +>> target:com.api.prj.cmd.prjBoard.DoDelBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoDelBoardStageCmd +>> target:com.engine.workflow.cmd.workflowPath.nodeLink.SaveNodeLinkCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.nodeLink.DeleteOdocNodelinkExtCmd +>> target:com.engine.cube.cmd.app.WaterMarkImg +>> proxy:->com.customization.cube.list.CustomChangeListHrefLinkCmd +>> target:com.engine.crm.cmd.customer.CustomerEditCmd +>> proxy:->com.customization.esb.crm.customer.ProxyEditCustomerCmd +>> target:com.engine.meeting.cmd.meetingbase.NewMeetingCmd +>> proxy:->com.customization.esb.meeting.meetingbase.ProxyNewMeetingCmd +>> target:com.engine.workflow.cmd.signInput.GetSignInputInfoCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestSignInput.OdocSignInputCmd +>> target:com.engine.cube.cmd.app.GetAppListCmd +>> proxy:->com.engine.plugin.mode.license.Proxy_GetAppListCmd +>> target:com.api.prj.cmd.project.DoProjectOperationCmd +>> proxy:->com.customization.esb.proj.project.ProxyDoProjectOperationCmd +>> target:com.engine.workflowDesign.cmd.WorkflowXmlParserCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicCmd +>> target:com.api.prj.cmd.project.DoPrjTempletStageSaveCmd +>> proxy:->com.customization.esb.proj.project.ProxySavePrjTempletStageCmd +>> target:com.engine.workflow.cmd.requestForm.DoTakEndCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSIgnReceiveTimeDoTakEndCmd +>> target:com.engine.crm.cmd.contacter.CreateCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyNewContacterCmd +>> target:com.engine.workflow.cmd.requestForm.GetRightMenuCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.GetOdocRightMenuCmd->com.engine.plugin.odoc.command.odoRightMenuSetForm.OdocRightMenuBtnCmd->com.engine.plugin.workflow.command.qiyuesuo.QYSRightMenuCmd +>> target:com.engine.workflowDesign.cmd.GetOperateDataCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicOperatorCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocSaveMenuSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocSaveMenuSettingsCmd +>> target:com.engine.odoc.cmd.odocMenuOperate.doEndPersonTreatCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeEndTreatCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.GetBaseInfoConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.GetBaseInfoSettingCmd +>> target:com.engine.workflow.cmd.workflowPath.node.signSet.DoSignSetSaveCmd +>> proxy:->com.engine.plugin.workflow.command.CustomDoSignSetSaveCmd +>> target:com.engine.crm.cmd.chance.DeleteCmd +>> proxy:->com.customization.esb.crm.chance.ProxyDeleteChanceCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetMenuSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetMenuSettingsCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetActionSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetActionSettingsCmd +>> target:com.engine.odoc.cmd.odocrequest.FlowNextCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeFlowCmd +>> target:com.engine.workflow.cmd.workflowType.DoSaveCmd +>> proxy:->com.engine.plugin.workflow.command.CustomDoSave2Cmd->com.engine.plugin.workflow.command.CustomDoSave3Cmd->com.engine.plugin.workflow.command.CustomDoSaveCmd +>> target:com.engine.workflowDesign.cmd.GetWfInfoCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetWfInfoCmd->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetWfInfoCmd +>> target:com.engine.workflow.cmd.workflowPath.node.GetNodeSessionkeyCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuCmd +>> target:com.engine.crm.cmd.contacter.DeleteCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyDeleteContacterCmd +>> target:com.engine.odoc.cmd.odocrequest.ForceArchiveCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForceArchiveCmd +>> target:com.engine.meeting.cmd.meetingField.GetViewMeetingFieldCmd +>> proxy:->com.customization.meeting.qc854537.CustomGetViewMeetingFieldCmd +>> target:com.api.common.cmd.login.DoUserSessionCmd +>> proxy:->com.engine.plugin.hrm.command.MyDoUserSessionCmd +>> target:com.engine.hrm.cmd.test.GetSearchConditionCmd +>> proxy:->com.engine.plugin.hrm.command.GetMySearchConditionCmd +>> target:com.engine.crm.cmd.chance.FormSaveCmd +>> proxy:->com.customization.esb.crm.chance.ProxyNewChanceCmd +>> target:com.engine.crm.cmd.customer.CrmDeleteCmd +>> proxy:->com.customization.esb.crm.customer.ProxyDeleteCustomerCmd +>> target:com.engine.workflow.cmd.workflowPath.node.addInOperate.GetPreAddInOperateConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetPreAddInOperateConditionCmd +>> target:com.api.prj.cmd.prjBoard.DoEditBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoEditBoardStageCmd +>> target:com.engine.odoc.cmd.updateSign.setting.SelectFreeFlowDatasCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowIsFree4OdocProxyCmd +>> target:com.engine.odoc.cmd.updateOperator.PlusSignatureCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAddDelCmd +>> target:com.api.prj.cmd.prjBoard.DoAddBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoAddBoardStageCmd +>> target:com.engine.workflow.cmd.requestForm.RequestManager_FlowNextNodeCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestNextNodeCmd +>> target:com.engine.odoc.cmd.odocWorkflow.OdocAddWorkflowCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignAddWorkflowCmd +>> target:com.engine.workflow.cmd.requestForm.RemarkSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRemarkCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoAddWFCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.SaveAddWFCmd +>> target:com.engine.workflow.cmd.workflowPath.nodeLink.GetNodeLinkCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeLinkCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoSaveNewVersionCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSaveNewVersionTabCmd->com.engine.plugin.odoc.command.workflowPath.SaveNewVersionCmd +>> target:com.engine.workplan.cmd.workplanBase.AddAndEditWorkPlanCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyAddAndEditWorkPlanCmd +>> target:com.engine.workflow.cmd.requestForm.WFManager_SaveNewNodeCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowWFManager_SaveNewNodeCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoEditWFCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.SaveEditWFCmd +>> target:com.engine.workflow.cmd.requestLog.LoadRequestLogBaseInfoCmd +>> proxy:->com.engine.plugin.workflow.command.CustomLoadRequestLogBaseInfoCmd +>> target:com.engine.workflow.cmd.workflowPath.node.DoRestoreDeleteNodeCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.node.RestoreOdocNodeCfgCmd +>> target:com.engine.workflow.cmd.monitor.DoDeleteCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocWorkflowDeleteProxyCmd +>> target:com.engine.meeting.cmd.meetingbase.MeetingCancelCmd +>> proxy:->com.customization.esb.meeting.meetingbase.ProxyCancelMeetingCmd +>> target:com.engine.odoc.cmd.updateSign.append.AppendSaveLogCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAppendSignCmd +>> target:com.api.prj.cmd.task.DoTaskOperationCmd +>> proxy:->com.customization.esb.proj.task.ProxyDoTaskOperationCmd +>> target:com.engine.workflow.cmd.requestForm.LoadParamCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.LoadOdocFormParam->com.engine.plugin.workflow.command.HaoQianPromptInfoCmd +>> target:com.engine.crm.cmd.contacter.EditCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyEditContacterCmd +>> target:com.engine.workflow.cmd.requestForm.ForwardSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForwardCmd +>> target:com.engine.workflow.cmd.requestForm.GetFormTabCmd +>> proxy:->com.engine.plugin.fna.command.FnaElectronicDepositFormTopTabCmd->com.engine.plugin.odoc.command.signSetting.OdocWorkflowTabManagerCmd->com.engine.plugin.workflow.command.ContractLockFormTopTabCmd +>> target:com.engine.workflowDesign.cmd.DoSaveLayout +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocDoSaveLayoutCmd +2023-11-14 14:26:44,466 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - The business class dynamic proxy is loaded. +2023-11-14 14:27:56,979 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 14:46:05,762 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 14:48:48,000 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 14:49:43,965 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 14:50:12,299 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 14:53:06,688 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 14:53:41,433 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 14:55:13,333 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}]] +2023-11-14 15:01:16,977 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:01:54,174 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:04:48,162 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:05:07,455 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=00:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:05:35,975 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:06:51,375 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=00:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:07:04,514 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:07:15,534 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:10:09,112 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:10:55,427 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:12:35,329 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:14:48,449 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:22:21,982 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:22:52,639 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:24:03,543 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:25:56,754 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 15:26:54,653 [main] [com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd] [INFO] - needGetDate : [2023-11-12],resultList : [[{signtime=01:20:00, id=48, userid=53, signdate=2023-11-12}, {signtime=09:15:00, id=48, userid=53, signdate=2023-11-12}, {signtime=12:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=18:17:00, id=49, userid=53, signdate=2023-11-12}, {signtime=01:17:00, id=49, userid=53, signdate=2023-11-13}]] +2023-11-14 18:08:42,728 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(SERVICE-METHOD) dynamic proxy... +2023-11-14 18:08:42,730 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - +>> target:com.engine.workflow.service.impl.WorkflowTypeServiceImpl.doSaveOperation(java.util.Map,weaver.hrm.User) +>> proxy:->com.engine.plugin.workflow.service.CustomWorkflowTypeService->com.engine.plugin.workflow.service.CustomWorkflowTypeService2->com.engine.plugin.workflow.service.CustomWorkflowTypeService3->com.engine.plugin.workflow.service.CustomWorkflowTypeService4 +2023-11-14 18:08:42,730 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(COMMAND) dynamic proxy... +2023-11-14 18:08:42,730 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - +>> target:com.engine.workplan.cmd.workplanBase.BeforeWorkplanDelCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyDeleteWorkPlanCmd +>> target:com.engine.workflow.cmd.signInput.GetNodeSignSetCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.GetOdocSignInputSetCmd +>> target:com.engine.workflow.cmd.workflowPath.node.GetNodeRightInfo +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeRightInfo +>> target:com.engine.workflow.cmd.requestForm.RequestSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestSubmitCmd->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRequestCmd->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSubmitProxyCmd +>> target:com.engine.workflow.cmd.workflowPath.list.GetWorkflowListConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.list.GetAddOdocWFFormCmd +>> target:com.engine.workflow.cmd.workflowPath.node.DoSaveNodeCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuDoSaveNodeCmd->com.engine.plugin.odoc.command.workflowPath.node.DeleteOdocNodeCfgCmd +>> target:com.engine.workflow.cmd.workflowPath.node.addInOperate.GetAddInOperateConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetAddInOperateConditionCmd +>> target:com.engine.crm.cmd.chance.FormUpdateCmd +>> proxy:->com.customization.esb.crm.chance.ProxyEditChanceCmd +>> target:com.engine.crm.cmd.customer.CustomerSaveCmd +>> proxy:->com.customization.esb.crm.customer.ProxyNewCustomerCmd +>> target:com.engine.workplan.cmd.workplanBase.AfterWorkplanNormalCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyAfterWorkplanNormalCmd +>> target:com.engine.workflow.cmd.requestForm.BatchSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeBatchCmd +>> target:com.api.prj.cmd.prjBoard.DoDelBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoDelBoardStageCmd +>> target:com.engine.workflow.cmd.workflowPath.nodeLink.SaveNodeLinkCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.nodeLink.DeleteOdocNodelinkExtCmd +>> target:com.engine.cube.cmd.app.WaterMarkImg +>> proxy:->com.customization.cube.list.CustomChangeListHrefLinkCmd +>> target:com.engine.crm.cmd.customer.CustomerEditCmd +>> proxy:->com.customization.esb.crm.customer.ProxyEditCustomerCmd +>> target:com.engine.meeting.cmd.meetingbase.NewMeetingCmd +>> proxy:->com.customization.esb.meeting.meetingbase.ProxyNewMeetingCmd +>> target:com.engine.workflow.cmd.signInput.GetSignInputInfoCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestSignInput.OdocSignInputCmd +>> target:com.engine.cube.cmd.app.GetAppListCmd +>> proxy:->com.engine.plugin.mode.license.Proxy_GetAppListCmd +>> target:com.api.prj.cmd.project.DoProjectOperationCmd +>> proxy:->com.customization.esb.proj.project.ProxyDoProjectOperationCmd +>> target:com.engine.workflowDesign.cmd.WorkflowXmlParserCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicCmd +>> target:com.api.prj.cmd.project.DoPrjTempletStageSaveCmd +>> proxy:->com.customization.esb.proj.project.ProxySavePrjTempletStageCmd +>> target:com.engine.workflow.cmd.requestForm.DoTakEndCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSIgnReceiveTimeDoTakEndCmd +>> target:com.engine.crm.cmd.contacter.CreateCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyNewContacterCmd +>> target:com.engine.workflow.cmd.requestForm.GetRightMenuCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.GetOdocRightMenuCmd->com.engine.plugin.odoc.command.odoRightMenuSetForm.OdocRightMenuBtnCmd->com.engine.plugin.workflow.command.qiyuesuo.QYSRightMenuCmd +>> target:com.engine.workflowDesign.cmd.GetOperateDataCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicOperatorCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocSaveMenuSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocSaveMenuSettingsCmd +>> target:com.engine.odoc.cmd.odocMenuOperate.doEndPersonTreatCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeEndTreatCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.GetBaseInfoConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.GetBaseInfoSettingCmd +>> target:com.engine.workflow.cmd.workflowPath.node.signSet.DoSignSetSaveCmd +>> proxy:->com.engine.plugin.workflow.command.CustomDoSignSetSaveCmd +>> target:com.engine.crm.cmd.chance.DeleteCmd +>> proxy:->com.customization.esb.crm.chance.ProxyDeleteChanceCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetMenuSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetMenuSettingsCmd +>> target:com.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetActionSettingsCmd +>> proxy:->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetActionSettingsCmd +>> target:com.engine.odoc.cmd.odocrequest.FlowNextCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeFlowCmd +>> target:com.engine.workflow.cmd.workflowType.DoSaveCmd +>> proxy:->com.engine.plugin.workflow.command.CustomDoSave2Cmd->com.engine.plugin.workflow.command.CustomDoSave3Cmd->com.engine.plugin.workflow.command.CustomDoSaveCmd +>> target:com.engine.workflowDesign.cmd.GetWfInfoCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetWfInfoCmd->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetWfInfoCmd +>> target:com.engine.workflow.cmd.workflowPath.node.GetNodeSessionkeyCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuCmd +>> target:com.engine.crm.cmd.contacter.DeleteCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyDeleteContacterCmd +>> target:com.engine.odoc.cmd.odocrequest.ForceArchiveCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForceArchiveCmd +>> target:com.engine.meeting.cmd.meetingField.GetViewMeetingFieldCmd +>> proxy:->com.customization.meeting.qc854537.CustomGetViewMeetingFieldCmd +>> target:com.api.common.cmd.login.DoUserSessionCmd +>> proxy:->com.engine.plugin.hrm.command.MyDoUserSessionCmd +>> target:com.engine.hrm.cmd.test.GetSearchConditionCmd +>> proxy:->com.engine.plugin.hrm.command.GetMySearchConditionCmd +>> target:com.engine.crm.cmd.chance.FormSaveCmd +>> proxy:->com.customization.esb.crm.chance.ProxyNewChanceCmd +>> target:com.engine.crm.cmd.customer.CrmDeleteCmd +>> proxy:->com.customization.esb.crm.customer.ProxyDeleteCustomerCmd +>> target:com.engine.workflow.cmd.workflowPath.node.addInOperate.GetPreAddInOperateConditionCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetPreAddInOperateConditionCmd +>> target:com.api.prj.cmd.prjBoard.DoEditBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoEditBoardStageCmd +>> target:com.engine.odoc.cmd.updateSign.setting.SelectFreeFlowDatasCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowIsFree4OdocProxyCmd +>> target:com.engine.odoc.cmd.updateOperator.PlusSignatureCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAddDelCmd +>> target:com.api.prj.cmd.prjBoard.DoAddBoardStageCmd +>> proxy:->com.customization.esb.proj.prjboard.ProxyDoAddBoardStageCmd +>> target:com.engine.workflow.cmd.requestForm.RequestManager_FlowNextNodeCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestNextNodeCmd +>> target:com.engine.odoc.cmd.odocWorkflow.OdocAddWorkflowCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignAddWorkflowCmd +>> target:com.engine.workflow.cmd.requestForm.RemarkSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRemarkCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoAddWFCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.SaveAddWFCmd +>> target:com.engine.workflow.cmd.workflowPath.nodeLink.GetNodeLinkCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeLinkCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoSaveNewVersionCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSaveNewVersionTabCmd->com.engine.plugin.odoc.command.workflowPath.SaveNewVersionCmd +>> target:com.engine.workplan.cmd.workplanBase.AddAndEditWorkPlanCmd +>> proxy:->com.customization.esb.workplan.workplanbase.ProxyAddAndEditWorkPlanCmd +>> target:com.engine.workflow.cmd.requestForm.WFManager_SaveNewNodeCmd +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowWFManager_SaveNewNodeCmd +>> target:com.engine.workflow.cmd.workflowPath.baseInfo.DoEditWFCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.SaveEditWFCmd +>> target:com.engine.workflow.cmd.requestLog.LoadRequestLogBaseInfoCmd +>> proxy:->com.engine.plugin.workflow.command.CustomLoadRequestLogBaseInfoCmd +>> target:com.engine.workflow.cmd.workflowPath.node.DoRestoreDeleteNodeCmd +>> proxy:->com.engine.plugin.odoc.command.workflowPath.node.RestoreOdocNodeCfgCmd +>> target:com.engine.workflow.cmd.monitor.DoDeleteCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocWorkflowDeleteProxyCmd +>> target:com.engine.meeting.cmd.meetingbase.MeetingCancelCmd +>> proxy:->com.customization.esb.meeting.meetingbase.ProxyCancelMeetingCmd +>> target:com.engine.odoc.cmd.updateSign.append.AppendSaveLogCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAppendSignCmd +>> target:com.api.prj.cmd.task.DoTaskOperationCmd +>> proxy:->com.customization.esb.proj.task.ProxyDoTaskOperationCmd +>> target:com.engine.workflow.cmd.requestForm.LoadParamCmd +>> proxy:->com.engine.plugin.odoc.command.odocRequestForm.LoadOdocFormParam->com.engine.plugin.workflow.command.HaoQianPromptInfoCmd +>> target:com.engine.crm.cmd.contacter.EditCmd +>> proxy:->com.customization.esb.crm.contacter.ProxyEditContacterCmd +>> target:com.engine.workflow.cmd.requestForm.ForwardSubmitCmd +>> proxy:->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForwardCmd +>> target:com.engine.workflow.cmd.requestForm.GetFormTabCmd +>> proxy:->com.engine.plugin.fna.command.FnaElectronicDepositFormTopTabCmd->com.engine.plugin.odoc.command.signSetting.OdocWorkflowTabManagerCmd->com.engine.plugin.workflow.command.ContractLockFormTopTabCmd +>> target:com.engine.workflowDesign.cmd.DoSaveLayout +>> proxy:->com.engine.plugin.odoc.command.rightMenuSetting.OdocDoSaveLayoutCmd +2023-11-14 18:08:42,731 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - The business class dynamic proxy is loaded. +2023-11-14 20:42:22,086 [Timer-0] [A2] [INFO] - rootPath == null +2023-11-14 20:42:22,088 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties diff --git a/out/artifacts/hrm_attendance/hrm-attendance.jar b/out/artifacts/hrm_attendance/hrm-attendance.jar index a81f53d..82da355 100644 Binary files a/out/artifacts/hrm_attendance/hrm-attendance.jar and b/out/artifacts/hrm_attendance/hrm-attendance.jar differ diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.java index 973a4c9..3385b97 100644 --- a/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.java +++ b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.java @@ -184,7 +184,7 @@ public class GetClockInTimeItemCmd extends AbstractCommonCommand "1".equals(Util.null2String(e.get("ksdk")))).collect(Collectors.toList()); + needGetDateScheduling = needGetDateScheduling.stream().filter(e -> "1".equals(Util.null2String(e.get("jsdk")))).collect(Collectors.toList()); Map endNeedGetDateSchedule = needGetDateScheduling.get(needGetDateScheduling.size()-1); //判断最晚打卡时间是否跨天 String nowkssj = needGetDate +" "+Util.null2String(endNeedGetDateSchedule.get("dtkssj")); @@ -255,7 +255,7 @@ public class GetClockInTimeItemCmd extends AbstractCommonCommand> computeEndTimeAdd(List> afterNeedGetDateList, List> needGetDateScheduling,List> needGetDateList,String needGetDate){ - needGetDateScheduling = needGetDateScheduling.stream().filter(e -> "1".equals(Util.null2String(e.get("ksdk")))).collect(Collectors.toList()); + needGetDateScheduling = needGetDateScheduling.stream().filter(e -> "1".equals(Util.null2String(e.get("jsdk")))).collect(Collectors.toList()); Map endNeedGetDateSchedule = needGetDateScheduling.get(needGetDateScheduling.size()-1); //判断最晚打卡时间是否跨天 String kssj = needGetDate +" "+Util.null2String(endNeedGetDateSchedule.get("dtkssj")); @@ -316,6 +316,7 @@ public class GetClockInTimeItemCmd extends AbstractCommonCommand resultMap = resultList.stream().min(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get(); diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.java index 2cfeb2d..8828424 100644 --- a/src/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.java +++ b/src/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.java @@ -3,14 +3,17 @@ package com.engine.attendance.attendanceanalysis.cmd; import com.engine.attendance.enums.SystemItemEnum; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; +import com.engine.common.util.DateUtil; import com.engine.common.util.DbTools; import com.engine.core.interceptor.CommandContext; import com.google.common.collect.Maps; +import com.icbc.api.internal.apache.http.impl.cookie.S; import weaver.conn.RecordSet; import weaver.general.Util; import java.util.List; import java.util.Map; +import java.util.UUID; /** * 更新人员当天出勤结果 @@ -33,29 +36,31 @@ public class UpdateAttendanceResultsCmd extends AbstractCommonCommand resultMap = Maps.newHashMap(); RecordSet rs = new RecordSet(); + List> classInfo = (List>)params.get("classInfo"); + + String sql = "select ygid,rq,bc,xm1,xm2,xm3,xm4,xm5,xm6,xm7,xm8,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq=?"; + List> dataList = DbTools.getSqlToList(sql,userId,date); //班次信息 if (params.get("classInfo") == null){ //当天没有排班,计入异常 - noScheduling(params,rs); + noScheduling(params,rs,dataList); return resultMap; } - List> classInfo = (List>)params.get("classInfo"); - - String sql = "select ygid,rq,bc,xm1,xm2,xm3,xm4,xm5,xm6,xm7,xm8,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq=?"; - List> dataList = DbTools.getSqlToList(sql,userId,date); if (dataList.size() >0){ //有出勤结果 int index = 0; int i = 0; while (index==0){ i++; - if (dataList.get(0).get("xm"+i) != null || !"".equals(dataList.get(0).get("xm"+i))){ + if (dataList.get(0).get("xm"+i) == null || "".equals(dataList.get(0).get("xm"+i))){ index = i; + break; } } sql = "update uf_jcl_kq_cqjg set xm"+index+"=?,sc"+index+"=? where ygid=? and rq=?"; @@ -65,9 +70,9 @@ public class UpdateAttendanceResultsCmd extends AbstractCommonCommand> userList = DbTools.getSqlToList(sql,userId); - sql = "insert into uf_jcl_kq_cqjg (szjg,ygid,fbid,bm,zw,rq,bc,bcbdxx,cqzt,cqsc,xm1,sc1) values (?,?,?,?,?,?,?,?,?,?,?,?)"; + sql = "insert into uf_jcl_kq_cqjg (szjg,ygid,fbid,bm,zw,rq,bc,bcbdxx,cqzt,cqsc,xm1,sc1,sjzt,fxrq,formmodeid,modeuuid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; DbTools.update(rs,sql,userList.get(0).get("subcompanyid1"),userId,userList.get(0).get("subcompanyid1"),userList.get(0).get("departmentid"), - userList.get(0).get("jobtitle"),date,classInfo.get(0).get("bcxx"),classInfo.get(0).get("bcsdxx"),1,0,item,itemduration); + userList.get(0).get("jobtitle"),date,classInfo.get(0).get("bcxx"),classInfo.get(0).get("bcsdxx"),1,0,item,itemduration,1, DateUtil.getCurrentDate(),formmodeid, UUID.randomUUID().toString(),1,0,DateUtil.getCurrentDate(),DateUtil.getCurrentTime().split(" ")[1]); } @@ -79,15 +84,21 @@ public class UpdateAttendanceResultsCmd extends AbstractCommonCommand params, RecordSet rs){ + public void noScheduling(Map params, RecordSet rs,List> dataList){ String userId = Util.null2String(params.get("userId")); String date = Util.null2String(params.get("date")); + String formmodeid = Util.null2String(params.get("modeId")); String sql = "select subcompanyid1,departmentid,jobtitle from hrmresource where id=?"; List> userList = DbTools.getSqlToList(sql,userId); - sql = "insert into uf_jcl_kq_cqjg (szjg,ygid,fbid,bm,zw,rq,xm1,cqzt) values (?,?,?,?,?,?,?,?)"; - DbTools.update(rs,sql,userList.get(0).get("subcompanyid1"),userId,userList.get(0).get("subcompanyid1"), - userList.get(0).get("departmentid"),userList.get(0).get("jobtitle"),date, SystemItemEnum.NO_SCHEDULING.getKey(),1); + if (dataList.size() >0){ + sql = "update uf_jcl_kq_cqjg set xm1=?,cqzt=1,cqsc=0,sjzt=1 where ygid=? and rq=?"; + DbTools.update(rs,sql,SystemItemEnum.NO_SCHEDULING.getKey(),userId,date); + }else { + sql = "insert into uf_jcl_kq_cqjg (szjg,ygid,fbid,bm,zw,rq,xm1,cqzt,sjzt,fxrq,formmodeid,modeuuid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + DbTools.update(rs,sql,userList.get(0).get("subcompanyid1"),userId,userList.get(0).get("subcompanyid1"), + userList.get(0).get("departmentid"),userList.get(0).get("jobtitle"),date, SystemItemEnum.NO_SCHEDULING.getKey(),1,1, DateUtil.getCurrentDate(),formmodeid, UUID.randomUUID().toString(),1,0,DateUtil.getCurrentDate(),DateUtil.getCurrentTime().split(" ")[1]); + } } } diff --git a/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java b/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java index c066bd2..83b7502 100644 --- a/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java +++ b/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java @@ -18,7 +18,10 @@ import java.util.stream.Collectors; @Slf4j public class AttendanceAnalysisJob extends BaseCronJob { - + /** + * 出勤结果模块id + */ + private String modeId; private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class); @Override @@ -32,7 +35,7 @@ public class AttendanceAnalysisJob extends BaseCronJob { Map>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); collect.entrySet().forEach(e -> { - attendanceAnalysisService.attendanceAnalysis(e.getKey(),e.getValue()); + attendanceAnalysisService.attendanceAnalysis(e.getKey(),e.getValue(),modeId); }); log.info("********AttendanceAnalysisJob end********"); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/AbnormalAttendanceService.java b/src/com/engine/attendance/attendanceanalysis/service/AbnormalAttendanceService.java index 3b10e11..a2b4fb7 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/AbnormalAttendanceService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/AbnormalAttendanceService.java @@ -1,5 +1,6 @@ package com.engine.attendance.attendanceanalysis.service; +import java.util.List; import java.util.Map; /** @@ -18,12 +19,12 @@ public interface AbnormalAttendanceService { * @param params * @return */ - boolean beLate(Map params); + List> beLate(Map params); /** * 早退 * @param params * @return */ - boolean leaveEarly(Map params); + List> leaveEarly(Map params); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.java b/src/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.java new file mode 100644 index 0000000..ae09281 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.java @@ -0,0 +1,25 @@ +package com.engine.attendance.attendanceanalysis.service; + +import java.util.List; +import java.util.Map; + +public interface AskForLeaveService { + /** + * 根据时间请假 + * @return + */ + List> askForLeaveByTime(Map param); + + /** + * 根据时长请假 + * @return + */ + List> askForLeaveByDurationTime(Map param); + + /** + * 根据半天请假 + * @param param + * @return + */ + boolean askForLeaveByHalfDay(Map param); +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/EvectionService.java b/src/com/engine/attendance/attendanceanalysis/service/EvectionService.java new file mode 100644 index 0000000..3297fe1 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/EvectionService.java @@ -0,0 +1,25 @@ +package com.engine.attendance.attendanceanalysis.service; + +import java.util.List; +import java.util.Map; + +public interface EvectionService { + /** + * 根据时间出差 + * @return + */ + List> evectionByTime(Map param); + + /** + * 根据时长出差 + * @return + */ + List> evectionByDurationTime(Map param); + + /** + * 根据半天出差 + * @param param + * @return + */ + List> evectionByHalfDay(Map param); +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java b/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java index c4b6aa0..6de95d1 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java @@ -9,14 +9,13 @@ import java.util.Map; public interface ForgetClockInService { /** * 全天未打卡 - * @param params * @return */ - boolean forgetClockInAllDays(Map params); + List> forgetClockInAllDays(); /** * 漏打卡 * @param params * @return */ - boolean forgetClockIn(Map params); + List> forgetClockIn(Map params); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/UtilService.java b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java index cb9b93c..7fdd32d 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/UtilService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java @@ -21,4 +21,11 @@ public interface UtilService { * @return */ List> getClockInTime(Map params); + + /** + * 记录考勤项目 + * @param params + */ + void recordItem(Map params); + } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java index 2636935..f90b97d 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java @@ -1,7 +1,6 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.cmd.item.*; -import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService; import com.engine.attendance.enums.AccountingUnitEnum; import com.engine.attendance.enums.ClassSegmentTypeEnum; @@ -25,7 +24,7 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt } @Override - public boolean beLate(Map params) { + public List> beLate(Map params) { //当前单条明细班次 Map classInfo = (Map)params.get("classInfo"); //当前单个打卡数据 @@ -38,6 +37,7 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt String analysisDate = Util.null2String(params.get("analysisDate")); //人员 String userId = Util.null2String(params.get("userId")); + List> resultList = Lists.newArrayList(); String clockInTime = clcokInTimeData.get("signdate")+" "+clcokInTimeData.get("signtime"); String classStartTime = analysisDate +" "+Util.null2String(classInfo.get("dtkssj")); @@ -48,7 +48,6 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt lateParams.put("time",between); lateParams.put("rqlx",classInfo.get("rqlx")); - boolean ifBeLate = false; if (ClassSegmentTypeEnum.WORK_TIME.getKey().equals(bdlx)){ //工作时段 @@ -63,14 +62,18 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl"))); String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw")); double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); - saveWorkTimeBeLateParam.put("userId",userId); - saveWorkTimeBeLateParam.put("date",analysisDate); +// saveWorkTimeBeLateParam.put("userId",userId); +// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",workTimeBeLateItems.get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); - saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo)); - saveWorkTimeBeLateParam.put("cqzt","1"); - commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); - ifBeLate=true; + saveWorkTimeBeLateParam.put("betweenMinutes",between); + resultList.add(saveWorkTimeBeLateParam); +// List> classInfoList = Lists.newArrayList(); +// classInfoList.add(classInfo); +// saveWorkTimeBeLateParam.put("classInfo", classInfoList); +// saveWorkTimeBeLateParam.put("cqzt","1"); +// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); +// ifBeLate=true; } }else if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx) @@ -92,14 +95,18 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt if (!"".equals(jbwdhlfzs) && between > Integer.valueOf(jbwdhlfzs)){ Map saveWorkTimeBeLateParam = Maps.newHashMap(); double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); - saveWorkTimeBeLateParam.put("userId",userId); - saveWorkTimeBeLateParam.put("date",analysisDate); +// saveWorkTimeBeLateParam.put("userId",userId); +// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); - saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo)); - saveWorkTimeBeLateParam.put("cqzt","1"); - commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); - ifBeLate=true; + saveWorkTimeBeLateParam.put("betweenMinutes",between); + resultList.add(saveWorkTimeBeLateParam); +// List> classInfoList = Lists.newArrayList(); +// classInfoList.add(classInfo); +// saveWorkTimeBeLateParam.put("classInfo", classInfoList); +// saveWorkTimeBeLateParam.put("cqzt","1"); +// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); +// ifBeLate=true; } } @@ -120,22 +127,26 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt if (!"".equals(thfghlfzs) && between> Integer.valueOf(thfghlfzs)){ double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); Map saveWorkTimeBeLateParam = Maps.newHashMap(); - saveWorkTimeBeLateParam.put("userId",userId); - saveWorkTimeBeLateParam.put("date",analysisDate); +// saveWorkTimeBeLateParam.put("userId",userId); +// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); - saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo)); - saveWorkTimeBeLateParam.put("cqzt","1"); - commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); - ifBeLate=true; + saveWorkTimeBeLateParam.put("betweenMinutes",between); + resultList.add(saveWorkTimeBeLateParam); +// List> classInfoList = Lists.newArrayList(); +// classInfoList.add(classInfo); +// saveWorkTimeBeLateParam.put("classInfo", classInfoList); +// saveWorkTimeBeLateParam.put("cqzt","1"); +// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); +// ifBeLate=true; } } - return ifBeLate; + return resultList; } @Override - public boolean leaveEarly(Map params) { + public List> leaveEarly(Map params) { //当前单条明细班次 Map classInfo = (Map)params.get("classInfo"); //当前单个打卡数据 @@ -148,6 +159,7 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt String analysisDate = Util.null2String(params.get("analysisDate")); //人员 String userId = Util.null2String(params.get("userId")); + List> resultList = Lists.newArrayList(); String clockInTime = clcokInTimeData.get("signdate")+" "+clcokInTimeData.get("signtime"); String dtkssj = analysisDate+" "+classInfo.get("dtkssj"); @@ -178,14 +190,18 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl"))); String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw")); double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); - saveWorkTimeBeLateParam.put("userId",userId); - saveWorkTimeBeLateParam.put("date",analysisDate); +// saveWorkTimeBeLateParam.put("userId",userId); +// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); - saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo)); - saveWorkTimeBeLateParam.put("cqzt","1"); - commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); - ifLeaveEarly=true; + saveWorkTimeBeLateParam.put("betweenMinutes",between); + resultList.add(saveWorkTimeBeLateParam); +// List> classInfoList = Lists.newArrayList(); +// classInfoList.add(classInfo); +// saveWorkTimeBeLateParam.put("classInfo", classInfoList); +// saveWorkTimeBeLateParam.put("cqzt","1"); +// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); +// ifLeaveEarly=true; } }else if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx) @@ -209,14 +225,18 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); - saveWorkTimeBeLateParam.put("userId",userId); - saveWorkTimeBeLateParam.put("date",analysisDate); +// saveWorkTimeBeLateParam.put("userId",userId); +// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); - saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo)); - saveWorkTimeBeLateParam.put("cqzt","1"); - commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); - ifLeaveEarly=true; + saveWorkTimeBeLateParam.put("betweenMinutes",between); + resultList.add(saveWorkTimeBeLateParam); +// List> classInfoList = Lists.newArrayList(); +// classInfoList.add(classInfo); +// saveWorkTimeBeLateParam.put("classInfo", classInfoList); +// saveWorkTimeBeLateParam.put("cqzt","1"); +// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); +// ifLeaveEarly=true; } } @@ -237,18 +257,22 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt if (!"".equals(tqlghlfzs) && between> Integer.valueOf(tqlghlfzs)){ double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); Map saveWorkTimeBeLateParam = Maps.newHashMap(); - saveWorkTimeBeLateParam.put("userId",userId); - saveWorkTimeBeLateParam.put("date",analysisDate); +// saveWorkTimeBeLateParam.put("userId",userId); +// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); - saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo)); - saveWorkTimeBeLateParam.put("cqzt","1"); - commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); - ifLeaveEarly=true; + saveWorkTimeBeLateParam.put("betweenMinutes",between); + resultList.add(saveWorkTimeBeLateParam); +// List> classInfoList = Lists.newArrayList(); +// classInfoList.add(classInfo); +// saveWorkTimeBeLateParam.put("classInfo", classInfoList); +// saveWorkTimeBeLateParam.put("cqzt","1"); +// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); +// ifLeaveEarly=true; } } - return ifLeaveEarly; + return resultList; } /** diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java new file mode 100644 index 0000000..be03fbf --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java @@ -0,0 +1,77 @@ +package com.engine.attendance.attendanceanalysis.service.impl; + +import c.e.c.d.b.c.e; +import com.engine.attendance.attendanceanalysis.service.AskForLeaveService; +import com.engine.attendance.enums.CheckBoxEnum; +import com.engine.common.util.DateUtil; +import com.engine.core.impl.Service; +import weaver.general.Util; + +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class AskForLeaveServiceImpl extends Service implements AskForLeaveService { + + @Override + public List> askForLeaveByTime(Map param) { + //人员迟到、早退、漏卡等记录 + List> abnormalClockInList = (List>)param.get("abnormalClockInList"); + //请假开始时间 + String kssj = Util.null2String(param.get("kssj")); + //请假结束时间 + String jssj = Util.null2String(param.get("jssj")); + + for (int i=0;i=0){ + abnormalClockInList.remove(i); + i--; + } + } + return abnormalClockInList; + } + + @Override + public boolean askForLeaveByHalfDay(Map param) { + return false; + } + + @Override + public List> askForLeaveByDurationTime(Map param) { + //人员迟到、早退、漏卡等记录 + List> abnormalClockInList = (List>)param.get("abnormalClockInList"); + List> forgetClockList = abnormalClockInList.stream().filter(e -> e.get("betweenMinutes") == null).collect(Collectors.toList()); + abnormalClockInList = abnormalClockInList.stream().filter(e -> e.get("betweenMinutes") != null).collect(Collectors.toList()); + abnormalClockInList = abnormalClockInList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); + + //请假时长,单位小时 + int qjsc = param.get("qjsc") == null?0:Double.valueOf(Double.valueOf(param.get("qjsc").toString())*60).intValue(); + //同一天可抵消多个异常 + String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs")); + if (CheckBoxEnum.CHECKED.equals(tybcndbjlhbjs)){ + for (int i=abnormalClockInList.size() -1;i>=0;i--){ + int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); + if (qjsc > time){ + qjsc = qjsc-time; + abnormalClockInList.remove(i); + i++; + } + } + }else{ + for (int i=abnormalClockInList.size() -1;i>=0;i--){ + int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); + if (qjsc > time){ + abnormalClockInList.remove(i); + break; + } + } + } + abnormalClockInList.addAll(forgetClockList); + + return abnormalClockInList; + } +} + diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java new file mode 100644 index 0000000..3754128 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java @@ -0,0 +1,74 @@ +package com.engine.attendance.attendanceanalysis.service.impl; + +import com.engine.attendance.attendanceanalysis.service.EvectionService; +import com.engine.attendance.enums.CheckBoxEnum; +import com.engine.common.util.DateUtil; +import com.engine.core.impl.Service; +import weaver.general.Util; + +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class EvectionServiceImpl extends Service implements EvectionService { + @Override + public List> evectionByTime(Map param) { + //人员迟到、早退、漏卡等记录 + List> abnormalClockInList = (List>)param.get("abnormalClockInList"); + //请假开始时间 + String kssj = Util.null2String(param.get("kssj")); + //请假结束时间 + String jssj = Util.null2String(param.get("jssj")); + + for (int i=0;i=0){ + abnormalClockInList.remove(i); + i--; + } + } + return abnormalClockInList; + } + + @Override + public List> evectionByDurationTime(Map param) { + //人员迟到、早退、漏卡等记录 + List> abnormalClockInList = (List>)param.get("abnormalClockInList"); + List> forgetClockList = abnormalClockInList.stream().filter(e -> e.get("betweenMinutes") == null).collect(Collectors.toList()); + abnormalClockInList = abnormalClockInList.stream().filter(e -> e.get("betweenMinutes") != null).collect(Collectors.toList()); + abnormalClockInList = abnormalClockInList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); + + //请假时长,单位小时 + int ccsc = param.get("ccsc") == null?0:Double.valueOf(Double.valueOf(param.get("ccsc").toString())*60).intValue(); + //同一天可抵消多个异常 + String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs")); + if (CheckBoxEnum.CHECKED.equals(tybcndbjlhbjs)){ + for (int i=abnormalClockInList.size() -1;i>=0;i--){ + int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); + if (ccsc > time){ + ccsc = ccsc-time; + abnormalClockInList.remove(i); + i++; + } + } + }else{ + for (int i=abnormalClockInList.size() -1;i>=0;i--){ + int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); + if (ccsc > time){ + abnormalClockInList.remove(i); + break; + } + } + } + abnormalClockInList.addAll(forgetClockList); + + return abnormalClockInList; + } + + @Override + public List> evectionByHalfDay(Map param) { + return null; + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java index b7ee49e..5e97ab0 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java @@ -1,37 +1,46 @@ package com.engine.attendance.attendanceanalysis.service.impl; -import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; import com.engine.attendance.enums.SystemItemEnum; import com.engine.core.impl.Service; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import java.util.List; import java.util.Map; +@Slf4j public class ForgetClockInServiceImpl extends Service implements ForgetClockInService { @Override - public boolean forgetClockInAllDays(Map params) { + public List> forgetClockInAllDays() { Map forgetParam = Maps.newHashMap(); - forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN); + forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN.getKey()); forgetParam.put("itemduration", 1); - forgetParam.put("classInfo", params.get("classInfo")); - forgetParam.put("userId",params.get("userId")); - forgetParam.put("date",params.get("analysisDate")); - Map result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam)); - return true; + List> resultList = Lists.newArrayList(); +// forgetParam.put("classInfo", params.get("classInfo")); +// forgetParam.put("userId",params.get("userId")); +// forgetParam.put("date",params.get("analysisDate")); +// forgetParam.put("modeId",params.get("modeId")); +// log.info("userId : {} ,analysisDate: {} forgetClockInAllDays"); + resultList.add(forgetParam); + return resultList; } @Override - public boolean forgetClockIn(Map params) { + public List> forgetClockIn(Map params) { + List> resultList = Lists.newArrayList(); Map forgetParam = Maps.newHashMap(); - forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN); + forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN.getKey()); forgetParam.put("itemduration", 1); - forgetParam.put("classInfo", Lists.newArrayList().add(params.get("classInfo"))); - forgetParam.put("userId",params.get("userId")); - forgetParam.put("date",params.get("analysisDate")); - Map result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam)); - return true; +// List> classInfoList = Lists.newArrayList(); +// classInfoList.add((Map)params.get("classInfo")); +// forgetParam.put("classInfo",classInfoList); +// forgetParam.put("userId",params.get("userId")); +// forgetParam.put("date",params.get("analysisDate")); +// Map result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam)); + resultList.add(forgetParam); + return resultList; } } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java index db8351d..4a40add 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java @@ -6,9 +6,7 @@ import com.engine.attendance.attendanceplan.service.AttendancePlanService; import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; import com.engine.attendance.component.persongroup.service.SchedulingResultsService; import com.engine.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl; -import com.engine.attendance.enums.AttendanceItemTypeEnum; -import com.engine.attendance.enums.ClassSegmentTypeEnum; -import com.engine.attendance.enums.WorkForTimeEnum; +import com.engine.attendance.enums.*; import com.engine.common.cmd.GetDateCmd; import com.engine.common.util.DateUtil; import com.engine.common.util.DbTools; @@ -20,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import weaver.general.Util; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; @Slf4j @@ -34,26 +33,38 @@ public class UtilServiceImpl extends Service implements UtilService { /** 班次信息*/ Map schedulingResultsMap = schedulingResultsService.queryDataTable(params); List> schedulingResultsList = (List>)schedulingResultsMap.get("data"); + String glpb = ""; + if (schedulingResultsList.size() >0){ + glpb = Util.null2String(schedulingResultsList.get(0).get("pbgl")); + } schedulingResultsList = schedulingResultsList.stream().filter(e -> !"1".equals(e.get("sfxx"))).collect(Collectors.toList()); - Map schedulingMap = schedulingResultsList.stream().collect(Collectors.toMap(e-> Util.null2String(e.get("bcxx")), e->Util.null2String(e.get("bcrq"))+"-"+Util.null2String(e.get("rqlx")))); + // Map schedulingMap = schedulingResultsList.stream().collect(Collectors.toMap(e-> Util.null2String(e.get("bcxx")).split("-")[0], e->Util.null2String(e.get("bcrq"))+"&"+Util.null2String(e.get("rqlx")))); + Map>> schedulingMap = schedulingResultsList.stream().collect(Collectors.groupingBy(e-> Util.null2String(e.get("bcxx")).split("-")[0])); + Map>> resultMap = Maps.newHashMap(); String sql = "select a.id bcxx,a.edsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,b.zddxfz,b.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in ("; String bcxxIds = ""; - for (Map.Entry entry :schedulingMap.entrySet()){ + for (Map.Entry>> entry :schedulingMap.entrySet()){ bcxxIds +=entry.getKey() +","; } + if ("".equals(bcxxIds)){ + return resultMap; + } bcxxIds = bcxxIds.substring(0,bcxxIds.length()-1); sql = sql +bcxxIds+") order by b.kssj"; List> dataList = DbTools.getSqlToList(sql); Map>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx")))); - Map>> resultMap = Maps.newHashMap(); + dataMap.entrySet().forEach(e -> { - String bcrq = schedulingMap.get(e.getKey()).split("-")[0]; - String rqlx = schedulingMap.get(e.getKey()).split("-")[0]; - List> bcxxs = e.getValue(); - for (Map map:bcxxs){ - map.put("rqlx",rqlx); + List> schedulingList = schedulingMap.get(e.getKey()); + for (Map scheduling :schedulingList){ + String bcrq = Util.null2String(scheduling.get("bcrq")); + String rqlx = Util.null2String(scheduling.get("rqlx")); + List> bcxxs = e.getValue(); + for (Map map:bcxxs){ + map.put("rqlx",rqlx); + } + resultMap.put(bcrq,bcxxs); } - resultMap.put(bcrq,bcxxs); }); /** 加班计划*/ @@ -71,6 +82,7 @@ public class UtilServiceImpl extends Service implements UtilService { //日期集合 Map dateParam = Maps.newHashMap(); dateParam.put("nd",Util.null2String(params.get("startDate")).split("-")[0]); + dateParam.put("glpb",glpb); Map result = commandExecutor.execute(new GetDateCmd(dateParam)); List> List = (List>)result.get("data"); Map dateMap = List.stream().collect(Collectors.toMap(e->Util.null2String(e.get("rq")),e->Util.null2String(e.get("rqlx")))); @@ -158,5 +170,105 @@ public class UtilServiceImpl extends Service implements UtilService { return resultList; } + @Override + public void recordItem(Map params) { + // + String userId = Util.null2String(params.get("userId")); + //分析日期 + String analysisDate = Util.null2String(params.get("analysisDate")); + //数据集合 + List> recordDataList = (List>)params.get("recordData"); + //日期类型 + String rqlx = Util.null2String(params.get("rqlx")); + //班次 + List> classInfo = (List>)params.get("classInfo"); + + String formmodeid = Util.null2String(params.get("modeId")); + + String cqzt = Util.null2String(params.get("cqzt")); + String dayTYpe =""; + if (DateTypeEnum.WORK_DAY.getKey().equals(rqlx) || DateTypeEnum.CHANGECLASS.getKey().equals(rqlx)){ + //工作日 + dayTYpe = SystemItemEnum.WORK_DAY.getKey(); + }else if (DateTypeEnum.HOLIDAY.getKey().equals(rqlx)){ + //节假日 + dayTYpe = SystemItemEnum.HOLIDAY.getKey(); + }else if (DateTypeEnum.PUBLIC_RESTDAY.getKey().equals(rqlx) || + DateTypeEnum.EXCHANGE_LEAVEDAY.getKey().equals(rqlx)){ + //休息日 + dayTYpe = SystemItemEnum.REST_DAY.getKey(); + } + + String sql = "select ygid,rq from uf_jcl_kq_cqjg where ygid=? and rq=?"; + List> dataList = DbTools.getSqlToList(sql,userId,analysisDate); + if (dataList.size() >0){ + sql = "update uf_jcl_kq_cqjg set xm1=?,"; + for (int i =0;i> userList = DbTools.getSqlToList(sql,userId); + sql = "insert into uf_jcl_kq_cqjg (szjg,ygid,fbid,bm,zw,rq,bc,bcbdxx,cqzt,cqsc,sjzt,fxrq,formmodeid,modeuuid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,"; + String cloumns = "xm1,"; + String value = "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"; + List insertDatas = Lists.newArrayList(); + insertDatas.add(userList.get(0).get("subcompanyid1")); + insertDatas.add(userId); + insertDatas.add(userList.get(0).get("subcompanyid1")); + insertDatas.add(userList.get(0).get("departmentid")); + insertDatas.add(userList.get(0).get("jobtitle")); + insertDatas.add(analysisDate); + insertDatas.add(classInfo.get(0).get("bcxx")); + insertDatas.add(classInfo.get(0).get("bcsdxx")); + insertDatas.add(cqzt); + insertDatas.add(classInfo.get(0).get("edsc")); + insertDatas.add(1); + insertDatas.add(analysisDate); + insertDatas.add(formmodeid); + insertDatas.add(UUID.randomUUID().toString()); + insertDatas.add(1); + insertDatas.add(0); + insertDatas.add(DateUtil.getCurrentDate()); + insertDatas.add(DateUtil.getCurrentTime().split(" ")[1]); + insertDatas.add(dayTYpe); + for (int i =0;i> dataList){ + public void attendanceAnalysis(String userId, List> dataList,String modeId){ + log.info("***********analysis userId:{} start***********",userId); + log.info("clockInTimeDate : [{}]",dataList); String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3); String beforeTwoDayDate = DateUtil.getCurrentDateMinusDay(2); String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1); @@ -65,9 +65,9 @@ public class AttendanceAnalysisWrapper extends Service { classesParamMap.put("pblx","0"); classesParamMap.put("pbdx",userId); classesParamMap.put("current","1"); - classesParamMap.put("pageSize",1); + classesParamMap.put("pageSize",10); classesParamMap.put("recurrence",1); - Map>> schedulingResultsMap = utilService.getSchedulingInFormation(paramMap); + Map>> schedulingResultsMap = utilService.getSchedulingInFormation(classesParamMap); /**获得人员加班计划*/ String sql = "select jbry,ksrq,kssj,jsrq,jssj,jbsc from uf_jcl_kq_jbjh_dt1 where jbry=? and ksrq>=? and ksrq<=? and (jbcx=0 or jbcx is null)"; @@ -83,17 +83,18 @@ public class AttendanceAnalysisWrapper extends Service { getClockTimeParam.put("clockInTimeCollect",collect); getClockTimeParam.put("schedulingResultCollect",schedulingResultsMap); //前一天打卡数据 + log.info("getClockTimeParam : [{}]",getClockTimeParam); List> beforeOneDayClockInTimeList = utilService.getClockInTime(getClockTimeParam); log.info("beforeOneDayClockInTimeList : [{}]",beforeOneDayClockInTimeList); //分析前一天考勤 - analysis(userId,beforeOneDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeOneDayDate),attendanceItems); + analysis(userId,beforeOneDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeOneDayDate),attendanceItems,modeId); getClockTimeParam.put("date",beforeTwoDayDate); //前第二天打卡数据 List> beforeTwoDayClockInTimeList = utilService.getClockInTime(getClockTimeParam); log.info("beforeTwoDayClockInTimeList : [{}]",beforeTwoDayClockInTimeList); //分析前第二天考勤 - analysis(userId,beforeTwoDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeTwoDayDate),attendanceItems); + analysis(userId,beforeTwoDayDate,beforeTwoDayClockInTimeList,schedulingResultsMap.get(beforeTwoDayDate),attendanceItems,modeId); } @@ -106,51 +107,65 @@ public class AttendanceAnalysisWrapper extends Service { * @param scheduleResult 班次 * @param attendanceItems 考勤项目 */ - public void analysis(String userId,String analysisDate,List> clockInTimeList,List> scheduleResult,List> attendanceItems){ + public void analysis(String userId,String analysisDate,List> clockInTimeList,List> scheduleResult,List> attendanceItems,String modeId){ + Map recordParam = Maps.newHashMap(); + recordParam.put("userId",userId); + recordParam.put("analysisDate",analysisDate); + recordParam.put("classInfo",scheduleResult); + recordParam.put("modeId",modeId); + if (scheduleResult == null || scheduleResult.size() ==0){ - //没有排班 + //没有排班 + Map params = Maps.newHashMap(); + params.put("userId",userId); + params.put("analysisDate",analysisDate); + params.put("modeId",modeId); + updateAttendanceResultWrapper.recordNoClass(params); return; } + recordParam.put("rqlx",scheduleResult.get(0).get("rqlx")); List> needClockInSchedule = scheduleResult.stream().filter(e -> "1".equals(e.get("ksdk")) || "1".equals(e.get("jsdk"))).collect(Collectors.toList()); if(clockInTimeList == null || clockInTimeList.size() == 0){ if (needClockInSchedule.size() > 0){ //全天漏打卡 - Map recordAbnormalParam = Maps.newHashMap(); - recordAbnormalParam.put("analysisDate",analysisDate); - recordAbnormalParam.put("userId",userId); - recordAbnormalParam.put("classInfo",clockInTimeList); - forgetClockInService.forgetClockInAllDays(recordAbnormalParam); + recordParam.put("cqzt",0); + recordParam.put("recordData",forgetClockInService.forgetClockInAllDays()); + utilService.recordItem(recordParam); return; } } //请假记录 String sql = "select a.qjry,a.jqlx,a.cxjqj,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where a.qjry=? and b.ksrq=? and (b.cxqj=0 or b.cxqj is null)"; List> askForLeaveList = DbTools.getSqlToList(sql,userId,analysisDate); + log.info("askForLeaveList :{}",askForLeaveList); //考勤项目 Map> askForLeaveItems = Maps.newHashMap(); //出差记录 - sql = "select a.ccr,a.cclx,a.ccsd,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where a.ccr=? and a.ksrq=? and (b.cxcc=0 or b.cxcc is null)"; + sql = "select b.ccr,a.cclx,a.ccsd,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr=? and b.ksrq=? and (b.cxcc=0 or b.cxcc is null)"; List> evectionList = DbTools.getSqlToList(sql,userId,analysisDate); + log.info("evectionList :{}",evectionList); //出差项目 Map> evectionItems = Maps.newHashMap(); - Map updateAttendacneParams = Maps.newHashMap(); - updateAttendacneParams.put("userId",userId); - updateAttendacneParams.put("date",analysisDate); - updateAttendacneParams.put("classInfo",scheduleResult); sql = "select hsl,hsdw,lgsbxydk,tqlghlfzs,fgsbxydk,thfghlfzs,tybcndbjlhbjs,zdycbcndfgzsd,zdycrqqjndxxb from uf_jcl_kq_kqxm where id=?"; for (Map askForLeaveData : askForLeaveList){ + Map askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx")); //全天请假 - if (PeriodOfTime.ALLDAY.getKey().equals(askForLeaveData.get("cxjqj"))){ - updateAttendacneParams.put("item",askForLeaveData.get("jqlx")); - updateAttendacneParams.put("itemduration",scheduleResult.get(0).get("edsc")); - commandExecutor.execute(new UpdateAttendanceResultsCmd(updateAttendacneParams)); + if (CheckBoxEnum.CHECKED.getKey().equals(askForLeaveData.get("qtj"))){ + List> resultList = Lists.newArrayList(); + Map resultMap = Maps.newHashMap(); + resultMap.put("item",askForLeaveData.get("jqlx")); + resultMap.put("itemduration",askForLeaveItem.get("hsl")); + resultList.add(resultMap); + recordParam.put("cqzt",CheckBoxEnum.CHECKED.getKey()); + recordParam.put("recordData",resultList); + utilService.recordItem(recordParam); return; } - Map askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx")); + askForLeaveItems.put(askForLeaveData.get("jqlx").toString(),askForLeaveItem); Map askForLeaveMap = new HashMap(){{ put("bcxx",scheduleResult.get(0).get("bcxx")); @@ -175,13 +190,18 @@ public class AttendanceAnalysisWrapper extends Service { } for (Map evectionData :evectionList){ //全天出差 - if (PeriodOfTime.ALLDAY.getKey().equals(evectionData.get("ccsd"))) { - updateAttendacneParams.put("item", evectionData.get("cclx")); - updateAttendacneParams.put("itemduration", scheduleResult.get(0).get("edsc")); - commandExecutor.execute(new UpdateAttendanceResultsCmd(updateAttendacneParams)); + Map evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx")); + if (CheckBoxEnum.CHECKED.getKey().equals(evectionData.get("qtcc"))) { + List> resultList = Lists.newArrayList(); + Map resultMap = Maps.newHashMap(); + resultMap.put("item", evectionData.get("cclx")); + resultMap.put("itemduration", evectionItem.get("hsl")); + resultList.add(resultMap); + recordParam.put("cqzt",CheckBoxEnum.CHECKED.getKey()); + recordParam.put("recordData",resultList); + utilService.recordItem(recordParam); return; } - Map evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx")); evectionItems.put(evectionData.get("cclx").toString(),evectionItem); Map evectionMap = new HashMap(){{ put("bcxx",scheduleResult.get(0).get("bcxx")); @@ -206,6 +226,83 @@ public class AttendanceAnalysisWrapper extends Service { needClockInSchedule = needClockInSchedule.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + List>> clcokInTimeData = getClockInPoint(analysisDate,needClockInSchedule,clockInTimeList); + + Map recordAbnormalParam = Maps.newHashMap(); + recordAbnormalParam.put("clcokInTimeList",clcokInTimeData); + recordAbnormalParam.put("attendanceItems",attendanceItems); + recordAbnormalParam.put("scheduleResult",scheduleResult); + recordAbnormalParam.put("analysisDate",analysisDate); + recordAbnormalParam.put("userId",userId); + recordAbnormalParam.put("rqlx",scheduleResult.get(0).get("rqlx")); + recordAbnormalParam.put("modeId",modeId); + + log.info("recordAbnormalParam clcokInTimeList:{},attendanceItems size :{},scheduleResult :{},analysisDate:[{}],userId:[{}],rqlx:[{}],modeId:[{}]",clcokInTimeData, + attendanceItems.size(),scheduleResult,analysisDate,userId,scheduleResult.get(0).get("rqlx"),modeId); + + /** + * 正常上下班入结果表 + */ +// + // List> normalList= updateAttendanceResultWrapper.recordNormal(recordAbnormalParam); + + /** + * 计算是否考勤异常,是否有早退、迟到、漏卡的情况 + * */ + List> abnormalClockInList = updateAttendanceResultWrapper.recordAbnormalClockIn(recordAbnormalParam); + + + /** + * 计算加班 + */ + boolean recordWorkOverTime= updateAttendanceResultWrapper.recordWorkOverTime(recordAbnormalParam); + + /** + * 请假 + */ + recordAbnormalParam.put("askForLeaveList",askForLeaveList); + recordAbnormalParam.put("askForLeaveItems",askForLeaveItems); + recordAbnormalParam.put("abnormalClockInList",abnormalClockInList); + Map vactionMap = updateAttendanceResultWrapper.recordAskForLeave(recordAbnormalParam); + abnormalClockInList = (List>)vactionMap.get("abnormalClockInList"); + List> vactionList = (List>)vactionMap.get("resultList"); + /** + * 出差、外出 + */ + recordAbnormalParam.put("evectionList",evectionList); + recordAbnormalParam.put("evectionItems",evectionItems); + recordAbnormalParam.put("abnormalClockInList",abnormalClockInList); + + Map recordEvection= updateAttendanceResultWrapper.recordEvection(recordAbnormalParam); + abnormalClockInList = (List>)recordEvection.get("abnormalClockInList"); + List> evectionResultList = (List>)recordEvection.get("resultList"); + + /** + * 入库 + */ + List> recordData = Lists.newArrayList(); + recordData.addAll(vactionList); + recordData.addAll(evectionResultList); + recordData.addAll(abnormalClockInList); + recordParam.put("recordData",recordData); + log.info("recordParam : {}",recordParam); + if (abnormalClockInList.size()>0){ + recordParam.put("cqzt",CheckBoxEnum.CHECKED.getKey()); + }else { + recordParam.put("cqzt",CheckBoxEnum.UNCHECKED.getKey()); + } + utilService.recordItem(recordParam); + } + + + /** + * 获取打卡卡点 + * @param analysisDate + * @param needClockInSchedule + * @param clockInTimeList + * @return + */ + public List>> getClockInPoint(String analysisDate,List> needClockInSchedule,List> clockInTimeList){ List>> clcokInTimeData = Lists.newArrayList(); for (Map needClockIn :needClockInSchedule){ @@ -306,38 +403,7 @@ public class AttendanceAnalysisWrapper extends Service { } } } - /** - * 计算是否考勤异常,是否有早退、迟到、漏卡的情况 - * */ - Map recordAbnormalParam = Maps.newHashMap(); - recordAbnormalParam.put("clcokInTimeList",clcokInTimeData); - recordAbnormalParam.put("attendanceItems",attendanceItems); - recordAbnormalParam.put("scheduleResult",scheduleResult); - recordAbnormalParam.put("analysisDate",analysisDate); - recordAbnormalParam.put("userId",userId); - log.info("recordAbnormalParam : [{}]",recordAbnormalParam); - boolean recordAbnormalBoolean= updateAttendanceResultWrapper.recordAbnormalClockIn(recordAbnormalParam); - - /** - * 计算加班 - */ - boolean recordWorkOverTime= updateAttendanceResultWrapper.recordWorkOverTime(recordAbnormalParam); - - /** - * 请假 - */ - recordAbnormalParam.put("askForLeaveList",askForLeaveList); - recordAbnormalParam.put("askForLeaveItems",askForLeaveItems); - boolean recordVaction= updateAttendanceResultWrapper.recordVaction(recordAbnormalParam); - /** - * 出差、外出 - */ - recordAbnormalParam.put("evectionList",evectionList); - recordAbnormalParam.put("evectionItems",evectionItems); - boolean recordAskForLeave= updateAttendanceResultWrapper.recordAskForLeave(recordAbnormalParam); - + return clcokInTimeData; } - - } diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java index 953d5ed..a6816bc 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java @@ -1,28 +1,40 @@ package com.engine.attendance.attendanceanalysis.wrapper; +import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService; +import com.engine.attendance.attendanceanalysis.service.AskForLeaveService; +import com.engine.attendance.attendanceanalysis.service.EvectionService; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; import com.engine.attendance.attendanceanalysis.service.impl.AbnormalAttendanceServiceImpl; +import com.engine.attendance.attendanceanalysis.service.impl.AskForLeaveServiceImpl; +import com.engine.attendance.attendanceanalysis.service.impl.EvectionServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl; -import com.engine.attendance.enums.ClassSegmentTypeEnum; -import com.engine.attendance.enums.ClockPointEnum; +import com.engine.attendance.enums.*; +import com.engine.common.util.DateUtil; import com.engine.common.util.ServiceUtil; +import com.engine.common.util.Utils; import com.engine.core.impl.Service; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; import weaver.general.Util; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +@Slf4j public class UpdateAttendanceResultWrapper extends Service { private AbnormalAttendanceService beLateService = ServiceUtil.getService(AbnormalAttendanceServiceImpl.class); private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class); + private AskForLeaveService askForLeaveService= ServiceUtil.getService(AskForLeaveServiceImpl.class); + private EvectionService evectionService= ServiceUtil.getService(EvectionServiceImpl.class); + /** * 记录异常打卡 * */ - public boolean recordAbnormalClockIn(Map params){ + public List> recordAbnormalClockIn(Map params){ //卡点 List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); //考勤项目 @@ -38,9 +50,8 @@ public class UpdateAttendanceResultWrapper extends Service { Map>> startScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtkssj").toString())); //以结束时间分割班次 Map>> endScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtjssj").toString())); - boolean iforgetClockIn = false; - boolean ifBeLate = false; - boolean ifLeaveEarly = false; + List> resultList = Lists.newArrayList(); + for (Map> clcokInTimeMap :clcokInTimeList){ //卡点 String point = ""; @@ -65,14 +76,18 @@ public class UpdateAttendanceResultWrapper extends Service { } if (ClockPointEnum.EMPTY.getKey().equals(timeType) || clcokInTimeData == null){ //漏卡 - Map beLateParams = Maps.newHashMap(); - beLateParams.put("classInfo",classInfo); - beLateParams.put("clcokInTimeData",clcokInTimeData); - beLateParams.put("attendanceItems",attendanceItems); - beLateParams.put("analysisDate",analysisDate); - beLateParams.put("userId",userId); - - iforgetClockIn = forgetClockInService.forgetClockIn(beLateParams); + Map missCardParams = Maps.newHashMap(); + missCardParams.put("classInfo",classInfo); + missCardParams.put("clcokInTimeData",clcokInTimeData); + missCardParams.put("attendanceItems",attendanceItems); + missCardParams.put("analysisDate",analysisDate); + missCardParams.put("userId",userId); + log.info("missCardParams classInfo: [{}],clcokInTimeData:[{}]",classInfo,clcokInTimeData); + List> iforgetClockIn = forgetClockInService.forgetClockIn(missCardParams); + if (iforgetClockIn.size() >0){ + iforgetClockIn.get(0).put("pointTime",pointTime); + resultList.add(iforgetClockIn.get(0)); + } }else if (ClockPointEnum.START.getKey().equals(pointType) && ClockPointEnum.AFTER.getKey().equals(timeType)){ //迟到 @@ -82,9 +97,12 @@ public class UpdateAttendanceResultWrapper extends Service { beLateParams.put("attendanceItems",attendanceItems); beLateParams.put("analysisDate",analysisDate); beLateParams.put("userId",userId); - - ifBeLate = beLateService.beLate(beLateParams); - + log.info("beLateParams classInfo: [{}],clcokInTimeData:[{}]",classInfo,clcokInTimeData); + List> ifBeLate = beLateService.beLate(beLateParams); + if (ifBeLate.size() > 0){ + ifBeLate.get(0).put("pointTime",pointTime); + resultList.add(ifBeLate.get(0)); + } }else if (ClockPointEnum.END.getKey().equals(pointType) && ClockPointEnum.BEFORE.getKey().equals(timeType)){ //早退 Map leaveEarlyParams = Maps.newHashMap(); @@ -93,21 +111,28 @@ public class UpdateAttendanceResultWrapper extends Service { leaveEarlyParams.put("attendanceItems",attendanceItems); leaveEarlyParams.put("analysisDate",analysisDate); leaveEarlyParams.put("userId",userId); - - ifLeaveEarly = beLateService.leaveEarly(leaveEarlyParams); + log.info("leaveEarlyParams classInfo: [{}],clcokInTimeData:[{}]",classInfo,clcokInTimeData); + List> ifLeaveEarly = beLateService.leaveEarly(leaveEarlyParams); + if (ifLeaveEarly.size() > 0){ + ifLeaveEarly.get(0).put("pointTime",pointTime); + resultList.add(ifLeaveEarly.get(0)); + } } } - if (iforgetClockIn || ifBeLate ||ifLeaveEarly){ - return true; - } - return false; +// if (iforgetClockIn || ifBeLate ||ifLeaveEarly){ +// return true; +// } + return resultList; } + /** + * 记录加班 + * @param params + * @return + */ public boolean recordWorkOverTime(Map params){ - //卡点 - List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); //考勤项目 List> attendanceItems = (List>)params.get("attendanceItems"); //排班 @@ -138,27 +163,80 @@ public class UpdateAttendanceResultWrapper extends Service { * @param params * @return */ - public boolean recordVaction(Map params){ - //卡点 - List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); + public Map recordAskForLeave(Map params){ //请假项目 Map> askForLeaveItems = (Map>)params.get("askForLeaveItems"); - //排班 - List> scheduleResult = (List>)params.get("scheduleResult"); //分析日期 String analysisDate = Util.null2String(params.get("analysisDate")); - //人员 - String userId = Util.null2String(params.get("userId")); - //请假 + //排班 + List> scheduleResult = (List>)params.get("scheduleResult"); + //请假记录 List> askForLeaveList = (List>)params.get("askForLeaveList"); + //异常记录 + List> abnormalClockInList = (List>)params.get("abnormalClockInList"); + + Map map = Maps.newHashMap(); + List> resultList = Lists.newArrayList(); for (int i=0;i resultMap = Maps.newHashMap(); + resultList.add(resultMap); + resultMap.put("item",askForLeaveList.get(i).get("jqlx")); String kssj = askForLeaveList.get(i).get("ksrq") + " "+askForLeaveList.get(i).get("kssj"); String jssj = askForLeaveList.get(i).get("jsrq")+ " "+askForLeaveList.get(i).get("jssj"); + //半天请假 + String btj = Util.null2String(askForLeaveList.get(i).get("btj")); + //请假时长 + String qjsc = Util.null2String(askForLeaveList.get(i).get("qjsc")); + //请假项目 Map askForLeaveItem = askForLeaveItems.get(askForLeaveList.get(i).get("jqlx")); + //自动移除时间区间内的非工作时长 + String zdycbcndfgzsd = Util.null2String(askForLeaveItem.get("zdycbcndfgzsd")); + //同一天可抵消多个异常 + String tybcndbjlhbjs = Util.null2String(askForLeaveItem.get("tybcndbjlhbjs")); + //核算量 + double hsl = Double.valueOf(Util.null2String(askForLeaveItem.get("hsl"))); + //核算单位 + String hsdw = Util.null2String(askForLeaveItem.get("hsdw")); + + Map param = Maps.newHashMap(); + param.put("abnormalClockInList",abnormalClockInList); + double itemduration = 0; + if ("".equals(Util.null2String(askForLeaveList.get(i).get("kssj"))) || "".equals(Util.null2String(askForLeaveList.get(i).get("jssj")))){ + //弹性请假,半天请假 + if (CheckBoxEnum.CHECKED.getKey().equals(btj)){ + //半天请假 + askForLeaveService.askForLeaveByHalfDay(param); + }else if (!"".equals(qjsc)){ + //时长请假 + itemduration = Utils.getItemduration(hsl,hsdw,Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES); + + resultMap.put("itemduration",itemduration); + param.put("qjsc",qjsc); + param.put("tybcndbjlhbjs",tybcndbjlhbjs); + if (abnormalClockInList.size()>0){ + abnormalClockInList =askForLeaveService.askForLeaveByDurationTime(param); + } + } + }else { + //按照开始时间,结束时间请假 + int timeMinutes = DateUtil.getBetWeenMinutes(kssj,jssj); + if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){ + timeMinutes = removeRestTime(kssj,jssj,scheduleResult,analysisDate); + } + itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES); + resultMap.put("itemduration",itemduration); + param.put("kssj",kssj); + param.put("jssj",jssj); + if (abnormalClockInList.size()>0){ + abnormalClockInList = askForLeaveService.askForLeaveByTime(param); + } + } } - return false; + map.put("resultList",resultList); + map.put("abnormalClockInList",abnormalClockInList); + return map; } /** @@ -166,18 +244,179 @@ public class UpdateAttendanceResultWrapper extends Service { * @param params * @return */ - public boolean recordAskForLeave(Map params){ - //卡点 - List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); + public Map recordEvection(Map params){ + //外出项目 Map> evectionItems = (Map>)params.get("evectionItems"); + //排班 + List> scheduleResult = (List>)params.get("scheduleResult"); + //分析日期 + String analysisDate = Util.null2String(params.get("analysisDate")); + //出差记录 + List> evectionList = (List>)params.get("evectionList"); + //异常记录 + List> abnormalClockInList = (List>)params.get("abnormalClockInList"); + + + Map map = Maps.newHashMap(); + List> resultList = Lists.newArrayList(); + + for (int i=0;i resultMap = Maps.newHashMap(); + resultList.add(resultMap); + resultMap.put("item",evectionList.get(i).get("cclx")); + String kssj = evectionList.get(i).get("ksrq") + " "+evectionList.get(i).get("kssj"); + String jssj = evectionList.get(i).get("jsrq")+ " "+evectionList.get(i).get("jssj"); + //半天请假 + String btj = Util.null2String(evectionList.get(i).get("btcc")); + //请假时长 + String qjsc = Util.null2String(evectionList.get(i).get("ccsc")); + //请假项目 + Map evectionItem = evectionItems.get(evectionList.get(i).get("cclx")); + //自动移除时间区间内的非工作时长 + String zdycbcndfgzsd = Util.null2String(evectionItem.get("zdycbcndfgzsd")); + //同一天可抵消多个异常 + String tybcndbjlhbjs = Util.null2String(evectionItem.get("tybcndbjlhbjs")); + //核算量 + double hsl = Double.valueOf(Util.null2String(evectionItem.get("hsl"))); + //核算单位 + String hsdw = Util.null2String(evectionItem.get("hsdw")); + + Map param = Maps.newHashMap(); + param.put("abnormalClockInList",abnormalClockInList); + + double itemduration = 0; + if ("".equals(Util.null2String(evectionList.get(i).get("kssj"))) || "".equals(Util.null2String(evectionList.get(i).get("jssj")))){ + //弹性请假,半天请假 + if (CheckBoxEnum.CHECKED.getKey().equals(btj)){ + //半天请假 + evectionService.evectionByHalfDay(param); + }else if (!"".equals(qjsc)){ + //时长请假 + itemduration = Utils.getItemduration(hsl,hsdw,Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES); + + resultMap.put("itemduration",itemduration); + param.put("ccsc",qjsc); + param.put("tybcndbjlhbjs",tybcndbjlhbjs); + if (abnormalClockInList.size()>0){ + abnormalClockInList =evectionService.evectionByDurationTime(param); + } + } + }else { + //按照开始时间,结束时间请假 + int timeMinutes = DateUtil.getBetWeenMinutes(kssj,jssj); + if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){ + timeMinutes = removeRestTime(kssj,jssj,scheduleResult,analysisDate); + } + itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES); + resultMap.put("itemduration",itemduration); + param.put("kssj",kssj); + param.put("jssj",jssj); + if (abnormalClockInList.size()>0){ + abnormalClockInList = evectionService.evectionByTime(param); + } + } + } + map.put("resultList",resultList); + map.put("abnormalClockInList",abnormalClockInList); + return map; + } + + /** + * 正常上下班,填写 + * @param params + * @return + */ + public List> recordNormal(Map params){ //排班 List> scheduleResult = (List>)params.get("scheduleResult"); //分析日期 String analysisDate = Util.null2String(params.get("analysisDate")); //人员 String userId = Util.null2String(params.get("userId")); + //日期类型 + String rqlx = Util.null2String(scheduleResult.get(0).get("rqlx")); + + List> resultList = Lists.newArrayList(); + + Map normalParams = Maps.newHashMap(); + +// normalParams.put("userId",userId); +// normalParams.put("date",analysisDate); +// normalParams.put("classInfo",scheduleResult); +// normalParams.put("modeId",params.get("modeId")); + if (DateTypeEnum.WORK_DAY.getKey().equals(rqlx) || DateTypeEnum.CHANGECLASS.getKey().equals(rqlx)){ + //工作日 + normalParams.put("item",SystemItemEnum.WORK_DAY.getKey()); + }else if (DateTypeEnum.HOLIDAY.getKey().equals(rqlx)){ + //节假日 + normalParams.put("item",SystemItemEnum.HOLIDAY.getKey()); + }else if (DateTypeEnum.PUBLIC_RESTDAY.getKey().equals(rqlx) || + DateTypeEnum.EXCHANGE_LEAVEDAY.getKey().equals(rqlx)){ + //休息日 + normalParams.put("item",SystemItemEnum.REST_DAY.getKey()); + } + resultList.add(normalParams); + //commandExecutor.execute(new UpdateAttendanceResultsCmd(normalParams)); + + return resultList; + } + /** + * 没有排班 + * @param params + * @return + */ + public boolean recordNoClass(Map params){ + //分析日期 + String analysisDate = Util.null2String(params.get("analysisDate")); + //人员 + String userId = Util.null2String(params.get("userId")); + + Map normalParams = Maps.newHashMap(); + + normalParams.put("userId",userId); + normalParams.put("date",analysisDate); + normalParams.put("modeId",params.get("modeId")); + log.info("userId : {} ,analysisDate: {} have no class",userId,analysisDate); + commandExecutor.execute(new UpdateAttendanceResultsCmd(normalParams)); return false; } + + /** + * 请假、外出时间扣出休息时间 + * @param kssj 开始时间 + * @param jssj 结束时间 + * @param scheduleResult 班次 + * @return + */ + public int removeRestTime(String kssj,String jssj,List> scheduleResult,String analysisDate){ + scheduleResult = scheduleResult.stream().filter(e -> ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(e.get("bdlx")) || + ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(e.get("bdlx")) || ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + int betweenMinutes = DateUtil.getBetWeenMinutes(kssj,jssj); + for (Map restSchedule :scheduleResult){ + String dtkssj = analysisDate+" "+restSchedule.get("dtkssj"); + String dtjssj = analysisDate+" "+restSchedule.get("dtjssj"); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ + dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+restSchedule.get("dtjssj"); + } + if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0){ + //休息时间在请假时间中间 + betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,dtjssj); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){ + //休息时间在请假时间 左边 + betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,jssj); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0){ + //休息时间在请假时间 右边 + betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(kssj,dtjssj); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){ + //请假时间在休息时间中间 + betweenMinutes = 0; + } + } + + + return betweenMinutes; + } + } diff --git a/src/com/engine/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java b/src/com/engine/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java index 0997c3a..458574f 100644 --- a/src/com/engine/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java +++ b/src/com/engine/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java @@ -104,7 +104,7 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand> attendanceItems = DbTools.getSqlToList(sql); log.info("dataIds : {}",dataIds); diff --git a/src/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java b/src/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java index 5089693..0e74d38 100644 --- a/src/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java +++ b/src/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java @@ -143,7 +143,15 @@ public class PersongroupCommonUtil { public static boolean insertShiftSchedulingResults(List> organizationList,List> insertDataList,String formmodeid){ RecordSet rs = new RecordSet(); List addlist = Lists.newArrayList(); + String sql = "delete from uf_pbjg where bcrq>= ? and bcrq<=? "; + String startDate = Util.null2String(insertDataList.get(0).get("bcrq")); + String endDate = Util.null2String(insertDataList.get(insertDataList.size()-1).get("bcrq")); + Set psersons = Sets.newHashSet(); + Set psersonsGroups = Sets.newHashSet(); + Set departments = Sets.newHashSet(); + Set subCompanys = Sets.newHashSet(); for (Map organization: organizationList){ + for (Map insertData : insertDataList){ ArrayList list = new ArrayList<>(); list.add(insertData.get("pbtj")); @@ -155,6 +163,7 @@ public class PersongroupCommonUtil { list.add(null); list.add(null); list.add(null); + psersons.add(Util.null2String(organization.get("dx")).split("-")[0]); }else if ("1".equals(organization.get("dxlx"))){ //人员分组 @@ -162,18 +171,21 @@ public class PersongroupCommonUtil { list.add(Util.null2String(organization.get("dx")).split("-")[0]); list.add(null); list.add(null); + psersonsGroups.add(Util.null2String(organization.get("dx")).split("-")[0]); }else if ("2".equals(organization.get("dxlx"))){ //部门 list.add(null); list.add(null); list.add(Util.null2String(organization.get("dx")).split("-")[0]); list.add(null); + departments.add(Util.null2String(organization.get("dx")).split("-")[0]); }else if ("3".equals(organization.get("dxlx"))){ //分部 list.add(null); list.add(null); list.add(null); list.add(Util.null2String(organization.get("dx")).split("-")[0]); + subCompanys.add(Util.null2String(organization.get("dx")).split("-")[0]); } list.add(insertData.get("bcrq")); list.add(insertData.get("rqlx")); @@ -193,7 +205,29 @@ public class PersongroupCommonUtil { } } + boolean result = false; + if (psersons.size() >0){ + String deleteSql = sql + " and pbdxry in ("+String.join(",",psersons)+")"; + log.info("deleteSql : {}",deleteSql); + DbTools.update(rs,deleteSql,startDate,endDate); + } + if (psersonsGroups.size() >0){ + String deleteSql = sql + " and pbdxryfz in ("+String.join(",",psersonsGroups)+")"; + log.info("deleteSql : {}",deleteSql,startDate,endDate); + DbTools.update(rs,deleteSql,startDate,endDate); + } + if (departments.size() >0){ + String deleteSql = sql + " and pbdxbm in ("+String.join(",",departments)+")"; + log.info("deleteSql : {}",deleteSql,startDate,endDate); + DbTools.update(rs,deleteSql,startDate,endDate); + } + if (subCompanys.size() >0){ + String deleteSql = sql + " and pbdxfb in ("+String.join(",",subCompanys)+")"; + log.info("deleteSql : {}",deleteSql,startDate,endDate); + DbTools.update(rs,deleteSql,startDate,endDate); + } + if (addlist.size() >0){ log.info("addlist :[{}]",addlist); String insertSql = "insert into uf_pbjg (pbtj,pbgl,dxlx,pbdxry,pbdxryfz,pbdxbm,pbdxfb,bcrq,rqlx,sfxx,sfdkpp,bcxx,hxbz,pbrq,pbsj,formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,MODEUUID) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; diff --git a/src/com/engine/attendance/enums/DateTypeEnum.java b/src/com/engine/attendance/enums/DateTypeEnum.java new file mode 100644 index 0000000..41ddee6 --- /dev/null +++ b/src/com/engine/attendance/enums/DateTypeEnum.java @@ -0,0 +1,30 @@ +package com.engine.attendance.enums; + +import com.finance.toolkit.BaseEnum; + +/** + * 日期类型 + */ +public enum DateTypeEnum implements BaseEnum { + WORK_DAY("0","工作日"), + HOLIDAY("1","节假日"), + PUBLIC_RESTDAY("2","公休日"), + EXCHANGE_LEAVEDAY("3","调休日"), + CHANGECLASS("4","调班日"); + + private String key; + private String value; + DateTypeEnum(String key, String value){ + this.key=key; + this.value=value; + } + @Override + public String getKey() { + return this.key; + } + + @Override + public String getValue() { + return this.value; + } +} diff --git a/src/com/engine/common/cmd/GetDateCmd.java b/src/com/engine/common/cmd/GetDateCmd.java index 06454d8..fa05f7d 100644 --- a/src/com/engine/common/cmd/GetDateCmd.java +++ b/src/com/engine/common/cmd/GetDateCmd.java @@ -24,8 +24,9 @@ public class GetDateCmd extends AbstractCommonCommand> { @Override public Map execute(CommandContext commandContext) { String nd = Util.null2String(params.get("nd")); - String sql = "select nd,rq,nlrq,rqlx,xq from uf_jcl_kq_rlxx where nd=?"; - List> dataList = DbTools.getSqlToList(sql,nd); + String glpb = Util.null2String(params.get("glpb")); + String sql = "select nd,rq,nlrq,rqlx,xq,rlmc from uf_jcl_kq_rlxx a left join uf_jcl_kq_glpb b on a.rlmc=b.qyrl where b.id=? and a.nd=? "; + List> dataList = DbTools.getSqlToList(sql,nd,glpb); Map resultMap = Maps.newHashMap(); resultMap.put("data",dataList); return resultMap; diff --git a/src/com/engine/common/util/Utils.java b/src/com/engine/common/util/Utils.java index 81184d2..177dc2f 100644 --- a/src/com/engine/common/util/Utils.java +++ b/src/com/engine/common/util/Utils.java @@ -1,6 +1,7 @@ package com.engine.common.util; import com.engine.attendance.enums.AccountingUnitEnum; +import com.engine.attendance.enums.ClockPointEnum; import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; @@ -226,14 +227,14 @@ public class Utils { } String afterSignDateTime = clockInTimeList.get(j).get("signdate") +" "+clockInTimeList.get(j).get("signtime"); if (i==0 && DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) <0){ - resultMap.put("after",clockInTimeList.get(i)); + resultMap.put(ClockPointEnum.AFTER.getKey(),clockInTimeList.get(i)); }else if (i == clockInTimeList.size()-1 && DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) >0){ - resultMap.put("before",clockInTimeList.get(i)); + resultMap.put(ClockPointEnum.BEFORE.getKey(),clockInTimeList.get(i)); }else if (DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) >0 && DateUtil.getTime(time).compareTo(DateUtil.getTime(afterSignDateTime)) <0){ - resultMap.put("before",clockInTimeList.get(i)); - resultMap.put("after",clockInTimeList.get(j)); + resultMap.put(ClockPointEnum.BEFORE.getKey(),clockInTimeList.get(i)); + resultMap.put(ClockPointEnum.AFTER.getKey(),clockInTimeList.get(j)); }else if (DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) == 0){ - resultMap.put("equal",clockInTimeList.get(i)); + resultMap.put(ClockPointEnum.EQUAL.getKey(),clockInTimeList.get(i)); } } return resultMap; diff --git a/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class b/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class index a415cae..0d69f75 100644 Binary files a/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class and b/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class index aac6b55..2b544e8 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.class index 42b1cc3..0fe9fbd 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/AbsenteeismItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/AbsenteeismItemCmd.class similarity index 65% rename from target/classes/com/engine/attendance/attendanceanalysis/cmd/AbsenteeismItemCmd.class rename to target/classes/com/engine/attendance/attendanceanalysis/cmd/item/AbsenteeismItemCmd.class index 4760fc6..bd0f01f 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/AbsenteeismItemCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/AbsenteeismItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/BeAwayItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/BeAwayItemCmd.class new file mode 100644 index 0000000..99b6715 Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/BeAwayItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/BeLateItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/BeLateItemCmd.class similarity index 62% rename from target/classes/com/engine/attendance/attendanceanalysis/cmd/BeLateItemCmd.class rename to target/classes/com/engine/attendance/attendanceanalysis/cmd/item/BeLateItemCmd.class index 813963b..70b1445 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/BeLateItemCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/BeLateItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/LeaveEarlyItemCmd.class similarity index 51% rename from target/classes/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyItemCmd.class rename to target/classes/com/engine/attendance/attendanceanalysis/cmd/item/LeaveEarlyItemCmd.class index 555a7dc..b30c6f2 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyItemCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/LeaveEarlyItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/VacationItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/VacationItemCmd.class new file mode 100644 index 0000000..a27daf5 Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/VacationItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/WorkOvertimeItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/WorkOvertimeItemCmd.class similarity index 65% rename from target/classes/com/engine/attendance/attendanceanalysis/cmd/WorkOvertimeItemCmd.class rename to target/classes/com/engine/attendance/attendanceanalysis/cmd/item/WorkOvertimeItemCmd.class index b517fb1..a14bd2a 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/WorkOvertimeItemCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/item/WorkOvertimeItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class b/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class index 72ea257..ab0aff6 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class and b/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/AbnormalAttendanceService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/AbnormalAttendanceService.class new file mode 100644 index 0000000..2ab104c Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/service/AbnormalAttendanceService.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.class new file mode 100644 index 0000000..07d2aad Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/BeLateService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/BeLateService.class deleted file mode 100644 index e08d52f..0000000 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/BeLateService.class and /dev/null differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/EvectionService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/EvectionService.class new file mode 100644 index 0000000..d9b5bfd Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/service/EvectionService.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.class index 7ab0dce..022e326 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class index 3ce952e..e17ed29 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class new file mode 100644 index 0000000..b9eea1d Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class new file mode 100644 index 0000000..75d404b Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.class deleted file mode 100644 index a837704..0000000 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.class and /dev/null differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class new file mode 100644 index 0000000..a4630fc Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.class index 3d67546..6f1d339 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class index 9e778ea..11ba4e3 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class index 191e20b..a710187 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class index 841134f..a9f4e05 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class index 3c8e3bf..bb801df 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class index d8f0426..8f0f22d 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class b/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class index 51f14ef..f85d61d 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class and b/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/SchedulingJob.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/SchedulingJob.class index 8f1108a..8f0dcdc 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/SchedulingJob.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/SchedulingJob.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class index 63962a3..94b10ca 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class index 9de14ba..f4e5816 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class index 39ac214..aeb2983 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class index fea27dc..b489d46 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/service/impl/PersonGroupServiceImpl.class b/target/classes/com/engine/attendance/component/persongroup/service/impl/PersonGroupServiceImpl.class index 2f6bce6..31d47f3 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/service/impl/PersonGroupServiceImpl.class and b/target/classes/com/engine/attendance/component/persongroup/service/impl/PersonGroupServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/enums/DateTypeEnum.class b/target/classes/com/engine/attendance/enums/DateTypeEnum.class new file mode 100644 index 0000000..fe3a7c5 Binary files /dev/null and b/target/classes/com/engine/attendance/enums/DateTypeEnum.class differ diff --git a/target/classes/com/engine/common/cmd/GetDateCmd.class b/target/classes/com/engine/common/cmd/GetDateCmd.class index 6c6bcff..9633877 100644 Binary files a/target/classes/com/engine/common/cmd/GetDateCmd.class and b/target/classes/com/engine/common/cmd/GetDateCmd.class differ diff --git a/target/classes/com/engine/common/util/CommonUtil.class b/target/classes/com/engine/common/util/CommonUtil.class index f5c445a..48d151d 100644 Binary files a/target/classes/com/engine/common/util/CommonUtil.class and b/target/classes/com/engine/common/util/CommonUtil.class differ diff --git a/target/classes/com/engine/common/util/DbTools.class b/target/classes/com/engine/common/util/DbTools.class index c82f93e..f82b202 100644 Binary files a/target/classes/com/engine/common/util/DbTools.class and b/target/classes/com/engine/common/util/DbTools.class differ diff --git a/target/classes/com/engine/common/util/Utils$1.class b/target/classes/com/engine/common/util/Utils$1.class index cebf50c..3fa2952 100644 Binary files a/target/classes/com/engine/common/util/Utils$1.class and b/target/classes/com/engine/common/util/Utils$1.class differ diff --git a/target/classes/com/engine/common/util/Utils$2.class b/target/classes/com/engine/common/util/Utils$2.class index aff4403..6cce080 100644 Binary files a/target/classes/com/engine/common/util/Utils$2.class and b/target/classes/com/engine/common/util/Utils$2.class differ diff --git a/target/classes/com/engine/common/util/Utils$3.class b/target/classes/com/engine/common/util/Utils$3.class index 0c44ca9..f10d866 100644 Binary files a/target/classes/com/engine/common/util/Utils$3.class and b/target/classes/com/engine/common/util/Utils$3.class differ diff --git a/target/classes/com/engine/common/util/Utils.class b/target/classes/com/engine/common/util/Utils.class index 24bc06b..5d320e7 100644 Binary files a/target/classes/com/engine/common/util/Utils.class and b/target/classes/com/engine/common/util/Utils.class differ diff --git a/target/test-classes/Test$1.class b/target/test-classes/Test$1.class new file mode 100644 index 0000000..5283186 Binary files /dev/null and b/target/test-classes/Test$1.class differ diff --git a/target/test-classes/Test$10.class b/target/test-classes/Test$10.class new file mode 100644 index 0000000..d6a15f5 Binary files /dev/null and b/target/test-classes/Test$10.class differ diff --git a/target/test-classes/Test$11.class b/target/test-classes/Test$11.class new file mode 100644 index 0000000..8557426 Binary files /dev/null and b/target/test-classes/Test$11.class differ diff --git a/target/test-classes/Test$12.class b/target/test-classes/Test$12.class new file mode 100644 index 0000000..a0297c4 Binary files /dev/null and b/target/test-classes/Test$12.class differ diff --git a/target/test-classes/Test$13.class b/target/test-classes/Test$13.class new file mode 100644 index 0000000..fb56f32 Binary files /dev/null and b/target/test-classes/Test$13.class differ diff --git a/target/test-classes/Test$2.class b/target/test-classes/Test$2.class new file mode 100644 index 0000000..ae31c7f Binary files /dev/null and b/target/test-classes/Test$2.class differ diff --git a/target/test-classes/Test$3.class b/target/test-classes/Test$3.class new file mode 100644 index 0000000..d7f96c5 Binary files /dev/null and b/target/test-classes/Test$3.class differ diff --git a/target/test-classes/Test$4.class b/target/test-classes/Test$4.class new file mode 100644 index 0000000..e76e211 Binary files /dev/null and b/target/test-classes/Test$4.class differ diff --git a/target/test-classes/Test$5.class b/target/test-classes/Test$5.class new file mode 100644 index 0000000..9c4b390 Binary files /dev/null and b/target/test-classes/Test$5.class differ diff --git a/target/test-classes/Test$6.class b/target/test-classes/Test$6.class new file mode 100644 index 0000000..0f3710d Binary files /dev/null and b/target/test-classes/Test$6.class differ diff --git a/target/test-classes/Test$7.class b/target/test-classes/Test$7.class new file mode 100644 index 0000000..c461429 Binary files /dev/null and b/target/test-classes/Test$7.class differ diff --git a/target/test-classes/Test$8.class b/target/test-classes/Test$8.class new file mode 100644 index 0000000..f04b33c Binary files /dev/null and b/target/test-classes/Test$8.class differ diff --git a/target/test-classes/Test$9.class b/target/test-classes/Test$9.class new file mode 100644 index 0000000..573c1b5 Binary files /dev/null and b/target/test-classes/Test$9.class differ diff --git a/target/test-classes/Test.class b/target/test-classes/Test.class index 8f52d1b..e8051ec 100644 Binary files a/target/test-classes/Test.class and b/target/test-classes/Test.class differ diff --git a/target/test-classes/TestGetClockInPoint$1.class b/target/test-classes/TestGetClockInPoint$1.class new file mode 100644 index 0000000..f517a22 Binary files /dev/null and b/target/test-classes/TestGetClockInPoint$1.class differ diff --git a/target/test-classes/TestGetClockInPoint$2.class b/target/test-classes/TestGetClockInPoint$2.class new file mode 100644 index 0000000..69868ec Binary files /dev/null and b/target/test-classes/TestGetClockInPoint$2.class differ diff --git a/target/test-classes/TestGetClockInPoint$3.class b/target/test-classes/TestGetClockInPoint$3.class new file mode 100644 index 0000000..c371cf6 Binary files /dev/null and b/target/test-classes/TestGetClockInPoint$3.class differ diff --git a/target/test-classes/TestGetClockInPoint$4.class b/target/test-classes/TestGetClockInPoint$4.class new file mode 100644 index 0000000..bd9c0e4 Binary files /dev/null and b/target/test-classes/TestGetClockInPoint$4.class differ diff --git a/target/test-classes/TestGetClockInPoint$5.class b/target/test-classes/TestGetClockInPoint$5.class new file mode 100644 index 0000000..14a51fb Binary files /dev/null and b/target/test-classes/TestGetClockInPoint$5.class differ diff --git a/target/test-classes/TestGetClockInPoint$6.class b/target/test-classes/TestGetClockInPoint$6.class new file mode 100644 index 0000000..7993bd7 Binary files /dev/null and b/target/test-classes/TestGetClockInPoint$6.class differ diff --git a/target/test-classes/TestGetClockInPoint$7.class b/target/test-classes/TestGetClockInPoint$7.class new file mode 100644 index 0000000..b5031cf Binary files /dev/null and b/target/test-classes/TestGetClockInPoint$7.class differ diff --git a/target/test-classes/TestGetClockInPoint.class b/target/test-classes/TestGetClockInPoint.class new file mode 100644 index 0000000..a81fc98 Binary files /dev/null and b/target/test-classes/TestGetClockInPoint.class differ diff --git a/test/Test.java b/test/Test.java index d45c347..eacb23e 100644 --- a/test/Test.java +++ b/test/Test.java @@ -1,11 +1,25 @@ +import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd; +import com.engine.attendance.attendanceanalysis.service.UtilService; +import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl; import com.engine.attendance.enums.AccountingUnitEnum; +import com.engine.common.util.DateUtil; +import com.engine.common.util.ServiceUtil; import com.engine.common.util.Utils; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import io.swagger.models.auth.In; import weaver.general.Util; import java.time.LocalDate; import java.time.temporal.ChronoUnit; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; public class Test { @@ -93,13 +107,48 @@ public class Test { // System.out.println("aa|aa|ss".split("\\|")[2]); // AccountingUnitEnum accountingUnitEnum = AccountingUnitEnum.HOUR; // AccountingUnitEnum accountingUnitEnum2 = AccountingUnitEnum.HOUR; +// List> lists = Lists.newArrayList(); +// lists.add(new HashMap(){{ +// put("item",102); +// put("betweenMinutes",15); +// put("itemduration",15.0); +// put("pointTime","2023-11-14 09:00"); +// }}); +// lists.add(new HashMap(){{ +// put("item",7); +// put("itemduration",1); +// put("pointTime","2023-11-14 13:00"); +// }}); +// lists.add(new HashMap(){{ +// put("item",11); +// put("betweenMinutes",13); +// put("itemduration",13.0); +// put("pointTime","2023-11-14 18:30"); +// }}); +// lists = lists.stream().filter(e -> e.get("betweenMinutes") != null).collect(Collectors.toList()); +// lists = lists.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); +// +// System.out.println(lists); +// +// Map param = Maps.newHashMap(); +// param.put("qjsc","0.5"); +// System.out.println(Double.valueOf(Double.valueOf(param.get("qjsc").toString())*60).intValue()); + System.out.println(DateUtil.getCurrentDateMinusDay(2)); + //System.out.println(lists.hashCode()); +// List lists2 = lists.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); +// lists.addAll(lists2); +// lists.addAll(lists2); +// System.out.println(lists2); +// +// System.out.println(Double.valueOf("1.00").intValue()*60); + // System.out.println(DateUtil.getTime("2023-11-15 10:00:00").compareTo(DateUtil.getTime("2023-11-15 09:00:00"))); //long numDays = DateUtil.getBetWeenMinutes("2023-11-08 17:40","2023-11-08 16:30"); // BigDecimal duration = new BigDecimal(5); // BigDecimal hsl = new BigDecimal(0.6); // System.out.println(duration.divide(hsl,BigDecimal.ROUND_DOWN).multiply(hsl).add(hsl,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue()); // System.out.println(DateUtil.AfterMinutes("2023-11-08 15:40:05",numDays/2)); - System.out.println(Integer.valueOf(Util.null2String(null))); + // System.out.println(Integer.valueOf(Util.null2String(null))); // List> clockInTimeList = Lists.newArrayList(); // clockInTimeList.add(new HashMap(){{ @@ -120,10 +169,8 @@ public class Test { // put("signtime","11:05:43"); // }}); // System.out.println(Utils.getNearestClcokInTimeCmd("2023-11-12 08:46:43",clockInTimeList)); - - - - // System.out.println(DateUtil.getTime("2023-10-30 23:00").compareTo(DateUtil.getTime("2023-10-30 22:01"))); +// + // testGetClockInTimeItemCmd(); //System.out.println(DateUtil.beforeDay("2023-10-31",1)); // List> personGroupOrganizationList = Lists.newArrayList(); // personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}}); @@ -151,4 +198,165 @@ public class Test { long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); return Math.toIntExact(daysBetween); } + + + /** + * 测试获取当天打卡测试类 + */ + public static void testGetClockInTimeItemCmd(){ + String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(2); + List> dataList = Lists.newArrayList(); + dataList.add(new HashMap(){{ + put("signtime","23:50:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-11"); + }}); + + dataList.add(new HashMap(){{ + put("signtime","01:10:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","01:20:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","09:15:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","12:17:00"); + put("id","49"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","18:17:00"); + put("id","49"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","01:17:00"); + put("id","49"); + put("userid","53"); + put("signdate","2023-11-13"); + }}); + dataList.add(new HashMap(){{ + put("signtime","03:17:00"); + put("id","49"); + put("userid","53"); + put("signdate","2023-11-13"); + }}); + + Map>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); + List> schedulingList = Lists.newArrayList(); + schedulingList.add(new HashMap(){{ + put("edsc","9.50"); + put("bdlx","0"); + put("jsdk","0"); + put("tqdkfzs","120"); + put("sfkt","1"); + put("dtjssj","09:00"); + put("zddxfz","30"); + put("bcxx","25"); + put("dxhs","5"); + put("bcsdxx","09:00-13:00|13:00-18:30"); + put("sfdx","0"); + put("dtkssj","01:00"); + put("thdkfzs","120"); + put("ksdk","1"); + put("rqlx","11"); + }}); + schedulingList.add(new HashMap(){{ + put("edsc","9.50"); + put("bdlx","0"); + put("jsdk","1"); + put("tqdkfzs","60"); + put("sfkt","1"); + put("dtjssj","13:00"); + put("zddxfz","30"); + put("bcxx","25"); + put("dxhs","5"); + put("bcsdxx","09:00-13:00|13:00-18:30"); + put("sfdx","0"); + put("dtkssj","09:00"); + put("thdkfzs","60"); + put("ksdk","1"); + put("rqlx","11"); + }}); + schedulingList.add(new HashMap(){{ + put("edsc","9.50"); + put("bdlx","0"); + put("jsdk","1"); + put("tqdkfzs","60"); + put("sfkt","1"); + put("dtjssj","18:00"); + put("zddxfz","30"); + put("bcxx","25"); + put("dxhs","5"); + put("bcsdxx","09:00-13:00|13:00-18:30"); + put("sfdx","0"); + put("dtkssj","03:00"); + put("thdkfzs","60"); + put("ksdk","0"); + put("rqlx","11"); + }}); + schedulingList.add(new HashMap(){{ + put("edsc","9.50"); + put("bdlx","0"); + put("jsdk","0"); + put("tqdkfzs","60"); + put("sfkt","1"); + put("dtjssj","21:00"); + put("zddxfz","30"); + put("bcxx","25"); + put("dxhs","5"); + put("bcsdxx","09:00-13:00|13:00-18:30"); + put("sfdx","0"); + put("dtkssj","18:00"); + put("thdkfzs","60"); + put("ksdk","0"); + put("rqlx","11"); + }}); + schedulingList.add(new HashMap(){{ + put("edsc","9.50"); + put("bdlx","0"); + put("jsdk","1"); + put("tqdkfzs","60"); + put("sfkt","1"); + put("dtjssj","01:00"); + put("zddxfz","30"); + put("bcxx","25"); + put("dxhs","5"); + put("bcsdxx","09:00-13:00|13:00-18:30"); + put("sfdx","0"); + put("dtkssj","21:00"); + put("thdkfzs","60"); + put("ksdk","0"); + put("rqlx","11"); + }}); + + Map>> schedulingResultsMap = Maps.newHashMap(); + schedulingResultsMap.put("2023-11-12",schedulingList); + schedulingResultsMap.put("2023-11-13",schedulingList); + schedulingResultsMap.put("2023-11-11",schedulingList); + + + Map params = Maps.newHashMap(); + params.put("date",beforeOneDayDate); + params.put("clockInTimeCollect",collect); + params.put("schedulingResultCollect",schedulingResultsMap); + + Map beforeOneDayClockInTimeList = new GetClockInTimeItemCmd(params).execute(null); + System.out.println(beforeOneDayClockInTimeList); + + } } diff --git a/test/TestGetClockInPoint.java b/test/TestGetClockInPoint.java new file mode 100644 index 0000000..dca043d --- /dev/null +++ b/test/TestGetClockInPoint.java @@ -0,0 +1,197 @@ +import com.engine.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper; +import com.engine.attendance.enums.CheckBoxEnum; +import com.engine.attendance.enums.ClockPointEnum; +import com.engine.common.util.DateUtil; +import com.engine.common.util.Utils; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TestGetClockInPoint { + public static void main(String[] args) { + + List> schedulingList = Lists.newArrayList(); + schedulingList.add(new HashMap(){{ + put("edsc","9.50"); + put("bdlx","0"); + put("jsdk","1"); + put("tqdkfzs","60"); + put("sfkt","1"); + put("dtjssj","13:00"); + put("zddxfz","30"); + put("bcxx","25"); + put("dxhs","5"); + put("bcsdxx","09:00-13:00|13:00-18:30"); + put("sfdx","0"); + put("dtkssj","09:00"); + put("thdkfzs","60"); + put("ksdk","1"); + put("rqlx","11"); + }}); + schedulingList.add(new HashMap(){{ + put("edsc","9.50"); + put("bdlx","0"); + put("jsdk","1"); + put("tqdkfzs","60"); + put("sfkt","1"); + put("dtjssj","18:00"); + put("zddxfz","30"); + put("bcxx","25"); + put("dxhs","5"); + put("bcsdxx","09:00-13:00|13:00-18:30"); + put("sfdx","0"); + put("dtkssj","03:00"); + put("thdkfzs","60"); + put("ksdk","0"); + put("rqlx","11"); + }}); + + List> dataList = Lists.newArrayList(); + dataList.add(new HashMap(){{ + put("signtime","08:45:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","09:15:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","10:15:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","13:01:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); + dataList.add(new HashMap(){{ + put("signtime","15:30:00"); + put("id","48"); + put("userid","53"); + put("signdate","2023-11-12"); + }}); +// dataList.add(new HashMap(){{ +// put("signtime","18:15:00"); +// put("id","48"); +// put("userid","53"); +// put("signdate","2023-11-12"); +// }}); + System.out.println(getClockInPoint("2023-11-12",schedulingList,dataList)); + } + public static List>> getClockInPoint(String analysisDate, List> needClockInSchedule, List> clockInTimeList){ + List>> clcokInTimeData = Lists.newArrayList(); + + for (Map needClockIn :needClockInSchedule){ + if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){ + String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); + String dtjssj = analysisDate+" "+needClockIn.get("dtjssj"); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ + dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+needClockIn.get("dtjssj"); + } + int tqdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("tqdkfzs"))); + Map> ksdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtkssj,clockInTimeList); + String timeType = ClockPointEnum.EMPTY.getKey(); + Map> clcokInTimeMap = Maps.newHashMap(); + if (ksdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ + timeType=ClockPointEnum.EQUAL.getKey(); + } + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ + String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.beforeMinutes(dtkssj,tqdkfzs))) >=0){ + //打卡时间大于等于最早打卡时间 + timeType=ClockPointEnum.BEFORE.getKey(); + } + } + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ + String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtjssj)) < 0){ + //打卡时间小于结束时间 + timeType=ClockPointEnum.AFTER.getKey(); + } + } + clcokInTimeMap.put(dtkssj+"|"+ClockPointEnum.START.getKey()+"|"+timeType,ksdkNearestClcokInTime.get(timeType)); + clcokInTimeData.add(clcokInTimeMap); + } + if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("jsdk"))){ + String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); + String dtjssj = analysisDate+" "+needClockIn.get("dtjssj"); + int thdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("thdkfzs"))); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ + dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+needClockIn.get("dtjssj"); + } + Map> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj,clockInTimeList); + + String timeType = ClockPointEnum.EMPTY.getKey(); + Map> clcokInTimeMap = Maps.newHashMap(); + if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ + timeType=ClockPointEnum.EQUAL.getKey(); + } + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ + String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(dtjssj,thdkfzs))) <=0){ + timeType=ClockPointEnum.AFTER.getKey(); + } + } + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ + String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtkssj)) >0){ + timeType=ClockPointEnum.BEFORE.getKey(); + } + } + clcokInTimeMap.put(dtjssj+"|"+ClockPointEnum.END.getKey()+"|"+timeType,jsdkNearestClcokInTime.get(timeType)); + clcokInTimeData.add(clcokInTimeMap); + } + } + //当有2笔需要打卡时,可能会有打卡歧义的情况,歧义情况取2个时间点的中间值,当打卡时间小于中间值归属前一个打卡,大于则相反 + if (clcokInTimeData.size() >1){ + for (int i=0;i> beforeClcokInTimeData = clcokInTimeData.get(i); + Map> afterClcokInTimeData = clcokInTimeData.get(i+1); + Map beforeClcokInTimeMap = null; + String beforeClcokInTime = ""; + String afterClcokInTime = ""; + Map afterClcokInTimeMap = null; + for (Map.Entry> beforeEntry :beforeClcokInTimeData.entrySet()){ + beforeClcokInTimeMap = beforeEntry.getValue(); + beforeClcokInTime = beforeEntry.getKey(); + } + for (Map.Entry> afterEntry :afterClcokInTimeData.entrySet()){ + afterClcokInTimeMap = afterEntry.getValue(); + afterClcokInTime = afterEntry.getKey(); + } + //重复 + if (beforeClcokInTimeMap != null && beforeClcokInTimeMap == afterClcokInTimeMap ){ + String beforeTime = beforeClcokInTime.split("\\|")[0]; + String afterTime = afterClcokInTime.split("\\|")[0]; + long betWeenMinutes = DateUtil.getBetWeenMinutes(beforeTime,afterTime); + + String middileTime = DateUtil.AfterMinutes(beforeTime,betWeenMinutes/2); + + String signdateTime = beforeClcokInTimeMap.get("signdate") +" "+beforeClcokInTimeMap.get("signtime"); + + if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) <=0){ + //该打卡归属前一个打卡点 + afterClcokInTimeData.put(afterClcokInTime,null); + }else if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) >0){ + //该打卡归属后一个打卡点 + beforeClcokInTimeData.put(beforeClcokInTime,null); + } + } + } + } + + return clcokInTimeData; + } + +}