zm_dev
liuliang 1 year ago
parent adf1d6ce86
commit 9c728cd1b4

@ -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] -
>> targetcom.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] -
>> targetcom.engine.workplan.cmd.workplanBase.BeforeWorkplanDelCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyDeleteWorkPlanCmd
>> targetcom.engine.workflow.cmd.signInput.GetNodeSignSetCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.GetOdocSignInputSetCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.GetNodeRightInfo
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeRightInfo
>> targetcom.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
>> targetcom.engine.workflow.cmd.workflowPath.list.GetWorkflowListConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.list.GetAddOdocWFFormCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.DoSaveNodeCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuDoSaveNodeCmd->com.engine.plugin.odoc.command.workflowPath.node.DeleteOdocNodeCfgCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.addInOperate.GetAddInOperateConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetAddInOperateConditionCmd
>> targetcom.engine.crm.cmd.chance.FormUpdateCmd
>> proxy->com.customization.esb.crm.chance.ProxyEditChanceCmd
>> targetcom.engine.crm.cmd.customer.CustomerSaveCmd
>> proxy->com.customization.esb.crm.customer.ProxyNewCustomerCmd
>> targetcom.engine.workplan.cmd.workplanBase.AfterWorkplanNormalCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyAfterWorkplanNormalCmd
>> targetcom.engine.workflow.cmd.requestForm.BatchSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeBatchCmd
>> targetcom.api.prj.cmd.prjBoard.DoDelBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoDelBoardStageCmd
>> targetcom.engine.workflow.cmd.workflowPath.nodeLink.SaveNodeLinkCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.nodeLink.DeleteOdocNodelinkExtCmd
>> targetcom.engine.cube.cmd.app.WaterMarkImg
>> proxy->com.customization.cube.list.CustomChangeListHrefLinkCmd
>> targetcom.engine.crm.cmd.customer.CustomerEditCmd
>> proxy->com.customization.esb.crm.customer.ProxyEditCustomerCmd
>> targetcom.engine.meeting.cmd.meetingbase.NewMeetingCmd
>> proxy->com.customization.esb.meeting.meetingbase.ProxyNewMeetingCmd
>> targetcom.engine.workflow.cmd.signInput.GetSignInputInfoCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestSignInput.OdocSignInputCmd
>> targetcom.engine.cube.cmd.app.GetAppListCmd
>> proxy->com.engine.plugin.mode.license.Proxy_GetAppListCmd
>> targetcom.api.prj.cmd.project.DoProjectOperationCmd
>> proxy->com.customization.esb.proj.project.ProxyDoProjectOperationCmd
>> targetcom.engine.workflowDesign.cmd.WorkflowXmlParserCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicCmd
>> targetcom.api.prj.cmd.project.DoPrjTempletStageSaveCmd
>> proxy->com.customization.esb.proj.project.ProxySavePrjTempletStageCmd
>> targetcom.engine.workflow.cmd.requestForm.DoTakEndCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSIgnReceiveTimeDoTakEndCmd
>> targetcom.engine.crm.cmd.contacter.CreateCmd
>> proxy->com.customization.esb.crm.contacter.ProxyNewContacterCmd
>> targetcom.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
>> targetcom.engine.workflowDesign.cmd.GetOperateDataCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicOperatorCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocSaveMenuSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocSaveMenuSettingsCmd
>> targetcom.engine.odoc.cmd.odocMenuOperate.doEndPersonTreatCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeEndTreatCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.GetBaseInfoConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.GetBaseInfoSettingCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.signSet.DoSignSetSaveCmd
>> proxy->com.engine.plugin.workflow.command.CustomDoSignSetSaveCmd
>> targetcom.engine.crm.cmd.chance.DeleteCmd
>> proxy->com.customization.esb.crm.chance.ProxyDeleteChanceCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetMenuSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetMenuSettingsCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetActionSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetActionSettingsCmd
>> targetcom.engine.odoc.cmd.odocrequest.FlowNextCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeFlowCmd
>> targetcom.engine.workflow.cmd.workflowType.DoSaveCmd
>> proxy->com.engine.plugin.workflow.command.CustomDoSave2Cmd->com.engine.plugin.workflow.command.CustomDoSave3Cmd->com.engine.plugin.workflow.command.CustomDoSaveCmd
>> targetcom.engine.workflowDesign.cmd.GetWfInfoCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetWfInfoCmd->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetWfInfoCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.GetNodeSessionkeyCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuCmd
>> targetcom.engine.crm.cmd.contacter.DeleteCmd
>> proxy->com.customization.esb.crm.contacter.ProxyDeleteContacterCmd
>> targetcom.engine.odoc.cmd.odocrequest.ForceArchiveCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForceArchiveCmd
>> targetcom.engine.meeting.cmd.meetingField.GetViewMeetingFieldCmd
>> proxy->com.customization.meeting.qc854537.CustomGetViewMeetingFieldCmd
>> targetcom.api.common.cmd.login.DoUserSessionCmd
>> proxy->com.engine.plugin.hrm.command.MyDoUserSessionCmd
>> targetcom.engine.hrm.cmd.test.GetSearchConditionCmd
>> proxy->com.engine.plugin.hrm.command.GetMySearchConditionCmd
>> targetcom.engine.crm.cmd.chance.FormSaveCmd
>> proxy->com.customization.esb.crm.chance.ProxyNewChanceCmd
>> targetcom.engine.crm.cmd.customer.CrmDeleteCmd
>> proxy->com.customization.esb.crm.customer.ProxyDeleteCustomerCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.addInOperate.GetPreAddInOperateConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetPreAddInOperateConditionCmd
>> targetcom.api.prj.cmd.prjBoard.DoEditBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoEditBoardStageCmd
>> targetcom.engine.odoc.cmd.updateSign.setting.SelectFreeFlowDatasCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowIsFree4OdocProxyCmd
>> targetcom.engine.odoc.cmd.updateOperator.PlusSignatureCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAddDelCmd
>> targetcom.api.prj.cmd.prjBoard.DoAddBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoAddBoardStageCmd
>> targetcom.engine.workflow.cmd.requestForm.RequestManager_FlowNextNodeCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestNextNodeCmd
>> targetcom.engine.odoc.cmd.odocWorkflow.OdocAddWorkflowCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignAddWorkflowCmd
>> targetcom.engine.workflow.cmd.requestForm.RemarkSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRemarkCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoAddWFCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.SaveAddWFCmd
>> targetcom.engine.workflow.cmd.workflowPath.nodeLink.GetNodeLinkCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeLinkCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoSaveNewVersionCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSaveNewVersionTabCmd->com.engine.plugin.odoc.command.workflowPath.SaveNewVersionCmd
>> targetcom.engine.workplan.cmd.workplanBase.AddAndEditWorkPlanCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyAddAndEditWorkPlanCmd
>> targetcom.engine.workflow.cmd.requestForm.WFManager_SaveNewNodeCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowWFManager_SaveNewNodeCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoEditWFCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.SaveEditWFCmd
>> targetcom.engine.workflow.cmd.requestLog.LoadRequestLogBaseInfoCmd
>> proxy->com.engine.plugin.workflow.command.CustomLoadRequestLogBaseInfoCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.DoRestoreDeleteNodeCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.node.RestoreOdocNodeCfgCmd
>> targetcom.engine.workflow.cmd.monitor.DoDeleteCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocWorkflowDeleteProxyCmd
>> targetcom.engine.meeting.cmd.meetingbase.MeetingCancelCmd
>> proxy->com.customization.esb.meeting.meetingbase.ProxyCancelMeetingCmd
>> targetcom.engine.odoc.cmd.updateSign.append.AppendSaveLogCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAppendSignCmd
>> targetcom.api.prj.cmd.task.DoTaskOperationCmd
>> proxy->com.customization.esb.proj.task.ProxyDoTaskOperationCmd
>> targetcom.engine.workflow.cmd.requestForm.LoadParamCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.LoadOdocFormParam->com.engine.plugin.workflow.command.HaoQianPromptInfoCmd
>> targetcom.engine.crm.cmd.contacter.EditCmd
>> proxy->com.customization.esb.crm.contacter.ProxyEditContacterCmd
>> targetcom.engine.workflow.cmd.requestForm.ForwardSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForwardCmd
>> targetcom.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
>> targetcom.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] -
>> targetcom.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] -
>> targetcom.engine.workplan.cmd.workplanBase.BeforeWorkplanDelCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyDeleteWorkPlanCmd
>> targetcom.engine.workflow.cmd.signInput.GetNodeSignSetCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.GetOdocSignInputSetCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.GetNodeRightInfo
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeRightInfo
>> targetcom.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
>> targetcom.engine.workflow.cmd.workflowPath.list.GetWorkflowListConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.list.GetAddOdocWFFormCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.DoSaveNodeCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuDoSaveNodeCmd->com.engine.plugin.odoc.command.workflowPath.node.DeleteOdocNodeCfgCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.addInOperate.GetAddInOperateConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetAddInOperateConditionCmd
>> targetcom.engine.crm.cmd.chance.FormUpdateCmd
>> proxy->com.customization.esb.crm.chance.ProxyEditChanceCmd
>> targetcom.engine.crm.cmd.customer.CustomerSaveCmd
>> proxy->com.customization.esb.crm.customer.ProxyNewCustomerCmd
>> targetcom.engine.workplan.cmd.workplanBase.AfterWorkplanNormalCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyAfterWorkplanNormalCmd
>> targetcom.engine.workflow.cmd.requestForm.BatchSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeBatchCmd
>> targetcom.api.prj.cmd.prjBoard.DoDelBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoDelBoardStageCmd
>> targetcom.engine.workflow.cmd.workflowPath.nodeLink.SaveNodeLinkCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.nodeLink.DeleteOdocNodelinkExtCmd
>> targetcom.engine.cube.cmd.app.WaterMarkImg
>> proxy->com.customization.cube.list.CustomChangeListHrefLinkCmd
>> targetcom.engine.crm.cmd.customer.CustomerEditCmd
>> proxy->com.customization.esb.crm.customer.ProxyEditCustomerCmd
>> targetcom.engine.meeting.cmd.meetingbase.NewMeetingCmd
>> proxy->com.customization.esb.meeting.meetingbase.ProxyNewMeetingCmd
>> targetcom.engine.workflow.cmd.signInput.GetSignInputInfoCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestSignInput.OdocSignInputCmd
>> targetcom.engine.cube.cmd.app.GetAppListCmd
>> proxy->com.engine.plugin.mode.license.Proxy_GetAppListCmd
>> targetcom.api.prj.cmd.project.DoProjectOperationCmd
>> proxy->com.customization.esb.proj.project.ProxyDoProjectOperationCmd
>> targetcom.engine.workflowDesign.cmd.WorkflowXmlParserCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicCmd
>> targetcom.api.prj.cmd.project.DoPrjTempletStageSaveCmd
>> proxy->com.customization.esb.proj.project.ProxySavePrjTempletStageCmd
>> targetcom.engine.workflow.cmd.requestForm.DoTakEndCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSIgnReceiveTimeDoTakEndCmd
>> targetcom.engine.crm.cmd.contacter.CreateCmd
>> proxy->com.customization.esb.crm.contacter.ProxyNewContacterCmd
>> targetcom.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
>> targetcom.engine.workflowDesign.cmd.GetOperateDataCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicOperatorCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocSaveMenuSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocSaveMenuSettingsCmd
>> targetcom.engine.odoc.cmd.odocMenuOperate.doEndPersonTreatCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeEndTreatCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.GetBaseInfoConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.GetBaseInfoSettingCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.signSet.DoSignSetSaveCmd
>> proxy->com.engine.plugin.workflow.command.CustomDoSignSetSaveCmd
>> targetcom.engine.crm.cmd.chance.DeleteCmd
>> proxy->com.customization.esb.crm.chance.ProxyDeleteChanceCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetMenuSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetMenuSettingsCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetActionSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetActionSettingsCmd
>> targetcom.engine.odoc.cmd.odocrequest.FlowNextCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeFlowCmd
>> targetcom.engine.workflow.cmd.workflowType.DoSaveCmd
>> proxy->com.engine.plugin.workflow.command.CustomDoSave2Cmd->com.engine.plugin.workflow.command.CustomDoSave3Cmd->com.engine.plugin.workflow.command.CustomDoSaveCmd
>> targetcom.engine.workflowDesign.cmd.GetWfInfoCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetWfInfoCmd->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetWfInfoCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.GetNodeSessionkeyCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuCmd
>> targetcom.engine.crm.cmd.contacter.DeleteCmd
>> proxy->com.customization.esb.crm.contacter.ProxyDeleteContacterCmd
>> targetcom.engine.odoc.cmd.odocrequest.ForceArchiveCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForceArchiveCmd
>> targetcom.engine.meeting.cmd.meetingField.GetViewMeetingFieldCmd
>> proxy->com.customization.meeting.qc854537.CustomGetViewMeetingFieldCmd
>> targetcom.api.common.cmd.login.DoUserSessionCmd
>> proxy->com.engine.plugin.hrm.command.MyDoUserSessionCmd
>> targetcom.engine.hrm.cmd.test.GetSearchConditionCmd
>> proxy->com.engine.plugin.hrm.command.GetMySearchConditionCmd
>> targetcom.engine.crm.cmd.chance.FormSaveCmd
>> proxy->com.customization.esb.crm.chance.ProxyNewChanceCmd
>> targetcom.engine.crm.cmd.customer.CrmDeleteCmd
>> proxy->com.customization.esb.crm.customer.ProxyDeleteCustomerCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.addInOperate.GetPreAddInOperateConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetPreAddInOperateConditionCmd
>> targetcom.api.prj.cmd.prjBoard.DoEditBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoEditBoardStageCmd
>> targetcom.engine.odoc.cmd.updateSign.setting.SelectFreeFlowDatasCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowIsFree4OdocProxyCmd
>> targetcom.engine.odoc.cmd.updateOperator.PlusSignatureCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAddDelCmd
>> targetcom.api.prj.cmd.prjBoard.DoAddBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoAddBoardStageCmd
>> targetcom.engine.workflow.cmd.requestForm.RequestManager_FlowNextNodeCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestNextNodeCmd
>> targetcom.engine.odoc.cmd.odocWorkflow.OdocAddWorkflowCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignAddWorkflowCmd
>> targetcom.engine.workflow.cmd.requestForm.RemarkSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRemarkCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoAddWFCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.SaveAddWFCmd
>> targetcom.engine.workflow.cmd.workflowPath.nodeLink.GetNodeLinkCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeLinkCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoSaveNewVersionCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSaveNewVersionTabCmd->com.engine.plugin.odoc.command.workflowPath.SaveNewVersionCmd
>> targetcom.engine.workplan.cmd.workplanBase.AddAndEditWorkPlanCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyAddAndEditWorkPlanCmd
>> targetcom.engine.workflow.cmd.requestForm.WFManager_SaveNewNodeCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowWFManager_SaveNewNodeCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoEditWFCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.SaveEditWFCmd
>> targetcom.engine.workflow.cmd.requestLog.LoadRequestLogBaseInfoCmd
>> proxy->com.engine.plugin.workflow.command.CustomLoadRequestLogBaseInfoCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.DoRestoreDeleteNodeCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.node.RestoreOdocNodeCfgCmd
>> targetcom.engine.workflow.cmd.monitor.DoDeleteCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocWorkflowDeleteProxyCmd
>> targetcom.engine.meeting.cmd.meetingbase.MeetingCancelCmd
>> proxy->com.customization.esb.meeting.meetingbase.ProxyCancelMeetingCmd
>> targetcom.engine.odoc.cmd.updateSign.append.AppendSaveLogCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAppendSignCmd
>> targetcom.api.prj.cmd.task.DoTaskOperationCmd
>> proxy->com.customization.esb.proj.task.ProxyDoTaskOperationCmd
>> targetcom.engine.workflow.cmd.requestForm.LoadParamCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.LoadOdocFormParam->com.engine.plugin.workflow.command.HaoQianPromptInfoCmd
>> targetcom.engine.crm.cmd.contacter.EditCmd
>> proxy->com.customization.esb.crm.contacter.ProxyEditContacterCmd
>> targetcom.engine.workflow.cmd.requestForm.ForwardSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForwardCmd
>> targetcom.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
>> targetcom.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] -
>> targetcom.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] -
>> targetcom.engine.workplan.cmd.workplanBase.BeforeWorkplanDelCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyDeleteWorkPlanCmd
>> targetcom.engine.workflow.cmd.signInput.GetNodeSignSetCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.GetOdocSignInputSetCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.GetNodeRightInfo
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeRightInfo
>> targetcom.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
>> targetcom.engine.workflow.cmd.workflowPath.list.GetWorkflowListConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.list.GetAddOdocWFFormCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.DoSaveNodeCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuDoSaveNodeCmd->com.engine.plugin.odoc.command.workflowPath.node.DeleteOdocNodeCfgCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.addInOperate.GetAddInOperateConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetAddInOperateConditionCmd
>> targetcom.engine.crm.cmd.chance.FormUpdateCmd
>> proxy->com.customization.esb.crm.chance.ProxyEditChanceCmd
>> targetcom.engine.crm.cmd.customer.CustomerSaveCmd
>> proxy->com.customization.esb.crm.customer.ProxyNewCustomerCmd
>> targetcom.engine.workplan.cmd.workplanBase.AfterWorkplanNormalCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyAfterWorkplanNormalCmd
>> targetcom.engine.workflow.cmd.requestForm.BatchSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeBatchCmd
>> targetcom.api.prj.cmd.prjBoard.DoDelBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoDelBoardStageCmd
>> targetcom.engine.workflow.cmd.workflowPath.nodeLink.SaveNodeLinkCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.nodeLink.DeleteOdocNodelinkExtCmd
>> targetcom.engine.cube.cmd.app.WaterMarkImg
>> proxy->com.customization.cube.list.CustomChangeListHrefLinkCmd
>> targetcom.engine.crm.cmd.customer.CustomerEditCmd
>> proxy->com.customization.esb.crm.customer.ProxyEditCustomerCmd
>> targetcom.engine.meeting.cmd.meetingbase.NewMeetingCmd
>> proxy->com.customization.esb.meeting.meetingbase.ProxyNewMeetingCmd
>> targetcom.engine.workflow.cmd.signInput.GetSignInputInfoCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestSignInput.OdocSignInputCmd
>> targetcom.engine.cube.cmd.app.GetAppListCmd
>> proxy->com.engine.plugin.mode.license.Proxy_GetAppListCmd
>> targetcom.api.prj.cmd.project.DoProjectOperationCmd
>> proxy->com.customization.esb.proj.project.ProxyDoProjectOperationCmd
>> targetcom.engine.workflowDesign.cmd.WorkflowXmlParserCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicCmd
>> targetcom.api.prj.cmd.project.DoPrjTempletStageSaveCmd
>> proxy->com.customization.esb.proj.project.ProxySavePrjTempletStageCmd
>> targetcom.engine.workflow.cmd.requestForm.DoTakEndCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSIgnReceiveTimeDoTakEndCmd
>> targetcom.engine.crm.cmd.contacter.CreateCmd
>> proxy->com.customization.esb.crm.contacter.ProxyNewContacterCmd
>> targetcom.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
>> targetcom.engine.workflowDesign.cmd.GetOperateDataCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestPic.OdocRequestPicOperatorCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocSaveMenuSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocSaveMenuSettingsCmd
>> targetcom.engine.odoc.cmd.odocMenuOperate.doEndPersonTreatCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeEndTreatCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.GetBaseInfoConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.GetBaseInfoSettingCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.signSet.DoSignSetSaveCmd
>> proxy->com.engine.plugin.workflow.command.CustomDoSignSetSaveCmd
>> targetcom.engine.crm.cmd.chance.DeleteCmd
>> proxy->com.customization.esb.crm.chance.ProxyDeleteChanceCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetMenuSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetMenuSettingsCmd
>> targetcom.engine.odoc.cmd.officialSettings.createDocByWf.OdocGetActionSettingsCmd
>> proxy->com.engine.plugin.odoc.command.odocSetting.Proxy_OdocGetActionSettingsCmd
>> targetcom.engine.odoc.cmd.odocrequest.FlowNextCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeFlowCmd
>> targetcom.engine.workflow.cmd.workflowType.DoSaveCmd
>> proxy->com.engine.plugin.workflow.command.CustomDoSave2Cmd->com.engine.plugin.workflow.command.CustomDoSave3Cmd->com.engine.plugin.workflow.command.CustomDoSaveCmd
>> targetcom.engine.workflowDesign.cmd.GetWfInfoCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetWfInfoCmd->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetWfInfoCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.GetNodeSessionkeyCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowRightMenuCmd
>> targetcom.engine.crm.cmd.contacter.DeleteCmd
>> proxy->com.customization.esb.crm.contacter.ProxyDeleteContacterCmd
>> targetcom.engine.odoc.cmd.odocrequest.ForceArchiveCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForceArchiveCmd
>> targetcom.engine.meeting.cmd.meetingField.GetViewMeetingFieldCmd
>> proxy->com.customization.meeting.qc854537.CustomGetViewMeetingFieldCmd
>> targetcom.api.common.cmd.login.DoUserSessionCmd
>> proxy->com.engine.plugin.hrm.command.MyDoUserSessionCmd
>> targetcom.engine.hrm.cmd.test.GetSearchConditionCmd
>> proxy->com.engine.plugin.hrm.command.GetMySearchConditionCmd
>> targetcom.engine.crm.cmd.chance.FormSaveCmd
>> proxy->com.customization.esb.crm.chance.ProxyNewChanceCmd
>> targetcom.engine.crm.cmd.customer.CrmDeleteCmd
>> proxy->com.customization.esb.crm.customer.ProxyDeleteCustomerCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.addInOperate.GetPreAddInOperateConditionCmd
>> proxy->com.engine.plugin.odoc.command.workflowPathNodeInfo.OdocGetPreAddInOperateConditionCmd
>> targetcom.api.prj.cmd.prjBoard.DoEditBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoEditBoardStageCmd
>> targetcom.engine.odoc.cmd.updateSign.setting.SelectFreeFlowDatasCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowIsFree4OdocProxyCmd
>> targetcom.engine.odoc.cmd.updateOperator.PlusSignatureCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAddDelCmd
>> targetcom.api.prj.cmd.prjBoard.DoAddBoardStageCmd
>> proxy->com.customization.esb.proj.prjboard.ProxyDoAddBoardStageCmd
>> targetcom.engine.workflow.cmd.requestForm.RequestManager_FlowNextNodeCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.OdocRequestNextNodeCmd
>> targetcom.engine.odoc.cmd.odocWorkflow.OdocAddWorkflowCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignAddWorkflowCmd
>> targetcom.engine.workflow.cmd.requestForm.RemarkSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeRemarkCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoAddWFCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.SaveAddWFCmd
>> targetcom.engine.workflow.cmd.workflowPath.nodeLink.GetNodeLinkCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowGetNodeLinkCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoSaveNewVersionCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocWorkflowSaveNewVersionTabCmd->com.engine.plugin.odoc.command.workflowPath.SaveNewVersionCmd
>> targetcom.engine.workplan.cmd.workplanBase.AddAndEditWorkPlanCmd
>> proxy->com.customization.esb.workplan.workplanbase.ProxyAddAndEditWorkPlanCmd
>> targetcom.engine.workflow.cmd.requestForm.WFManager_SaveNewNodeCmd
>> proxy->com.engine.plugin.odoc.command.rightMenuSetting.OdocWorkflowWFManager_SaveNewNodeCmd
>> targetcom.engine.workflow.cmd.workflowPath.baseInfo.DoEditWFCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.SaveEditWFCmd
>> targetcom.engine.workflow.cmd.requestLog.LoadRequestLogBaseInfoCmd
>> proxy->com.engine.plugin.workflow.command.CustomLoadRequestLogBaseInfoCmd
>> targetcom.engine.workflow.cmd.workflowPath.node.DoRestoreDeleteNodeCmd
>> proxy->com.engine.plugin.odoc.command.workflowPath.node.RestoreOdocNodeCfgCmd
>> targetcom.engine.workflow.cmd.monitor.DoDeleteCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocWorkflowDeleteProxyCmd
>> targetcom.engine.meeting.cmd.meetingbase.MeetingCancelCmd
>> proxy->com.customization.esb.meeting.meetingbase.ProxyCancelMeetingCmd
>> targetcom.engine.odoc.cmd.updateSign.append.AppendSaveLogCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeAppendSignCmd
>> targetcom.api.prj.cmd.task.DoTaskOperationCmd
>> proxy->com.customization.esb.proj.task.ProxyDoTaskOperationCmd
>> targetcom.engine.workflow.cmd.requestForm.LoadParamCmd
>> proxy->com.engine.plugin.odoc.command.odocRequestForm.LoadOdocFormParam->com.engine.plugin.workflow.command.HaoQianPromptInfoCmd
>> targetcom.engine.crm.cmd.contacter.EditCmd
>> proxy->com.customization.esb.crm.contacter.ProxyEditContacterCmd
>> targetcom.engine.workflow.cmd.requestForm.ForwardSubmitCmd
>> proxy->com.engine.plugin.odoc.command.signSetting.OdocSignReceiveTimeForwardCmd
>> targetcom.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
>> targetcom.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

