zm_dev
liuliang 2 years ago
parent 9c728cd1b4
commit b56b72e12b

@ -464,3 +464,293 @@
2023-11-14 18:08:42,731 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - The business class dynamic proxy is loaded. 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,086 [Timer-0] [A2] [INFO] - rootPath == null
2023-11-14 20:42:22,088 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties 2023-11-14 20:42:22,088 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties
2023-11-17 12:25:10,031 [Timer-0] [A2] [INFO] - rootPath == null
2023-11-17 12:25:10,035 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties
2023-11-17 12:35:19,971 [Timer-0] [A2] [INFO] - rootPath == null
2023-11-17 12:35:19,973 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties
2023-11-17 13:44:24,925 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(SERVICE-METHOD) dynamic proxy...
2023-11-17 13:44:24,925 [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-17 13:44:24,925 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(COMMAND) dynamic proxy...
2023-11-17 13:44:24,925 [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-17 13:44:24,925 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - The business class dynamic proxy is loaded.
2023-11-17 13:45:18,436 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(SERVICE-METHOD) dynamic proxy...
2023-11-17 13:45:18,436 [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-17 13:45:18,436 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - Loading business class(COMMAND) dynamic proxy...
2023-11-17 13:45:18,436 [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-17 13:45:18,436 [main] [com.engine.core.cfg.DynamicProxyConfiguration] [INFO] - The business class dynamic proxy is loaded.

@ -0,0 +1,11 @@
package com.api.attendance.attendanceAnalysis;
import com.engine.attendance.attendanceanalysis.web.AttendanceanalysisAction;
import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.Path;
@Path("/attendance/attendanceAnalysis")
@Slf4j
public class AttendanceanalysisActionApi extends AttendanceanalysisAction {
}

@ -0,0 +1,147 @@
package com.engine.attendance.attendanceanalysis.cmd;
import com.engine.attendance.enums.DateTypeEnum;
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.Lists;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@Slf4j
public class recordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
public recordDataCmd(Map<String, Object> params){
this.params=params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//
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");
//进出时间
Map<String,Object> recordDataTime = (Map<String,Object>)params.get("recordDataTime");
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 cqzt="+cqzt+",fxrq='"+DateUtil.getCurrentDate()+"',xm1="+dayTYpe+",";
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,";
}
if (recordDataTime != null && recordDataTime.size() >0){
for (Map.Entry<String,Object> entry : recordDataTime.entrySet()){
sql = sql + entry.getKey()+"="+entry.getValue()+",";
}
}
sql = sql.substring(0,sql.length()-1) +" where ygid=? and rq=?";
log.info("update sql : {}",sql);
DbTools.update(sql,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(DateUtil.getCurrentDate());
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);
}
}
if (recordDataTime != null && recordDataTime.size() >0){
for (Map.Entry<String,Object> entry : recordDataTime.entrySet()){
if (!"NULL".equals(entry.getValue())){
cloumns = cloumns + entry.getKey()+",";
value = value + "?,";
insertDatas.add(entry.getValue());
}
}
}
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());
}
return null;
}
}

@ -2,14 +2,14 @@ package com.engine.attendance.attendanceanalysis.job;
import com.engine.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper; import com.engine.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper;
import com.engine.attendance.workflow.service.ProcessSubmitCheckService; import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.workflow.service.impl.ProcessSubmitCheckServiceImpl; import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools; import com.engine.common.util.DbTools;
import com.engine.common.util.ServiceUtil; import com.engine.common.util.ServiceUtil;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.schedule.BaseCronJob; import weaver.interfaces.schedule.BaseCronJob;
import java.util.List; import java.util.List;
@ -18,6 +18,7 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class AttendanceAnalysisJob extends BaseCronJob { public class AttendanceAnalysisJob extends BaseCronJob {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
/** /**
* id * id
*/ */
@ -27,16 +28,30 @@ public class AttendanceAnalysisJob extends BaseCronJob {
@Override @Override
public void execute() { public void execute() {
log.info("********AttendanceAnalysisJob start********"); log.info("********AttendanceAnalysisJob start********");
String queryUserSql = "select id from hrmresource where (status = 0 or status = 1 or status = 2 or status = 3) and status != 10";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3); String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3);
String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1); String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ?"; String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,beforeThreeDayDate,beforeOneDayDate); List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,beforeThreeDayDate,beforeOneDayDate);
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); 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(),modeId); for (Map<String,Object> userMap:userList){
}); String userId = Util.null2String(userMap.get("id"));
/**获得人员考勤项目*/
Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate","");
paramMap.put("endDate","");
paramMap.put("resourceId",userId);
paramMap.put("modeId","204");
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
attendanceAnalysisService.attendanceAnalysis(userId,collect.get(userMap.get("id")),attendanceItems,modeId);
}
log.info("********AttendanceAnalysisJob end********"); log.info("********AttendanceAnalysisJob end********");
} }
} }

