组织、人事、合同、权限模块


组织:这个模块主要分成 组织管理、组织架构、职务体系、岗位体系4个部分

组织管理:里面的行政组织和虚拟组织可以 可以用学校来进行类比
行政组织可以理解为学校以及学校里面分的系部
虚拟组织可以理解为学校中的学生会 团委会(一般客户那边有基金会的说法)

用户关系下还可以设置组负责人,相当于部门负责人

组织维度:重点是组织维度权限,组织一定要在这里授权到某个人身上才会看到前面行政组织这边的一个内容,如果没有在这边进行授权的话看到的就会是一个空白的内容



组织架构:
失效:应用场景是新建了一个组织,应用于当前的环境,但是后面正式化了之后,可能会有新的更加规范组织出现,就会把原有的组织失效掉,新建一个组织

组织调动:怎么把原有组织的人调到新的组呢,就需要用到组织调动了



职务体系和岗位体系:
有了前面的组织架构之后,就有了职务和岗位,他们两是有一定关联的,需要注意的是职级和职等,这两个是跟薪资挂钩的,
一般用户的话是二选一,用其中一个




怎么建立组织部门,设置组负责人,组织维度
1.年度规划编制:每一个岗位这年打算招多少人,如果人满了可能会不能入职
2.月度规划编制:每一个月某个岗位需要扩编的话可以设置,可设置生效时间和失效时间的时间段
3.月度编制:根据扩编的情况产生的,最终受到管控就是以月度编制表有没有超编

人事:记录员工的入转调离
1. 员工入职登记,扫一个二维码可以进入系统
2. 员工档案,真正入职的档案就是在这里
3. 转正管理,如果员工符合转正条件可以在转正管理进行操作
4. 人事异动,如果某个员工晋升或者是调岗可以在这里进行操作
5. 离职申请,提交离职流程
1-5是人事的主模块,6-12是其他的人事模块,可根据客户的实际情况进行开通

6. 工伤管理,登记工伤
7. 个人奖惩,员工的奖励和惩罚
8. 员工证件,员工的证件记录
9. 亲属管理,了解某个员工在厂里面有没有亲戚关系的员工
10.离职员工关怀,显示所以离职人员的资料
11.人员诚信库(黑名单),如果记录了信息,再次入职会提醒有黑名单历史,影响再入职
12.证件打印,打印员工证件用的

`需要注意的点是,在调整一个人的岗位的时候,最好不要在员工档案那边直接编辑,应该去人事异动去更改,区别是前者不会知道是在什么时间晋升的,后者有完整的异动申请单,在填写完异动单之后最好检查确认一下,因为一旦提交是不可逆转的`



合同关系:劳动合同的签订 ,分固定期(长期的劳动合同),合同期限是按月来算的,劳动合同如果续签上一份合同会直接作废
1. 合同管理,可以看看合同有没有到期,离职可以选择解除合同
2. 员工档案那边也可以选择其他进行离职处理


权限:系统是双重权限,既根据人的权限也根据这个人所在的角色范围权限有关
1. 权限管理,分用户类型和用户列表
2. 用户类型,选择可以看到哪些模块
3. 用户列表,可以通过添加用户组来选择可看到什么部门
用户类型和用户列表的优先级是 用户列表>用户类型

认识表,以及表字段,关联属性

组织表:OS_GROUP          DIM_ID_='1' (代表的意思是行政组织,可理解为从最大的组织里面查询)


员工档案表:W_EMP_INFO F_SPLZ='0'(代表的意思是是否离职,0代表否的意思,这段代码的意思就是在职的)


岗位表:W_STATION F_SPSX='0'(代表的意思是是否失效,0代表的意思是否,这段代码的意思就是有效的)


合同表:W_HTGL


职称管理表:W_ORG_ZCGL


可以调用石经理写的存储过程来查看表结构
EXEC PSZH_SELECT_TABLE '里面是需要查询的表名字'


####初次尝试存储过程的编写(夜班补贴管理)

/*
需求分析:
1. 首先得判断该员工上的是否上夜班

F_SGSJ<=20:00:00
F_XGSJ>=08:00:00(第二天)

2. 如果是夜班,上夜班时长>10小时 直接补贴55 上夜班时长<2小时 夜班补贴=0

F_GS>=10 夜班补贴=55
F_GS<=2 夜班补贴=0

3. 2小时<上夜班时长<10小时 夜班补贴计算公式为 55÷12×上班时长

2<=F_GS<=10 夜班补贴为 55÷12×上班时长


*/


/*
思路:夜班补贴表拿的是日考勤表的字段,多了一个夜班补贴

1.查询夜班补贴所有字段 w_PSM_ZS_YBBT



ID_ 主键
REF_ID_ 外键
PARENT_ID_ 父ID
F_CQRQ 出勤日期
F_CXMC 产线名称ID
F_CXMC_NAME 产线名称
F_XM 姓名
F_GH 工号ID
F_GH_NAME 工号
F_SGGXMC 上岗工序名称ID
F_SGGXMC_NAME 上岗工序名称
F_GS 工时
F_SGSJ 上岗时间
F_XGSJ 下岗时间
F_JJLX 计件类型ID
F_JJLX_NAME 计件类型
F_YBBT 夜班补贴
F_BZ 备注
INST_ID_ 流程实例ID
INST_STATUS_ 状态
TENANT_ID_ 租户ID
CREATE_TIME_ 创建时间
CREATE_BY_ 创建人ID
UPDATE_BY_ 更新人
UPDATE_TIME_ 更新时间
CHECK_STATUS_审核状态
CHECK_BY_ 审核人
CHECK_TIME_ 审核时间
GROUP_ID_ 组ID
F_JBF 加班费

2.先创建一个临时表@temp

*/