@ -184,7 +184,7 @@ public class GetClockInTimeItemCmd extends AbstractCommonCommand<Map<String,Obje
}else if ("1".equals(aftersfkt) && "1".equals(nowsfkt)){
//前后2天都跨天
/** 当天 **/
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<String,Object> endNeedGetDateSchedule = needGetDateScheduling.get(needGetDateScheduling.size()-1);
//判断最晚打卡时间是否跨天
String nowkssj = needGetDate +" "+Util.null2String(endNeedGetDateSchedule.get("dtkssj"));
@ -255,7 +255,7 @@ public class GetClockInTimeItemCmd extends AbstractCommonCommand<Map<String,Obje
*/
public List<Map<String,Object>> computeEndTimeAdd(List<Map<String,Object>> afterNeedGetDateList,
List<Map<String,Object>> needGetDateScheduling,List<Map<String,Object>> 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<String,Object> endNeedGetDateSchedule = needGetDateScheduling.get(needGetDateScheduling.size()-1);
//判断最晚打卡时间是否跨天
String kssj = needGetDate +" "+Util.null2String(endNeedGetDateSchedule.get("dtkssj"));
@ -316,6 +316,7 @@ public class GetClockInTimeItemCmd extends AbstractCommonCommand<Map<String,Obje
String dateTime = date.get("signdate")+" "+date.get("signtime");
if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dateTime)) <=0){
resultList.add(date);
}
}
Map<String,Object> resultMap = resultList.stream().min(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get();

@ -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<Map<String
//项目
String item = Util.null2String(params.get("item"));
//项目时长
String itemduration = Util.null2String(params.get("itemduration"));
String itemduration = params.get("itemduration") == null ? null:params.get("itemduration").toString();
//是否异常
String cqzt = params.get("cqzt") == null ? "0":Util.null2String(params.get("cqzt"));
String formmodeid = Util.null2String(params.get("modeId"));
Map<String,Object> resultMap = Maps.newHashMap();
RecordSet rs = new RecordSet();
List<Map<String,Object>> classInfo = (List<Map<String,Object>>)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<Map<String,Object>> dataList = DbTools.getSqlToList(sql,userId,date);
//班次信息
if (params.get("classInfo") == null){
//当天没有排班,计入异常
noScheduling(params,rs);
noScheduling(params,rs,dataList);
return resultMap;
}
List<Map<String,Object>> classInfo = (List<Map<String,Object>>)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<Map<String,Object>> 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<Map<String
//没有出勤结果
sql = "select subcompanyid1,departmentid,jobtitle from hrmresource where id=?";
List<Map<String,Object>> 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<Map<String
*
* @param params
*/
public void noScheduling(Map<String,Object> params, RecordSet rs){
public void noScheduling(Map<String,Object> params, RecordSet rs,List<Map<String,Object>> 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<Map<String,Object>> 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]);
}
}
}