@ -28,4 +28,6 @@ public interface UtilService {
*/ */
void recordItem(Map<String,Object> params); void recordItem(Map<String,Object> params);
Map<String,Object> getNeedRecordClockInTime(List<Map<String,Map<String,Object>>> clcokInTimeData);
} }

@ -1,10 +1,10 @@
package com.engine.attendance.attendanceanalysis.service.impl; 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.attendanceanalysis.service.AskForLeaveService;
import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.google.common.collect.Lists;
import weaver.general.Util; import weaver.general.Util;
import java.util.Comparator; import java.util.Comparator;
@ -23,14 +23,15 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
//请假结束时间 //请假结束时间
String jssj = Util.null2String(param.get("jssj")); String jssj = Util.null2String(param.get("jssj"));
List<Map<String,Object>> needRemoveList = Lists.newArrayList();
for (int i=0;i<abnormalClockInList.size();i++){ for (int i=0;i<abnormalClockInList.size();i++){
String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime")); String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime"));
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <=0 && if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <=0 &&
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >=0){ DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >=0){
abnormalClockInList.remove(i); needRemoveList.add(abnormalClockInList.get(i));
i--;
} }
} }
abnormalClockInList.removeAll(needRemoveList);
return abnormalClockInList; return abnormalClockInList;
} }
@ -51,19 +52,20 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
int qjsc = param.get("qjsc") == null?0:Double.valueOf(Double.valueOf(param.get("qjsc").toString())*60).intValue(); int qjsc = param.get("qjsc") == null?0:Double.valueOf(Double.valueOf(param.get("qjsc").toString())*60).intValue();
//同一天可抵消多个异常 //同一天可抵消多个异常
String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs")); String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs"));
if (CheckBoxEnum.CHECKED.equals(tybcndbjlhbjs)){ List<Map<String,Object>> needRemoveList = Lists.newArrayList();
if (CheckBoxEnum.CHECKED.getKey().equals(tybcndbjlhbjs)){
for (int i=abnormalClockInList.size() -1;i>=0;i--){ for (int i=abnormalClockInList.size() -1;i>=0;i--){
int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString());
if (qjsc > time){ if (qjsc >= time){
qjsc = qjsc-time; qjsc = qjsc-time;
abnormalClockInList.remove(i); needRemoveList.add(abnormalClockInList.get(i));
i++;
} }
} }
abnormalClockInList.removeAll(needRemoveList);
}else{ }else{
for (int i=abnormalClockInList.size() -1;i>=0;i--){ for (int i=abnormalClockInList.size() -1;i>=0;i--){
int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString());
if (qjsc > time){ if (qjsc >= time){
abnormalClockInList.remove(i); abnormalClockInList.remove(i);
break; break;
} }

@ -4,6 +4,7 @@ import com.engine.attendance.attendanceanalysis.service.EvectionService;
import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.google.common.collect.Lists;
import weaver.general.Util; import weaver.general.Util;
import java.util.Comparator; import java.util.Comparator;
@ -21,14 +22,15 @@ public class EvectionServiceImpl extends Service implements EvectionService {
//请假结束时间 //请假结束时间
String jssj = Util.null2String(param.get("jssj")); String jssj = Util.null2String(param.get("jssj"));
List<Map<String,Object>> needRemoveList = Lists.newArrayList();
for (int i=0;i<abnormalClockInList.size();i++){ for (int i=0;i<abnormalClockInList.size();i++){
String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime")); String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime"));
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <=0 && if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <=0 &&
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >=0){ DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >=0){
abnormalClockInList.remove(i); needRemoveList.add(abnormalClockInList.get(i));
i--;
} }
} }
abnormalClockInList.removeAll(needRemoveList);
return abnormalClockInList; return abnormalClockInList;
} }
@ -43,16 +45,18 @@ public class EvectionServiceImpl extends Service implements EvectionService {
//请假时长,单位小时 //请假时长,单位小时
int ccsc = param.get("ccsc") == null?0:Double.valueOf(Double.valueOf(param.get("ccsc").toString())*60).intValue(); int ccsc = param.get("ccsc") == null?0:Double.valueOf(Double.valueOf(param.get("ccsc").toString())*60).intValue();
//同一天可抵消多个异常 //同一天可抵消多个异常
List<Map<String,Object>> needRemoveList = Lists.newArrayList();
String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs")); String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs"));
if (CheckBoxEnum.CHECKED.equals(tybcndbjlhbjs)){ if (CheckBoxEnum.CHECKED.getKey().equals(tybcndbjlhbjs)){
for (int i=abnormalClockInList.size() -1;i>=0;i--){ for (int i=abnormalClockInList.size() -1;i>=0;i--){
int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString());
if (ccsc > time){ if (ccsc > time){
ccsc = ccsc-time; ccsc = ccsc-time;
abnormalClockInList.remove(i); needRemoveList.add(abnormalClockInList.get(i));
i++;
} }
} }
abnormalClockInList.removeAll(needRemoveList);
}else{ }else{
for (int i=abnormalClockInList.size() -1;i>=0;i--){ for (int i=abnormalClockInList.size() -1;i>=0;i--){
int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString());

@ -1,6 +1,7 @@
package com.engine.attendance.attendanceanalysis.service.impl; package com.engine.attendance.attendanceanalysis.service.impl;
import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd; import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd;
import com.engine.attendance.attendanceanalysis.cmd.recordDataCmd;
import com.engine.attendance.attendanceanalysis.service.UtilService; import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceplan.service.AttendancePlanService; import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
@ -172,103 +173,59 @@ public class UtilServiceImpl extends Service implements UtilService {
@Override @Override
public void recordItem(Map<String, Object> params) { public void recordItem(Map<String, Object> params) {
// commandExecutor.execute(new recordDataCmd(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=?"; @Override
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,userId,analysisDate); public Map<String, Object> getNeedRecordClockInTime(List<Map<String,Map<String,Object>>> clcokInTimeData) {
if (dataList.size() >0){ Map<String, Object> resultMap = Maps.newHashMap();
sql = "update uf_jcl_kq_cqjg set xm1=?,"; int inIndex = 1;
for (int i =0;i<recordDataList.size();i++){ int outIndex = 1;
String item = Util.null2String(recordDataList.get(i).get("item")); int jcCloumns = 8;
String itemduration = Util.null2String(recordDataList.get(i).get("itemduration")); for (Map<String,Map<String,Object>> clcokInTimeMap : clcokInTimeData){
int index = i+2; //卡点
sql = sql + "xm"+index+"="+item+","; String point = "";
if (!"".equals(itemduration)){ //当天打卡数据
sql = sql + "sc"+index+"="+itemduration+","; Map<String,Object> clcokInTime = null;
} for (Map.Entry<String,Map<String,Object>> entry :clcokInTimeMap.entrySet()){
} point = entry.getKey();
for (int i=recordDataList.size()+2;i<9;i++){ clcokInTime = entry.getValue();
sql = sql +"xm"+i+"=NULL,sc"+i+"=NULL,"; }
} //需要计算的班次打卡时间点
sql = sql.substring(0,sql.length()-1) +" where ygid=? and rq=?"; String pointTime = point.split("\\|")[0];
log.info("update sql : {}",sql); //start开始打卡时间点end结束打卡时间点
DbTools.update(sql,dayTYpe,userId,analysisDate); String pointType = point.split("\\|")[1];
}else { //empty:漏卡equal:打卡时间和班次时间相等before打卡时间在班次时间之前after打卡时间在班次时间之后
sql = "select subcompanyid1,departmentid,jobtitle from hrmresource where id=?"; String timeType = point.split("\\|")[2];
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,"; if (ClockPointEnum.START.getKey().equals(pointType)){
String value = "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"; //开始时间打卡
List<Object> insertDatas = Lists.newArrayList(); String key = "j"+inIndex;
insertDatas.add(userList.get(0).get("subcompanyid1")); if (!ClockPointEnum.EMPTY.getKey().equals(timeType) && clcokInTime != null){
insertDatas.add(userId); String value = "'"+clcokInTime.get("signdate")+" "+clcokInTime.get("signtime")+"'";
insertDatas.add(userList.get(0).get("subcompanyid1")); resultMap.put(key,value);
insertDatas.add(userList.get(0).get("departmentid")); }
insertDatas.add(userList.get(0).get("jobtitle")); inIndex++;
insertDatas.add(analysisDate); }else if (ClockPointEnum.END.getKey().equals(pointType)){
insertDatas.add(classInfo.get(0).get("bcxx")); //结束时间打卡
insertDatas.add(classInfo.get(0).get("bcsdxx")); String key = "c"+outIndex;
insertDatas.add(cqzt); if (!ClockPointEnum.EMPTY.getKey().equals(timeType) && clcokInTime != null){
insertDatas.add(classInfo.get(0).get("edsc")); String value = "'"+clcokInTime.get("signdate")+" "+clcokInTime.get("signtime")+"'";
insertDatas.add(1); resultMap.put(key,value);
insertDatas.add(analysisDate); }
insertDatas.add(formmodeid); outIndex++;
insertDatas.add(UUID.randomUUID().toString()); }
insertDatas.add(1);
insertDatas.add(0); }
insertDatas.add(DateUtil.getCurrentDate()); for (int i=inIndex;i<jcCloumns;i++){
insertDatas.add(DateUtil.getCurrentTime().split(" ")[1]); String key = "j"+i;
insertDatas.add(dayTYpe); resultMap.put(key,"NULL");
for (int i =0;i<recordDataList.size();i++){ }
int index = i+2; for (int i=outIndex;i<jcCloumns;i++){
String item = Util.null2String(recordDataList.get(i).get("item")); String key = "c"+i;
String itemduration = Util.null2String(recordDataList.get(i).get("itemduration")); resultMap.put(key,"NULL");
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());
} }
return resultMap;
} }
} }