alter PROCEDURE PGL_YB --创建一个存储过程

@KSRQ SMALLDATETIME, --声明变量,这两个其实是日期框的值
@JSRQ SMALLDATETIME

AS
BEGIN
SET NOCOUNT ON
DECLARE @RetVal int = 0
,@RetMsg varchar(5000) --安全备份
-------------------------------------------------------------------------------------------------------

DECLARE @SBJS SMALLDATETIME --声明变量上岗时间
DECLARE @XBSJ SMALLDATETIME --声明变量下岗时间
DECLARE @GDYBBT NUMERIC(14,5) --定义一个夜班补参数



SET @SBJS = '19:00'
SET @GDYBBT =55/12



DECLARE @TEMP TABLE( --先创建一个临时表,因为是从日考勤那边拿数据,临时表会比创建新表更加便捷
ID INT IDENTITY (1,1),
F_CQRQ DATETIME, --出勤日期
F_CXMC_NAME VARCHAR(100), --产线名称
F_XM VARCHAR(100), --姓名
F_GH_NAME VARCHAR(100), --工号,
F_GS NUMERIC, --工时,
F_SGSJ SMALLDATETIME, --上岗时间,
F_XGSJ SMALLDATETIME, --下岗时间,
F_JJLX_NAME VARCHAR(100), --计件类型,
F_YBBT NUMERIC, --夜班补贴,
F_BZ VARCHAR(100), --备注,
CREATE_TIME_ DATETIME, --创建时间,
CREATE_BY_ VARCHAR(100) --创建人
)
INSERT INTO @TEMP( --!!!特别注意这边插入数据的时候 INSERT INTO 下面select from的表才是插入到临时表里的数据
F_CQRQ, --出勤日期
F_CXMC_NAME, --产线名称
F_XM, --姓名,
F_GH_NAME, --工号,
F_GS, --工时,
F_SGSJ, --上岗时间,
F_XGSJ, --下岗时间,
F_JJLX_NAME, --计件类型,
F_YBBT, --夜班补贴,
F_BZ, --备注,
CREATE_TIME_ , --创建时间,
CREATE_BY_ --创建人

)
SELECT ---因为是从日考勤这边拿的数据,所以from日考勤的表 将里里面的数据传给临时表
F_CQRQ, --出勤日期
F_CXMC_NAME, --产线名称
F_XM, --姓名,
F_GH_NAME, --工号,
F_GS, --工时,
F_SGSJ, --上岗时间,
F_XGSJ, --下岗时间,
F_JJLX_NAME, --计件类型,
0, --夜班补贴,
F_BZ, --备注,
CREATE_TIME_ , --创建时间,
CREATE_BY_ --创建人
FROM w_PSM_ZS_RKQ
WHERE F_CQRQ BETWEEN @KSRQ AND @JSRQ --这边的条件是出勤日期要在选的日期之间
AND CONVERT(varchar,F_SGSJ,8)>=@SBJS --然后这个意思是截取上岗日期的前八位后的时间 要大于定义的上班时间 判断是上的夜班


SELECT * FROM w_PSM_ZS_YBBT WHERE F_CQRQ BETWEEN @KSRQ AND @JSRQ
--这个意思是从表里面先查到这些数据
DELETE FROM w_PSM_ZS_YBBT WHERE F_CQRQ BETWEEN @KSRQ AND @JSRQ
--如果查到了的话讲原来的数据删除掉


--删除完成之后就可以插入新的数据了,从数据从哪里来呢,从刚被赋值的@temp临时表里面来

INSERT INTO w_PSM_ZS_YBBT(
ID_ ,
F_CQRQ, --出勤日期
F_CXMC_NAME, --产线名称
F_XM, --姓名,
F_GH_NAME, --工号,
F_GS, --工时,
F_SGSJ, --上岗时间,
F_XGSJ, --下岗时间,
F_JJLX_NAME, --计件类型,
F_YBBT, --夜班补贴,
F_BZ, --备注,
CREATE_TIME_ , --创建时间,
CREATE_BY_ --创建人
)
SELECT
NEWID(),
F_CQRQ, --出勤日期
F_CXMC_NAME, --产线名称
F_XM, --姓名,
F_GH_NAME, --工号,
F_GS, --工时,
F_SGSJ, --上岗时间,
F_XGSJ, --下岗时间,
F_JJLX_NAME, --计件类型,
0, --夜班补贴,
F_BZ, --备注,
CREATE_TIME_ , --创建时间,
CREATE_BY_ --创建人
FROM @TEMP
WHERE F_CQRQ BETWEEN @KSRQ AND @JSRQ --这边的条件是出勤日期要在选的日期之间
AND CONVERT(varchar,F_SGSJ,8)>=@SBJS


UPDATE w_PSM_ZS_YBBT SET F_YBBT = CASE WHEN F_GS>10 THEN 55
ELSE CASE WHEN F_GS <2 THEN 0
ELSE F_GS*@GDYBBT END
END




END


EXEC PGL_YB '2022-09-21','2022-09-23' --最后调用即可