@ -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<String, List<Map<String,Object>>> 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********");
}

@ -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<String,Object> params);
List<Map<String,Object>> beLate(Map<String,Object> params);
/**
* 退
* @param params
* @return
*/
boolean leaveEarly(Map<String,Object> params);
List<Map<String,Object>> leaveEarly(Map<String,Object> params);
}

@ -0,0 +1,25 @@
package com.engine.attendance.attendanceanalysis.service;
import java.util.List;
import java.util.Map;
public interface AskForLeaveService {
/**
*
* @return
*/
List<Map<String,Object>> askForLeaveByTime(Map<String,Object> param);
/**
*
* @return
*/
List<Map<String,Object>> askForLeaveByDurationTime(Map<String,Object> param);
/**
*
* @param param
* @return
*/
boolean askForLeaveByHalfDay(Map<String,Object> param);
}

@ -0,0 +1,25 @@
package com.engine.attendance.attendanceanalysis.service;
import java.util.List;
import java.util.Map;
public interface EvectionService {
/**
*
* @return
*/
List<Map<String,Object>> evectionByTime(Map<String,Object> param);
/**
*
* @return
*/
List<Map<String,Object>> evectionByDurationTime(Map<String,Object> param);
/**
*
* @param param
* @return
*/
List<Map<String,Object>> evectionByHalfDay(Map<String,Object> param);
}