@ -0,0 +1,83 @@
package com.engine.attendance.attendanceanalysis.web;
import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.common.util.*;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
public class AttendanceanalysisAction {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class);
/**
*
* @return
*/
@POST
@Path("/attendanceAnalysisByHrmAndDate")
@Produces({"text/plain"})
public String getSchedulingData(@Context HttpServletRequest request, @Context HttpServletResponse response) {
try {
Map<String,Object> paramMap = ParamUtil.request2Map(request);
String startDate = Util.null2String(paramMap.get("startDate"));
String startBeforeDate = DateUtil.beforeDay(startDate,1);
String endDate = Util.null2String(paramMap.get("endDate"));
String endAfterDate = DateUtil.AfterDay(endDate,1);
String userIds = Util.null2String(paramMap.get("userIds"));
String modeId = Util.null2String(paramMap.get("modeId"));
int betweenDays = DateUtil.getBetWeenDays(startDate,endDate);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and userid in ("+userIds+") and signdate >= ? and signdate <= ?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid"))));
for (String userId : userIds.split(",")){
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
param.put("startDate","");
param.put("endDate","");
param.put("resourceId",userId);
param.put("modeId","204");
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
classesParamMap.put("startDate",startBeforeDate);
classesParamMap.put("endDate",endAfterDate);
classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",userId);
classesParamMap.put("current","1");
classesParamMap.put("pageSize",10);
classesParamMap.put("recurrence",1);
Map<String,List<Map<String,Object>>> schedulingResultsMap = utilService.getSchedulingInFormation(classesParamMap);
for (int i=0; i<=betweenDays;i++){
String date = DateUtil.AfterDay(startDate,i);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulingResultsMap,modeId);
}
}
return null;
}catch (Exception e){
log.error("execute fail,catch error: [{}]",e);
return ApiReturnTools.error("500","saveApplicableOrganization error");
}
}
}

@ -4,12 +4,9 @@ import com.engine.attendance.attendanceanalysis.service.ForgetClockInService;
import com.engine.attendance.attendanceanalysis.service.UtilService; import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.ClassSegmentTypeEnum; import com.engine.attendance.enums.ClassSegmentTypeEnum;
import com.engine.attendance.enums.ClockPointEnum; import com.engine.attendance.enums.ClockPointEnum;
import com.engine.attendance.enums.PeriodOfTime;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools; import com.engine.common.util.DbTools;
import com.engine.common.util.ServiceUtil; import com.engine.common.util.ServiceUtil;
@ -17,7 +14,6 @@ import com.engine.common.util.Utils;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.icbc.api.internal.apache.http.nio.protocol.O;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
@ -34,29 +30,29 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class AttendanceAnalysisWrapper extends Service { public class AttendanceAnalysisWrapper extends Service {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class); private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class); private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class); private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList,String modeId){ /**
*
* @param userId id
* @param dataList
* @param attendanceItems
* @param modeId formmodeid
*/
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList,List<Map<String,Object>> attendanceItems,String modeId){
log.info("***********analysis userId:{} start***********",userId); log.info("***********analysis userId:{} start***********",userId);
log.info("clockInTimeDate : [{}]",dataList); log.info("clockInTimeDate : [{}]",dataList);
String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3); String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3);
String beforeTwoDayDate = DateUtil.getCurrentDateMinusDay(2); String beforeTwoDayDate = DateUtil.getCurrentDateMinusDay(2);
String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1); String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1);
/** 打卡数据 */ /** 打卡数据 */
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); Map<String, List<Map<String,Object>>> collect = Maps.newHashMap();
if (dataList != null && dataList.size() >0){
/**获得人员考勤项目*/ collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
Map<String,Object> paramMap = Maps.newHashMap(); }
paramMap.put("startDate","");
paramMap.put("endDate","");
paramMap.put("resourceId",userId);
paramMap.put("modeId","204");
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/** 获取人员班次*/ /** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap(); Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg"); classesParamMap.put("tableName","uf_pbjg");
@ -69,13 +65,6 @@ public class AttendanceAnalysisWrapper extends Service {
classesParamMap.put("recurrence",1); classesParamMap.put("recurrence",1);
Map<String,List<Map<String,Object>>> schedulingResultsMap = utilService.getSchedulingInFormation(classesParamMap); 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)";
Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,userId,beforeOneDayDate,beforeThreeDayDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("ksrq"))));
Map<String,Object> forgetClockInParam = Maps.newHashMap();
forgetClockInParam.put("classInfo",schedulingResultsMap.get(beforeOneDayDate));
forgetClockInParam.put("userId",schedulingResultsMap.get(beforeOneDayDate));
/**计算获取前一天和第二天打卡数据*/ /**计算获取前一天和第二天打卡数据*/
Map<String,Object> getClockTimeParam = Maps.newHashMap(); Map<String,Object> getClockTimeParam = Maps.newHashMap();
@ -99,6 +88,33 @@ public class AttendanceAnalysisWrapper extends Service {
} }
/**
*
* @param userId id
* @param analysisDate
* @param dataList 23
* @param attendanceItems
* @param modeId formmodeid
*/
public void attendanceAnalysisForApi(String userId,String analysisDate, List<Map<String,Object>> dataList,List<Map<String,Object>> attendanceItems,Map<String,List<Map<String,Object>>> schedulingResultsMap,String modeId){
log.info("***********analysis userId:{} start***********",userId);
log.info("clockInTimeDate : [{}]",dataList);
Map<String, List<Map<String,Object>>> collect = Maps.newHashMap();
if (dataList != null && dataList.size() >0){
collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
}
/**计算获取前一天和第二天打卡数据*/
Map<String,Object> getClockTimeParam = Maps.newHashMap();
getClockTimeParam.put("date",analysisDate);
getClockTimeParam.put("clockInTimeCollect",collect);
getClockTimeParam.put("schedulingResultCollect",schedulingResultsMap);
//前一天打卡数据
log.info("getClockTimeParam : [{}]",getClockTimeParam);
List<Map<String, Object>> clockInTimeList = utilService.getClockInTime(getClockTimeParam);
analysis(userId,analysisDate,clockInTimeList,schedulingResultsMap.get(analysisDate),attendanceItems,modeId);
}
/** /**
* *
* @param userId * @param userId
@ -285,6 +301,7 @@ public class AttendanceAnalysisWrapper extends Service {
recordData.addAll(evectionResultList); recordData.addAll(evectionResultList);
recordData.addAll(abnormalClockInList); recordData.addAll(abnormalClockInList);
recordParam.put("recordData",recordData); recordParam.put("recordData",recordData);
recordParam.put("recordDataTime",utilService.getNeedRecordClockInTime(clcokInTimeData));
log.info("recordParam : {}",recordParam); log.info("recordParam : {}",recordParam);
if (abnormalClockInList.size()>0){ if (abnormalClockInList.size()>0){
recordParam.put("cqzt",CheckBoxEnum.CHECKED.getKey()); recordParam.put("cqzt",CheckBoxEnum.CHECKED.getKey());
@ -304,7 +321,17 @@ public class AttendanceAnalysisWrapper extends Service {
*/ */
public List<Map<String,Map<String,Object>>> getClockInPoint(String analysisDate,List<Map<String, Object>> needClockInSchedule,List<Map<String, Object>> clockInTimeList){ 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(); List<Map<String,Map<String,Object>>> clcokInTimeData = Lists.newArrayList();
if (needClockInSchedule.size() > 0){
String sfdx = Util.null2String(needClockInSchedule.get(0).get("sfdx"));
String zddxfz = Util.null2String(needClockInSchedule.get(0).get("zddxfz"));
String dxhs = Util.null2String(needClockInSchedule.get(0).get("dxhs"));
if (CheckBoxEnum.CHECKED.getKey().equals(sfdx)){
//上下班弹性
List<Map<String, Object>> needClockInStart = needClockInSchedule.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) && CheckBoxEnum.CHECKED.getKey().equals(e.get("ksdk"))).collect(Collectors.toList());
List<Map<String, Object>> needClockInEnd = needClockInSchedule.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) && CheckBoxEnum.CHECKED.getKey().equals(e.get("jsdk"))).collect(Collectors.toList());
}
}
for (Map<String, Object> needClockIn :needClockInSchedule){ for (Map<String, Object> needClockIn :needClockInSchedule){
if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){ if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){
String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); String dtkssj = analysisDate+" "+needClockIn.get("dtkssj");

@ -225,6 +225,7 @@ public class UpdateAttendanceResultWrapper extends Service {
if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){ if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){
timeMinutes = removeRestTime(kssj,jssj,scheduleResult,analysisDate); timeMinutes = removeRestTime(kssj,jssj,scheduleResult,analysisDate);
} }
log.info("recordAskForLeave timeMinutes [{}] ,hsl:{},hsdw",timeMinutes,hsl,hsdw);
itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES); itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES);
resultMap.put("itemduration",itemduration); resultMap.put("itemduration",itemduration);
param.put("kssj",kssj); param.put("kssj",kssj);
@ -287,12 +288,12 @@ public class UpdateAttendanceResultWrapper extends Service {
double itemduration = 0; double itemduration = 0;
if ("".equals(Util.null2String(evectionList.get(i).get("kssj"))) || "".equals(Util.null2String(evectionList.get(i).get("jssj")))){ if ("".equals(Util.null2String(evectionList.get(i).get("kssj"))) || "".equals(Util.null2String(evectionList.get(i).get("jssj")))){
//弹性请假,半天请假 //弹性请假,半天出差
if (CheckBoxEnum.CHECKED.getKey().equals(btj)){ if (CheckBoxEnum.CHECKED.getKey().equals(btj)){
//半天请假 //半天出差
evectionService.evectionByHalfDay(param); evectionService.evectionByHalfDay(param);
}else if (!"".equals(qjsc)){ }else if (!"".equals(qjsc)){
//时长请假 //时长出差
itemduration = Utils.getItemduration(hsl,hsdw,Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES); itemduration = Utils.getItemduration(hsl,hsdw,Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES);
resultMap.put("itemduration",itemduration); resultMap.put("itemduration",itemduration);
@ -303,11 +304,12 @@ public class UpdateAttendanceResultWrapper extends Service {
} }
} }
}else { }else {
//按照开始时间,结束时间请假 //按照开始时间,结束时间出差
int timeMinutes = DateUtil.getBetWeenMinutes(kssj,jssj); int timeMinutes = DateUtil.getBetWeenMinutes(kssj,jssj);
if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){ if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){
timeMinutes = removeRestTime(kssj,jssj,scheduleResult,analysisDate); timeMinutes = removeRestTime(kssj,jssj,scheduleResult,analysisDate);
} }
log.info("recordEvection timeMinutes [{}] ,hsl:{},hsdw",timeMinutes,hsl,hsdw);
itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES); itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES);
resultMap.put("itemduration",itemduration); resultMap.put("itemduration",itemduration);
param.put("kssj",kssj); param.put("kssj",kssj);
@ -394,6 +396,7 @@ public class UpdateAttendanceResultWrapper extends Service {
scheduleResult = scheduleResult.stream().filter(e -> ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(e.get("bdlx")) || 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()); 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); int betweenMinutes = DateUtil.getBetWeenMinutes(kssj,jssj);
log.info("removeRestTime scheduleResult : {}",scheduleResult);
for (Map<String, Object> restSchedule :scheduleResult){ for (Map<String, Object> restSchedule :scheduleResult){
String dtkssj = analysisDate+" "+restSchedule.get("dtkssj"); String dtkssj = analysisDate+" "+restSchedule.get("dtkssj");
String dtjssj = analysisDate+" "+restSchedule.get("dtjssj"); String dtjssj = analysisDate+" "+restSchedule.get("dtjssj");
@ -403,15 +406,19 @@ public class UpdateAttendanceResultWrapper extends Service {
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0){ if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0){
//休息时间在请假时间中间 //休息时间在请假时间中间
betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,dtjssj); betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,dtjssj);
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){ log.info("休息时间在请假时间中间");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtkssj)) >=0){
//休息时间在请假时间 左边 //休息时间在请假时间 左边
betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,jssj); betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,jssj);
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0){ log.info("休息时间在请假时间 左边");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0 && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtjssj)) <=0){
//休息时间在请假时间 右边 //休息时间在请假时间 右边
betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(kssj,dtjssj); betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(kssj,dtjssj);
log.info("休息时间在请假时间 右边");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){ }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){
//请假时间在休息时间中间 //请假时间在休息时间中间
betweenMinutes = 0; betweenMinutes = 0;
log.info("请假时间在休息时间中间");
} }
} }