@ -9,14 +9,13 @@ import java.util.Map;
public interface ForgetClockInService {
/**
*
* @param params
* @return
*/
boolean forgetClockInAllDays(Map<String,Object> params);
List<Map<String,Object>> forgetClockInAllDays();
/**
*
* @param params
* @return
*/
boolean forgetClockIn(Map<String,Object> params);
List<Map<String,Object>> forgetClockIn(Map<String,Object> params);
}

@ -21,4 +21,11 @@ public interface UtilService {
* @return
*/
List<Map<String,Object>> getClockInTime(Map<String,Object> params);
/**
*
* @param params
*/
void recordItem(Map<String,Object> params);
}

@ -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<String, Object> params) {
public List<Map<String,Object>> beLate(Map<String, Object> params) {
//当前单条明细班次
Map<String, Object> classInfo = (Map<String, Object>)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<Map<String,Object>> 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<Map<String,Object>> 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<String,Object> 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<Map<String,Object>> 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<String,Object> 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<Map<String,Object>> 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<String, Object> params) {
public List<Map<String,Object>> leaveEarly(Map<String, Object> params) {
//当前单条明细班次
Map<String, Object> classInfo = (Map<String, Object>)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<Map<String,Object>> 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<Map<String,Object>> 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<Map<String,Object>> 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<String,Object> 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<Map<String,Object>> 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;
}
/**

@ -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<Map<String,Object>> askForLeaveByTime(Map<String, Object> param) {
//人员迟到、早退、漏卡等记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)param.get("abnormalClockInList");
//请假开始时间
String kssj = Util.null2String(param.get("kssj"));
//请假结束时间
String jssj = Util.null2String(param.get("jssj"));
for (int i=0;i<abnormalClockInList.size();i++){
String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime"));
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <=0 &&
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >=0){
abnormalClockInList.remove(i);
i--;
}
}
return abnormalClockInList;
}
@Override
public boolean askForLeaveByHalfDay(Map<String, Object> param) {
return false;
}
@Override
public List<Map<String,Object>> askForLeaveByDurationTime(Map<String, Object> param) {
//人员迟到、早退、漏卡等记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)param.get("abnormalClockInList");
List<Map<String,Object>> 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;
}
}

@ -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<Map<String, Object>> evectionByTime(Map<String, Object> param) {
//人员迟到、早退、漏卡等记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)param.get("abnormalClockInList");
//请假开始时间
String kssj = Util.null2String(param.get("kssj"));
//请假结束时间
String jssj = Util.null2String(param.get("jssj"));
for (int i=0;i<abnormalClockInList.size();i++){
String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime"));
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <=0 &&
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >=0){
abnormalClockInList.remove(i);
i--;
}
}
return abnormalClockInList;
}
@Override
public List<Map<String, Object>> evectionByDurationTime(Map<String, Object> param) {
//人员迟到、早退、漏卡等记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)param.get("abnormalClockInList");
List<Map<String,Object>> 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<Map<String,Object>> evectionByHalfDay(Map<String, Object> param) {
return null;
}
}

@ -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<String, Object> params) {
public List<Map<String,Object>> forgetClockInAllDays() {
Map<String,Object> 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<String,Object> result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam));
return true;
List<Map<String,Object>> 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<String, Object> params) {
public List<Map<String,Object>> forgetClockIn(Map<String, Object> params) {
List<Map<String,Object>> resultList = Lists.newArrayList();
Map<String,Object> 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<String,Object> result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam));
return true;
// List<Map<String,Object>> classInfoList = Lists.newArrayList();
// classInfoList.add((Map<String, Object>)params.get("classInfo"));
// forgetParam.put("classInfo",classInfoList);
// forgetParam.put("userId",params.get("userId"));
// forgetParam.put("date",params.get("analysisDate"));
// Map<String,Object> result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam));
resultList.add(forgetParam);
return resultList;
}
}

@ -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<String,Object> schedulingResultsMap = schedulingResultsService.queryDataTable(params);
List<Map<String,Object>> schedulingResultsList = (List<Map<String,Object>>)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<String,String> schedulingMap = schedulingResultsList.stream().collect(Collectors.toMap(e-> Util.null2String(e.get("bcxx")), e->Util.null2String(e.get("bcrq"))+"-"+Util.null2String(e.get("rqlx"))));
// Map<String,String> 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<String,List<Map<String,Object>>> schedulingMap = schedulingResultsList.stream().collect(Collectors.groupingBy(e-> Util.null2String(e.get("bcxx")).split("-")[0]));
Map<String,List<Map<String,Object>>> 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<String,String> entry :schedulingMap.entrySet()){
for (Map.Entry<String,List<Map<String,Object>>> 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<Map<String,Object>> dataList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx"))));
Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap();
dataMap.entrySet().forEach(e -> {
String bcrq = schedulingMap.get(e.getKey()).split("-")[0];
String rqlx = schedulingMap.get(e.getKey()).split("-")[0];
List<Map<String,Object>> bcxxs = e.getValue();
for (Map<String,Object> map:bcxxs){
map.put("rqlx",rqlx);
List<Map<String,Object>> schedulingList = schedulingMap.get(e.getKey());
for (Map<String,Object> scheduling :schedulingList){
String bcrq = Util.null2String(scheduling.get("bcrq"));
String rqlx = Util.null2String(scheduling.get("rqlx"));
List<Map<String,Object>> bcxxs = e.getValue();
for (Map<String,Object> 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<String,Object> dateParam = Maps.newHashMap();
dateParam.put("nd",Util.null2String(params.get("startDate")).split("-")[0]);
dateParam.put("glpb",glpb);
Map<String,Object> result = commandExecutor.execute(new GetDateCmd(dateParam));
List<Map<String,Object>> List = (List<Map<String,Object>>)result.get("data");
Map<String,String> 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<String, Object> params) {
//
String userId = Util.null2String(params.get("userId"));
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//数据集合
List<Map<String, Object>> recordDataList = (List<Map<String, Object>>)params.get("recordData");
//日期类型
String rqlx = Util.null2String(params.get("rqlx"));
//班次
List<Map<String,Object>> classInfo = (List<Map<String,Object>>)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<Map<String,Object>> dataList = DbTools.getSqlToList(sql,userId,analysisDate);
if (dataList.size() >0){
sql = "update uf_jcl_kq_cqjg set xm1=?,";
for (int i =0;i<recordDataList.size();i++){
String item = Util.null2String(recordDataList.get(i).get("item"));
String itemduration = Util.null2String(recordDataList.get(i).get("itemduration"));
int index = i+2;
sql = sql + "xm"+index+"="+item+",";
if (!"".equals(itemduration)){
sql = sql + "sc"+index+"="+itemduration+",";
}
}
for (int i=recordDataList.size()+2;i<9;i++){
sql = sql +"xm"+i+"=NULL,sc"+i+"=NULL,";
}
sql = sql.substring(0,sql.length()-1) +" where ygid=? and rq=?";
log.info("update sql : {}",sql);
DbTools.update(sql,dayTYpe,userId,analysisDate);
}else {
sql = "select subcompanyid1,departmentid,jobtitle from hrmresource where id=?";
List<Map<String,Object>> 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<Object> 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<recordDataList.size();i++){
int index = i+2;
String item = Util.null2String(recordDataList.get(i).get("item"));
String itemduration = Util.null2String(recordDataList.get(i).get("itemduration"));
cloumns = cloumns+"xm"+index+",";
value = value +"?,";
insertDatas.add(item);
if (!"".equals(itemduration)){
cloumns = cloumns + "sc"+index+",";
value = value +"?,";
insertDatas.add(itemduration);
}
}
cloumns = cloumns.substring(0,cloumns.length()-1);
value = value.substring(0,value.length()-1);
sql = sql +cloumns +") values ("+value+")";
log.info("insert sql : {}",sql);
log.info("insert data : {}",insertDatas);
DbTools.update(sql,insertDatas.toArray());
}
}
}

@ -1,10 +1,7 @@
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.ForgetClockInService;
import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceanalysis.service.impl.AbnormalAttendanceServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
@ -20,6 +17,7 @@ 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 com.icbc.api.internal.apache.http.nio.protocol.O;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
@ -41,7 +39,9 @@ public class AttendanceAnalysisWrapper extends Service {
private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList){
public void attendanceAnalysis(String userId, List<Map<String,Object>> 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<String,List<Map<String,Object>>> schedulingResultsMap = utilService.getSchedulingInFormation(paramMap);
Map<String,List<Map<String,Object>>> 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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> clockInTimeList,List<Map<String, Object>> scheduleResult,List<Map<String,Object>> attendanceItems){
public void analysis(String userId,String analysisDate,List<Map<String, Object>> clockInTimeList,List<Map<String, Object>> scheduleResult,List<Map<String,Object>> attendanceItems,String modeId){
Map<String,Object> 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<String,Object> 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<Map<String, Object>> 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<String,Object> 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<Map<String,Object>> askForLeaveList = DbTools.getSqlToList(sql,userId,analysisDate);
log.info("askForLeaveList :{}",askForLeaveList);
//考勤项目
Map<String,Map<String,Object>> 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<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId,analysisDate);
log.info("evectionList :{}",evectionList);
//出差项目
Map<String,Map<String,Object>> evectionItems = Maps.newHashMap();
Map<String,Object> 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<String,Object> askForLeaveData : askForLeaveList){
Map<String,Object> 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<Map<String,Object>> resultList = Lists.newArrayList();
Map<String,Object> 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<String,Object> askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx"));
askForLeaveItems.put(askForLeaveData.get("jqlx").toString(),askForLeaveItem);
Map<String,Object> askForLeaveMap = new HashMap(){{
put("bcxx",scheduleResult.get(0).get("bcxx"));
@ -175,13 +190,18 @@ public class AttendanceAnalysisWrapper extends Service {
}
for (Map<String,Object> 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<String,Object> evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx"));
if (CheckBoxEnum.CHECKED.getKey().equals(evectionData.get("qtcc"))) {
List<Map<String,Object>> resultList = Lists.newArrayList();
Map<String,Object> 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<String,Object> evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx"));
evectionItems.put(evectionData.get("cclx").toString(),evectionItem);
Map<String,Object> 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<Map<String,Map<String,Object>>> clcokInTimeData = getClockInPoint(analysisDate,needClockInSchedule,clockInTimeList);
Map<String,Object> 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<Map<String,Object>> normalList= updateAttendanceResultWrapper.recordNormal(recordAbnormalParam);
/**
* ,退
* */
List<Map<String,Object>> abnormalClockInList = updateAttendanceResultWrapper.recordAbnormalClockIn(recordAbnormalParam);
/**
*
*/
boolean recordWorkOverTime= updateAttendanceResultWrapper.recordWorkOverTime(recordAbnormalParam);
/**
*
*/
recordAbnormalParam.put("askForLeaveList",askForLeaveList);
recordAbnormalParam.put("askForLeaveItems",askForLeaveItems);
recordAbnormalParam.put("abnormalClockInList",abnormalClockInList);
Map<String, Object> vactionMap = updateAttendanceResultWrapper.recordAskForLeave(recordAbnormalParam);
abnormalClockInList = (List<Map<String,Object>>)vactionMap.get("abnormalClockInList");
List<Map<String,Object>> vactionList = (List<Map<String,Object>>)vactionMap.get("resultList");
/**
*
*/
recordAbnormalParam.put("evectionList",evectionList);
recordAbnormalParam.put("evectionItems",evectionItems);
recordAbnormalParam.put("abnormalClockInList",abnormalClockInList);
Map<String, Object> recordEvection= updateAttendanceResultWrapper.recordEvection(recordAbnormalParam);
abnormalClockInList = (List<Map<String,Object>>)recordEvection.get("abnormalClockInList");
List<Map<String,Object>> evectionResultList = (List<Map<String,Object>>)recordEvection.get("resultList");
/**
*
*/
List<Map<String,Object>> 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<Map<String,Map<String,Object>>> getClockInPoint(String analysisDate,List<Map<String, Object>> needClockInSchedule,List<Map<String, Object>> clockInTimeList){
List<Map<String,Map<String,Object>>> clcokInTimeData = Lists.newArrayList();
for (Map<String, Object> needClockIn :needClockInSchedule){
@ -306,38 +403,7 @@ public class AttendanceAnalysisWrapper extends Service {
}
}
}
/**
* ,退
* */
Map<String,Object> 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;
}
}