@ -257,19 +257,22 @@ public class Utils<T> {
}else if (AccountingUnitEnum.HOUR.getKey().equals(hsdw)){ }else if (AccountingUnitEnum.HOUR.getKey().equals(hsdw)){
if (unit.equals(AccountingUnitEnum.MINUTES)){ if (unit.equals(AccountingUnitEnum.MINUTES)){
double durationHour = duration/60.0; double durationHour = duration/60.0;
if (duration%60 > 0){ // if (duration%60 > 0){
durationHour = durationHour +1; // durationHour = durationHour +1;
} // }
durationBig = new BigDecimal(durationHour); durationBig = new BigDecimal(durationHour);
if ((durationHour/hsl) > Math.floor(durationHour/hsl)){ if ((durationHour/hsl) > Math.floor(durationHour/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue(); // (durationHour/hsl)*hsl+hsl
durationBig = new BigDecimal(Math.floor(durationHour/hsl));
itemDuration = durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else { }else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue(); itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
} }
}else if (unit.equals(AccountingUnitEnum.HOUR)){ }else if (unit.equals(AccountingUnitEnum.HOUR)){
if ((duration/hsl) > Math.floor(duration/hsl)){ if ((duration/hsl) > Math.floor(duration/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue(); durationBig = new BigDecimal(Math.floor(duration/hsl));
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else { }else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue(); itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
} }
@ -279,7 +282,8 @@ public class Utils<T> {
}else if (AccountingUnitEnum.MINUTES.getKey().equals(hsdw)){ }else if (AccountingUnitEnum.MINUTES.getKey().equals(hsdw)){
if (unit.equals(AccountingUnitEnum.MINUTES)){ if (unit.equals(AccountingUnitEnum.MINUTES)){
if ((duration/hsl) > Math.floor(duration/hsl)){ if ((duration/hsl) > Math.floor(duration/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue(); durationBig = new BigDecimal(Math.floor(duration/hsl));
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else { }else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue(); itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
} }
@ -288,7 +292,8 @@ public class Utils<T> {
int durationMinute = duration*60; int durationMinute = duration*60;
durationBig = new BigDecimal(durationMinute); durationBig = new BigDecimal(durationMinute);
if ((durationMinute/hsl) > Math.floor(durationMinute/hsl)){ if ((durationMinute/hsl) > Math.floor(durationMinute/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue(); durationBig = new BigDecimal(Math.floor(durationMinute/hsl));
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else { }else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue(); itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
} }

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.

@ -13,6 +13,9 @@ import com.google.common.collect.Sets;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import weaver.general.Util; import weaver.general.Util;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Comparator; import java.util.Comparator;
@ -94,11 +97,31 @@ public class Test {
// System.out.println(333); // System.out.println(333);
// } // }
// List<Map> lists = Lists.newArrayList(); // List<Map> lists = Lists.newArrayList();
// List<Map> lists2 = Lists.newArrayList(); //// List<Map> lists2 = Lists.newArrayList();
// List<Map> lists3 = Lists.newArrayList(); //// List<Map> lists3 = Lists.newArrayList();
// lists.add(new HashMap()); // lists.add(new HashMap(){{
// lists.add(new HashMap()); // put("key","1");
// lists.add(new HashMap()); // }});
// lists.add(new HashMap(){{
// put("key","2");
// }});
// lists.add(new HashMap(){{
// put("key","3");
// }});
//
// Map map1 = lists.get(0);
// Map map2 = lists.get(1);
//
// List<Map> list2 = lists.stream().filter(e -> e.get("key").equals("1")).collect(Collectors.toList());
//
// Map map3 = list2.get(0);
// map3.put("value","222");
// System.out.println(DateUtil.getBetWeenMinutes("2023-11-16 08:00","2023-11-16 09:10"));
// BigDecimal durationBig = new BigDecimal(1.5);
//System.out.println( durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue());
System.out.println(Utils.getItemduration(1,"1",DateUtil.getBetWeenMinutes("2023-11-16 08:00","2023-11-16 09:10"),AccountingUnitEnum.MINUTES));
// lists2.add(lists.get(1)); // lists2.add(lists.get(1));
// lists3.add(lists.get(1)); // lists3.add(lists.get(1));
// if (lists2.get(0) == lists3.get(0)){ // if (lists2.get(0) == lists3.get(0)){
@ -134,7 +157,7 @@ public class Test {
// param.put("qjsc","0.5"); // param.put("qjsc","0.5");
// System.out.println(Double.valueOf(Double.valueOf(param.get("qjsc").toString())*60).intValue()); // System.out.println(Double.valueOf(Double.valueOf(param.get("qjsc").toString())*60).intValue());
System.out.println(DateUtil.getCurrentDateMinusDay(2)); // System.out.println(DateUtil.getBetWeenDays("2023-11-15","2023-11-15"));
//System.out.println(lists.hashCode()); //System.out.println(lists.hashCode());
// List lists2 = lists.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); // List lists2 = lists.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList());
// lists.addAll(lists2); // lists.addAll(lists2);

@ -0,0 +1,36 @@
import com.engine.attendance.attendanceanalysis.service.impl.AskForLeaveServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestAskForLeaveByDurationTime {
public static void main(String[] args) {
Map<String,Object> params = Maps.newHashMap();
params.put("tybcndbjlhbjs","1");
params.put("qjsc","2.0");
List<Map<String,Object>> abnormalClockInList = Lists.newArrayList();
params.put("abnormalClockInList",abnormalClockInList);
abnormalClockInList.add(new HashMap(){{
put("item","7");
put("itemduration","1");
put("pointTime","2023-11-15 13:00");
}});
abnormalClockInList.add(new HashMap(){{
put("item","11");
put("itemduration","13.0");
put("betweenMinutes","16");
put("pointTime","2023-11-15 18:30");
}});
abnormalClockInList.add(new HashMap(){{
put("item","102");
put("itemduration","15.0");
put("betweenMinutes","60");
put("pointTime","2023-11-15 09:00");
}});
AskForLeaveServiceImpl askForLeaveService = new AskForLeaveServiceImpl();
System.out.println(askForLeaveService.askForLeaveByDurationTime(params));
}
}

@ -1,7 +1,10 @@
import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper; import com.engine.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper;
import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.ClockPointEnum; import com.engine.attendance.enums.ClockPointEnum;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.common.util.Utils; import com.engine.common.util.Utils;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
@ -12,8 +15,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class TestGetClockInPoint { public class TestGetClockInPoint {
public static void main(String[] args) {
public static void main(String[] args) {
List<Map<String,Object>> schedulingList = Lists.newArrayList(); List<Map<String,Object>> schedulingList = Lists.newArrayList();
schedulingList.add(new HashMap(){{ schedulingList.add(new HashMap(){{
put("edsc","9.50"); put("edsc","9.50");
@ -87,7 +90,11 @@ public class TestGetClockInPoint {
// put("userid","53"); // put("userid","53");
// put("signdate","2023-11-12"); // put("signdate","2023-11-12");
// }}); // }});
System.out.println(getClockInPoint("2023-11-12",schedulingList,dataList)); List<Map<String, Map<String,Object>>> collect = getClockInPoint("2023-11-12",schedulingList,dataList);
System.out.println(collect);
Map<String,Object> clock = getNeedRecordClockInTime(collect);
System.out.println(clock);
} }
public static List<Map<String, Map<String,Object>>> getClockInPoint(String analysisDate, List<Map<String, Object>> needClockInSchedule, List<Map<String, Object>> clockInTimeList){ 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(); List<Map<String,Map<String,Object>>> clcokInTimeData = Lists.newArrayList();
@ -194,4 +201,46 @@ public class TestGetClockInPoint {
return clcokInTimeData; return clcokInTimeData;
} }
public static Map<String, Object> getNeedRecordClockInTime(List<Map<String,Map<String,Object>>> clcokInTimeData) {
Map<String, Object> resultMap = Maps.newHashMap();
int inIndex = 1;
int outIndex = 1;
for (Map<String,Map<String,Object>> clcokInTimeMap : clcokInTimeData){
//卡点
String point = "";
//当天打卡数据
Map<String,Object> clcokInTime = null;
for (Map.Entry<String,Map<String,Object>> entry :clcokInTimeMap.entrySet()){
point = entry.getKey();
clcokInTime = entry.getValue();
}
//需要计算的班次打卡时间点
String pointTime = point.split("\\|")[0];
//start开始打卡时间点end结束打卡时间点
String pointType = point.split("\\|")[1];
//empty:漏卡equal:打卡时间和班次时间相等before打卡时间在班次时间之前after打卡时间在班次时间之后
String timeType = point.split("\\|")[2];
if (ClockPointEnum.START.getKey().equals(pointType)){
//开始时间打卡
String key = "j"+inIndex;
if (!ClockPointEnum.EMPTY.getKey().equals(timeType) && clcokInTimeData != null){
String value = clcokInTime.get("signdate")+" "+clcokInTime.get("signtime");
resultMap.put(key,value);
}
inIndex++;
}else if (ClockPointEnum.END.getKey().equals(pointType)){
//结束时间打卡
String key = "c"+outIndex;
if (!ClockPointEnum.EMPTY.getKey().equals(timeType) && clcokInTimeData != null){
String value = clcokInTime.get("signdate")+" "+clcokInTime.get("signtime");
resultMap.put(key,value);
}
outIndex++;
}
}
return resultMap;
}
} }

Loading…
Cancel
Save