@ -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<String,Object> params){
public List<Map<String,Object>> recordAbnormalClockIn(Map<String,Object> params){
//卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
//考勤项目
@ -38,9 +50,8 @@ public class UpdateAttendanceResultWrapper extends Service {
Map<String,List<Map<String, Object>>> startScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtkssj").toString()));
//以结束时间分割班次
Map<String,List<Map<String, Object>>> endScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtjssj").toString()));
boolean iforgetClockIn = false;
boolean ifBeLate = false;
boolean ifLeaveEarly = false;
List<Map<String,Object>> resultList = Lists.newArrayList();
for (Map<String,Map<String,Object>> clcokInTimeMap :clcokInTimeList){
//卡点
String point = "";
@ -65,14 +76,18 @@ public class UpdateAttendanceResultWrapper extends Service {
}
if (ClockPointEnum.EMPTY.getKey().equals(timeType) || clcokInTimeData == null){
//漏卡
Map<String,Object> 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<String,Object> 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<Map<String,Object>> 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<Map<String,Object>> 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<String,Object> 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<Map<String,Object>> 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<String,Object> params){
//卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//排班
@ -138,27 +163,80 @@ public class UpdateAttendanceResultWrapper extends Service {
* @param params
* @return
*/
public boolean recordVaction(Map<String,Object> params){
//卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
public Map<String, Object> recordAskForLeave(Map<String,Object> params){
//请假项目
Map<String,Map<String,Object>> askForLeaveItems = (Map<String,Map<String,Object>>)params.get("askForLeaveItems");
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
//请假
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//请假记录
List<Map<String, Object>> askForLeaveList = (List<Map<String,Object>>)params.get("askForLeaveList");
//异常记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)params.get("abnormalClockInList");
Map<String, Object> map = Maps.newHashMap();
List<Map<String, Object>> resultList = Lists.newArrayList();
for (int i=0;i<askForLeaveList.size();i++){
Map<String, Object> 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<String,Object> 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<String,Object> 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<String,Object> params){
//卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
public Map<String, Object> recordEvection(Map<String,Object> params){
//外出项目
Map<String,Map<String,Object>> evectionItems = (Map<String,Map<String,Object>>)params.get("evectionItems");
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//出差记录
List<Map<String, Object>> evectionList = (List<Map<String,Object>>)params.get("evectionList");
//异常记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)params.get("abnormalClockInList");
Map<String, Object> map = Maps.newHashMap();
List<Map<String, Object>> resultList = Lists.newArrayList();
for (int i=0;i<evectionList.size();i++){
Map<String, Object> 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<String,Object> 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<String,Object> 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<Map<String,Object>> recordNormal(Map<String,Object> params){
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)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<Map<String, Object>> resultList = Lists.newArrayList();
Map<String,Object> 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<String,Object> params){
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
Map<String,Object> 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<Map<String, Object>> 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<String, Object> 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;
}
}

@ -104,7 +104,7 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand<Map
}
}
sql = "select id `key`,mc kqxm from uf_jcl_kq_kqxm where tyxm=1";
sql = "select id `key`,mc kqxm,a.* from uf_jcl_kq_kqxm a where tyxm=1";
List<Map<String,Object>> attendanceItems = DbTools.getSqlToList(sql);
log.info("dataIds : {}",dataIds);

@ -143,7 +143,15 @@ public class PersongroupCommonUtil {
public static boolean insertShiftSchedulingResults(List<Map<String,Object>> organizationList,List<Map<String,Object>> insertDataList,String formmodeid){
RecordSet rs = new RecordSet();
List<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<String> psersons = Sets.newHashSet();
Set<String> psersonsGroups = Sets.newHashSet();
Set<String> departments = Sets.newHashSet();
Set<String> subCompanys = Sets.newHashSet();
for (Map<String,Object> organization: organizationList){
for (Map<String,Object> insertData : insertDataList){
ArrayList<Object> 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 (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

@ -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;
}
}

@ -24,8 +24,9 @@ public class GetDateCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public Map<String, Object> 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<Map<String,Object>> 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<Map<String,Object>> dataList = DbTools.getSqlToList(sql,nd,glpb);
Map<String, Object> resultMap = Maps.newHashMap();
resultMap.put("data",dataList);
return resultMap;

@ -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<T> {
}
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;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -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<Map<String,Object>> 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<String,Object> 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<Map<String, Object>> 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<Map<String,Object>> 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<Map<String,Object>> 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<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
List<Map<String,Object>> 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<String,List<Map<String,Object>>> schedulingResultsMap = Maps.newHashMap();
schedulingResultsMap.put("2023-11-12",schedulingList);
schedulingResultsMap.put("2023-11-13",schedulingList);
schedulingResultsMap.put("2023-11-11",schedulingList);
Map<String,Object> params = Maps.newHashMap();
params.put("date",beforeOneDayDate);
params.put("clockInTimeCollect",collect);
params.put("schedulingResultCollect",schedulingResultsMap);
Map<String, Object> beforeOneDayClockInTimeList = new GetClockInTimeItemCmd(params).execute(null);
System.out.println(beforeOneDayClockInTimeList);
}
}

@ -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<Map<String,Object>> 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<Map<String,Object>> 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<Map<String, Map<String,Object>>> getClockInPoint(String analysisDate, List<Map<String, Object>> needClockInSchedule, List<Map<String, Object>> clockInTimeList){
List<Map<String,Map<String,Object>>> clcokInTimeData = Lists.newArrayList();
for (Map<String, Object> 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<String,Map<String,Object>> ksdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtkssj,clockInTimeList);
String timeType = ClockPointEnum.EMPTY.getKey();
Map<String,Map<String,Object>> 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<String,Map<String,Object>> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj,clockInTimeList);
String timeType = ClockPointEnum.EMPTY.getKey();
Map<String,Map<String,Object>> 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<clcokInTimeData.size()-1;i++){
Map<String,Map<String,Object>> beforeClcokInTimeData = clcokInTimeData.get(i);
Map<String,Map<String,Object>> afterClcokInTimeData = clcokInTimeData.get(i+1);
Map<String,Object> beforeClcokInTimeMap = null;
String beforeClcokInTime = "";
String afterClcokInTime = "";
Map<String,Object> afterClcokInTimeMap = null;
for (Map.Entry<String,Map<String,Object>> beforeEntry :beforeClcokInTimeData.entrySet()){
beforeClcokInTimeMap = beforeEntry.getValue();
beforeClcokInTime = beforeEntry.getKey();
}
for (Map.Entry<String,Map<String,Object>> 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;
}
}
Loading…
Cancel
Save