Commit 4830f5a8 by yubin

请假

parent 23a63d0a
...@@ -18,6 +18,8 @@ import java.util.List; ...@@ -18,6 +18,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import static java.time.LocalTime.now;
@Api("日常请假管理") @Api("日常请假管理")
@Service("keyDmLeave") @Service("keyDmLeave")
public class KeyDmLeaveServiceImpl { public class KeyDmLeaveServiceImpl {
...@@ -26,34 +28,48 @@ public class KeyDmLeaveServiceImpl { ...@@ -26,34 +28,48 @@ public class KeyDmLeaveServiceImpl {
private static final String SUCCESS = "success"; private static final String SUCCESS = "success";
private final String namespace = "com.scpyun.platform.standard.jilinsscgsdp.keyDmLeave."; private final String namespace = "com.scpyun.platform.standard.jilinsscgsdp.keyDmLeave.";
private final String leaveTypeNamespace = "com.scpyun.platform.standard.jilinsscgsdp.keyDmLeaveType."; private final String leaveTypeNamespace = "com.scpyun.platform.standard.jilinsscgsdp.keyDmUserCategory.";
private final String approvalRecordNamespace = "com.scpyun.platform.standard.jilinsscgsdp.keyDmLeaveApprovalRecord."; private final String approvalRecordNamespace = "com.scpyun.platform.standard.jilinsscgsdp.keyDmLeaveApprovalRecord.";
@ApiOperation(value = "部门分页查询请假申请列表", desc = "分页查询") @ApiOperation(value = "请假申请查询", desc = "分页查询")
public Page<Map<String, Object>> selectList(Page<Map<String, Object>> map) { public Page<Map<String, Object>> selectList(Page<Map<String, Object>> map) {
if (map == null) map = new Page<>(); if (map == null) map = new Page<>();
Page<Map<String, Object>> map1 = commonService.findPage(namespace + "selectList", map); Page<Map<String, Object>> map1 = commonService.findPage(namespace + "selectList", map);
return map1; return map1;
} }
@ApiOperation(value = "个人分页查询请假申请列表", desc = "分页查询") @ApiOperation(value = "请假申请", desc = "分页查询")
public Page<Map<String, Object>> selectListByUserId(Page<Map<String, Object>> map) { public Page<Map<String, Object>> selectListByUserId(Page<Map<String, Object>> map) {
if (map == null) map = new Page<>(); if (map == null) map = new Page<>();
Page<Map<String, Object>> map1 = commonService.findPage(namespace + "selectListByUserId", map); Page<Map<String, Object>> map1 = commonService.findPage(namespace + "selectListByUserId", map);
return map1; return map1;
} }
@ApiOperation(value = "待审核列表", desc = "查询待审核数据") @ApiOperation(value = "请假待审核", desc = "分页查询")
public Page<Map<String, Object>> selectPendingList(Map<String, Object> map) { public Page<Map<String, Object>> selectPendingList(Map<String, Object> map) {
if (map == null) map = new HashMap<>(); if (map == null) map = new HashMap<>();
return commonService.findPage(namespace + "selectPendingList", map); return commonService.findPage(namespace + "selectPendingList", map);
} }
@ApiOperation(value = "待审核列表", desc = "查询待审核数据")
public List<Map<String, Object>> selectTransferApprovalList(Map<String, Object> map) {
if (map == null) map = new HashMap<>();
return commonService.findList(namespace + "selectTransferApprovalList", map);
}
@ApiOperation(value = "保存请假申请", desc = "新增或修改,请假单保存") @ApiOperation(value = "保存请假申请", desc = "新增或修改,请假单保存")
public String save(Map<String, Object> map) { public String save(Map<String, Object> map) {
if (map == null) throw new CustomException("参数不能为空"); if (map == null) throw new CustomException("参数不能为空");
Object id = map.get("id"); Object id = map.get("id");
if (id == null || String.valueOf(id).trim().isEmpty()) { Object leave_id = map.get("leave_id");
map.put("id", UUID.randomUUID().toString());
if (leave_id == null || String.valueOf(leave_id).trim().isEmpty()) {
// 新增:生成主表id,id为子表id(如果前端没传则生成新的)
String mainId = UUID.randomUUID().toString();
// 主表主键在 mapper 中使用名称 leave_id,确保插入时传入正确的字段名
map.put("leave_id", mainId);
// 为兼容可能使用 'id' 作为主表参数的旧调用方,同时设置 'id'
// 这样能避免在 mapper 绑定时出现 id 为空导致的约束错误
map.put("id", mainId);
String typeId = map.get("leave_type_id").toString(); String typeId = map.get("leave_type_id").toString();
String typeName = commonService.getObject(leaveTypeNamespace + "selectLeaveTypeById", typeId); String typeName = commonService.getObject(leaveTypeNamespace + "selectLeaveTypeById", typeId);
map.put("leave_type_name", typeName); map.put("leave_type_name", typeName);
...@@ -98,8 +114,8 @@ public class KeyDmLeaveServiceImpl { ...@@ -98,8 +114,8 @@ public class KeyDmLeaveServiceImpl {
if ((approverId != null && String.valueOf(approverId).trim().length() > 0) || if ((approverId != null && String.valueOf(approverId).trim().length() > 0) ||
(approverName != null && String.valueOf(approverName).trim().length() > 0)) { (approverName != null && String.valueOf(approverName).trim().length() > 0)) {
Map<String, Object> approvalRecord = new HashMap<>(); Map<String, Object> approvalRecord = new HashMap<>();
approvalRecord.put("id", UUID.randomUUID().toString()); approvalRecord.put("id", id == null || String.valueOf(id).trim().isEmpty() ? UUID.randomUUID().toString() : String.valueOf(id)); // 子表id
approvalRecord.put("leave_id", map.get("id")); approvalRecord.put("leave_id", mainId); // 主表id
approvalRecord.put("node_index", 1); approvalRecord.put("node_index", 1);
approvalRecord.put("node_type", 1); // 1 = 流程节点 approvalRecord.put("node_type", 1); // 1 = 流程节点
approvalRecord.put("approver_id", approverId == null ? null : String.valueOf(approverId)); approvalRecord.put("approver_id", approverId == null ? null : String.valueOf(approverId));
...@@ -117,17 +133,38 @@ public class KeyDmLeaveServiceImpl { ...@@ -117,17 +133,38 @@ public class KeyDmLeaveServiceImpl {
throw new CustomException("保存审批子表记录失败:" + e.getMessage()); throw new CustomException("保存审批子表记录失败:" + e.getMessage());
} }
} else { } else {
int aff = commonService.update(namespace + "update", map); // 编辑:id为子表id,leave_id为主表id,更新主表时用leave_id
Map<String, Object> updateMap = new HashMap<>(map);
updateMap.put("id", leave_id); // 更新主表时用主表id
int aff = commonService.update(namespace + "update", updateMap);
if (aff < 0) { if (aff < 0) {
throw new CustomException("保存失败"); throw new CustomException("保存失败");
} }
// 如果有子表记录需要更新(审批记录)
if (id != null && !String.valueOf(id).trim().isEmpty()) {
try {
Map<String, Object> approvalRecord = new HashMap<>();
approvalRecord.put("id", String.valueOf(id)); // 子表id
approvalRecord.put("leave_id", leave_id); // 主表id
// 复制其他需要更新的字段
Object approverId = map.get("approver_id");
Object approverName = map.get("approver_name");
if (approverId != null) approvalRecord.put("approver_id", String.valueOf(approverId));
if (approverName != null) approvalRecord.put("approver_name", String.valueOf(approverName));
// 更新子表记录
commonService.update(approvalRecordNamespace + "update", approvalRecord);
} catch (Exception e) {
// 子表更新异常不影响主表保存
throw new CustomException("保存审批子表记录失败:" + e.getMessage());
}
}
} }
return SUCCESS; return SUCCESS;
} }
@ApiOperation(value = "提交请假申请", desc = "提交进入审批流程") @ApiOperation(value = "提交请假申请", desc = "提交进入审批流程")
public String submit(Map<String, Object> map) { public String submit(Map<String, Object> map) {
if (map == null || map.get("id") == null) throw new CustomException("参数缺失"); if (map == null || map.get("leave_id") == null) throw new CustomException("参数缺失");
int aff = commonService.update(namespace + "submit", map); int aff = commonService.update(namespace + "submit", map);
commonService.update(approvalRecordNamespace + "submit", map); commonService.update(approvalRecordNamespace + "submit", map);
if (aff < 0) throw new CustomException("提交失败"); if (aff < 0) throw new CustomException("提交失败");
...@@ -136,7 +173,7 @@ public class KeyDmLeaveServiceImpl { ...@@ -136,7 +173,7 @@ public class KeyDmLeaveServiceImpl {
@ApiOperation(value = "撤回请假申请", desc = "撤回未完成审批的申请") @ApiOperation(value = "撤回请假申请", desc = "撤回未完成审批的申请")
public String revoke(Map<String, Object> map) { public String revoke(Map<String, Object> map) {
if (map == null || map.get("id") == null) throw new CustomException("参数缺失"); if (map == null || map.get("leave_id") == null) throw new CustomException("参数缺失");
int aff = commonService.update(namespace + "revoke", map); int aff = commonService.update(namespace + "revoke", map);
commonService.update(approvalRecordNamespace + "revoke", map); commonService.update(approvalRecordNamespace + "revoke", map);
if (aff < 0) throw new CustomException("撤回失败"); if (aff < 0) throw new CustomException("撤回失败");
...@@ -145,25 +182,53 @@ public class KeyDmLeaveServiceImpl { ...@@ -145,25 +182,53 @@ public class KeyDmLeaveServiceImpl {
@ApiOperation(value = "审批通过", desc = "审批操作-通过") @ApiOperation(value = "审批通过", desc = "审批操作-通过")
public String approve(Map<String, Object> map) { public String approve(Map<String, Object> map) {
if (map == null || map.get("id") == null) throw new CustomException("参数缺失"); if (map == null || map.get("leave_id") == null) throw new CustomException("参数缺失");
int aff = commonService.update(namespace + "approve", map); int aff = commonService.update(namespace + "approve", map);
commonService.update(namespace + "approve", map); commonService.update(approvalRecordNamespace + "approve", map);
if (aff < 0) throw new CustomException("审批失败"); if (aff < 0) throw new CustomException("审批失败");
return SUCCESS; return SUCCESS;
} }
@ApiOperation(value = "审批驳回", desc = "审批操作-驳回") @ApiOperation(value = "审批驳回", desc = "审批操作-驳回")
public String reject(Map<String, Object> map) { public String reject(Map<String, Object> map) {
if (map == null || map.get("id") == null) throw new CustomException("参数缺失"); if (map == null || map.get("leave_id") == null) throw new CustomException("参数缺失");
int aff = commonService.update(namespace + "reject", map); int aff = commonService.update(namespace + "reject", map);
commonService.update(approvalRecordNamespace + "reject", map);
if (aff < 0) throw new CustomException("驳回失败"); if (aff < 0) throw new CustomException("驳回失败");
return SUCCESS; return SUCCESS;
} }
@ApiOperation(value = "转审批", desc = "审批操作-转审批")
public String transferApproval(Map<String, Object> map) {
if (map == null || map.get("id") == null) throw new CustomException("参数缺失");
Map<String, Object> leave = commonService.getObject(approvalRecordNamespace + "selectById", map);
int aff = commonService.update(approvalRecordNamespace + "transferApproval", map);
commonService.update(namespace + "transferApproval", map);
leave.put("id", UUID.randomUUID().toString());
leave.put("approver_id", map.get("approver_id"));
leave.put("approver_name", map.get("approver_name"));
DateTime now = DateTime.now();
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String approverTimeStr = now.toString(formatter);
leave.put("approver_time", approverTimeStr);
leave.put("node_type",2);
leave.put("node_index", Integer.parseInt(leave.get("node_index").toString()) + 1);
commonService.insert(approvalRecordNamespace + "insert", leave);
if (aff < 0) throw new CustomException("转审批失败");
return SUCCESS;
}
@ApiOperation(value = "获取请假详情(含审批记录)", desc = "获取详情") @ApiOperation(value = "获取请假详情(含审批记录)", desc = "获取详情")
public Map<String, Object> getById(Map<String, Object> map) { public Map<String, Object> getById(Map<String, Object> map) {
if (map == null || map.get("id") == null) throw new CustomException("参数缺失"); if (map == null || map.get("id") == null) throw new CustomException("参数缺失");
Map<String, Object> ret = new HashMap<>(); Map<String, Object> ret = new HashMap<>();
// 兼容 mapper 中使用的参数名(mapper 使用 #{leave_id}),
// 将传入的 id 同步为 leave_id,确保 SQL 能正确匹配到主表记录
if (map.get("leave_id") == null) {
map.put("leave_id", map.get("id"));
}
Map<String, Object> app = commonService.getObject(namespace + "getById", map); Map<String, Object> app = commonService.getObject(namespace + "getById", map);
ret.putAll(app == null ? new HashMap<>() : app); ret.putAll(app == null ? new HashMap<>() : app);
// 子表:审批记录 // 子表:审批记录
...@@ -171,6 +236,17 @@ public class KeyDmLeaveServiceImpl { ...@@ -171,6 +236,17 @@ public class KeyDmLeaveServiceImpl {
approvals = approvals == null ? new java.util.ArrayList<>() : approvals; approvals = approvals == null ? new java.util.ArrayList<>() : approvals;
ret.put("approvals", approvals); ret.put("approvals", approvals);
// 从审批记录中获取审批人信息(取第一条记录的审批人信息)
if (!approvals.isEmpty()) {
Map<String, Object> firstApproval = approvals.get(0);
if (firstApproval.get("approver_id") != null) {
ret.put("approver_id", firstApproval.get("approver_id"));
}
if (firstApproval.get("approver_name") != null) {
ret.put("approver_name", firstApproval.get("approver_name"));
}
}
// 将子表统一放入 subTables 集合,便于前端区分不同子表 // 将子表统一放入 subTables 集合,便于前端区分不同子表
Map<String, List<Map<String, Object>>> subTables = new HashMap<>(); Map<String, List<Map<String, Object>>> subTables = new HashMap<>();
subTables.put("approvalRecords", approvals); subTables.put("approvalRecords", approvals);
...@@ -179,8 +255,8 @@ public class KeyDmLeaveServiceImpl { ...@@ -179,8 +255,8 @@ public class KeyDmLeaveServiceImpl {
} }
@ApiOperation(value = "审批历史查询", desc = "查询审批历史") @ApiOperation(value = "审批历史查询", desc = "查询审批历史")
public Page<Map<String, Object>> selectApprovalHistory(Map<String, Object> map) { public Page<Map<String, Object>> selectApprovalHistory(Page<Map<String, Object>> map) {
if (map == null) map = new HashMap<>(); if (map == null) map = new Page<>();
return commonService.findPage(approvalRecordNamespace + "selectApprovalHistory", map); return commonService.findPage(approvalRecordNamespace + "selectApprovalHistory", map);
} }
......
...@@ -232,5 +232,9 @@ public class KeyDmUserCategoryServiceImpl { ...@@ -232,5 +232,9 @@ public class KeyDmUserCategoryServiceImpl {
} }
} }
@ApiOperation(value = "获取人员权限配置列表", desc = "从字典获取权限并关联用户")
public List<Map<String, Object>> selectOrgPermission(Map<String, Object> map) {
if (map == null) map = new HashMap<>();
return commonService.findList(namespace + "selectOrgPermission", map);
}
} }
...@@ -13,6 +13,15 @@ ...@@ -13,6 +13,15 @@
<if test="params.user_name != null and params.user_name != ''"> <if test="params.user_name != null and params.user_name != ''">
AND user_name LIKE CONCAT('%', #{params.user_name}, '%') AND user_name LIKE CONCAT('%', #{params.user_name}, '%')
</if> </if>
<!-- 支持按起止时间区间查询(来自 params.params.start_time / params.params.end_time):返回与区间有交集的请假记录 -->
<if test="params.params != null and params.params.start_time != null and params.params.start_time != '' and params.params.end_time != null and params.params.end_time != ''">
AND submit_time &lt; #{params.params.end_time}
AND submit_time &gt;= #{params.params.start_time}
</if>
<!-- 支持按状态过滤(来自 params.params.status,例如: 0,1,2,9,-1) -->
<if test="params.params != null and params.params.status != null and params.params.status != ''">
AND status = #{params.params.status}
</if>
<if test="params._user.company_id != null and params._user.company_id != ''"> <if test="params._user.company_id != null and params._user.company_id != ''">
AND department_id LIKE CONCAT('%', #{params._user.parent_id}, '%') AND department_id LIKE CONCAT('%', #{params._user.parent_id}, '%')
</if> </if>
...@@ -22,37 +31,148 @@ ...@@ -22,37 +31,148 @@
<select id="selectListByUserId" parameterType="page" resultType="map"> <select id="selectListByUserId" parameterType="page" resultType="map">
SELECT SELECT
id,user_id,user_name,department_id,department_name,leave_type_id,leave_type_name, r.id,
start_time,end_time,duration_unit,duration,reason,emergency_contact,emergency_phone, a.id as leave_id,
status,back_reason,submit_time,approval_complete_time,op_result,is_used,create_by,create_time,update_by,update_time,order_no a.user_id,
FROM jl_key_dm_leave_application r.approver_id,
r.approver_name,
a.user_name,
a.department_id,
a.department_name,
a.leave_type_id,
a.leave_type_name,
a.start_time,
a.end_time,
a.duration_unit,
a.duration,
a.reason,
a.emergency_contact,
a.emergency_phone,
a.status,
a.back_reason,
a.submit_time,
a.approval_complete_time,
a.op_result,
a.is_used,
a.create_by,
a.create_time,
a.update_by,
a.update_time,
a.order_no
FROM jl_key_dm_leave_application a
left join jl_key_dm_leave_approval_record r on r.leave_id=a.id
<where> <where>
AND is_used = 1 AND a.is_used = 1
<if test="params.params.user_name != null and params.params.user_name != ''"> AND r.node_type = 1
AND user_name LIKE CONCAT('%', #{params.user_name}, '%')
</if>
<if test="params._user.id != null and params._user.id != ''"> <if test="params._user.id != null and params._user.id != ''">
AND user_id LIKE CONCAT('%', #{params._user.id}, '%') AND a.user_id LIKE CONCAT('%', #{params._user.id}, '%')
</if>
<!-- 支持按起止时间区间查询(来自 params.params.start_time / params.params.end_time) -->
<if test="params.params != null and params.params.start_time != null and params.params.start_time != '' and params.params.end_time != null and params.params.end_time != ''">
AND a.start_time &lt; #{params.params.end_time}
AND a.end_time &gt;= #{params.params.start_time}
</if>
<!-- 支持按状态过滤(来自 params.params.status) -->
<if test="params.params != null and params.params.status != null and params.params.status != ''">
AND a.status = #{params.params.status}
</if> </if>
</where> </where>
ORDER BY submit_time DESC ORDER BY a.submit_time DESC
</select> </select>
<select id="selectPendingList" parameterType="page" resultType="map"> <select id="selectPendingList" parameterType="page" resultType="map">
SELECT * FROM jl_key_dm_leave_application a SELECT
r.id,
a.id AS leave_id,
a.user_id,
a.user_name,
a.department_id,
a.department_name,
a.leave_type_id,
a.leave_type_name,
a.start_time,
a.end_time,
a.duration_unit,
a.duration,
a.reason,
a.emergency_contact,
a.emergency_phone,
a.status,
a.back_reason,
a.submit_time,
a.approval_complete_time,
a.op_result,
a.is_used,
a.create_by,
a.create_time,
a.update_by,
a.update_time,
a.order_no
FROM jl_key_dm_leave_application a
left JOIN jl_key_dm_leave_approval_record r ON r.leave_id=a.id left JOIN jl_key_dm_leave_approval_record r ON r.leave_id=a.id
<where> <where>
AND a.is_used = 1 AND a.is_used = 1
AND r.status = 1 AND r.status = 1
<if test="params._user.id != null and params._user.id != ''"> <if test="params._user.id != null and params._user.id != ''">
AND r.approver_id = #{params._user.id} AND r.approver_id = #{params._user.id}
</if> </if>
<!-- 支持按起止时间区间查询(来自 params.params.start_time / params.params.end_time) -->
<if test="params.params != null and params.params.start_time != null and params.params.end_time != null">
AND a.start_time &lt; #{params.params.end_time}
AND a.end_time &gt;= #{params.params.start_time}
</if>
<!-- 支持按状态过滤(来自 params.params.status) -->
<if test="params.params != null and params.params.status != null and params.params.status != ''">
AND a.status = #{params.params.status}
</if>
</where> </where>
ORDER BY a.submit_time DESC ORDER BY a.submit_time DESC
</select> </select>
<select id="selectTransferApprovalList" parameterType="page" resultType="map">
SELECT
r.id,
r.leave_id AS leave_id,
r.node_index,
r.node_type,
r.approver_id,
r.approver_name,
r.approver_result,
r.approver_time,
r.status,
r.comment,
r.transfer_to_id,
r.transfer_to_name,
r.transfer_reason,
r.is_used,
r.create_by,
r.create_time,
r.update_by,
r.update_time,
r.order_no,
a.submit_time
FROM jl_key_dm_leave_application a
LEFT JOIN jl_key_dm_leave_approval_record r
ON r.leave_id = a.id
WHERE
a.is_used = 1
And r.is_used = 1
AND r.id != #{leave_id}
AND r.leave_id = (select leave_id from jl_key_dm_leave_approval_record where id = #{leave_id} )
<!-- 可选过滤:按起止时间和状态 -->
<if test="params.start != null and params.end != null">
AND a.start_time &lt; #{params.end}
AND a.end_time &gt;= #{params.start}
</if>
<if test="params.status != null and params.status != ''">
AND a.status = #{params.status}
</if>
ORDER BY a.submit_time DESC
</select>
<select id="getById" parameterType="map" resultType="map"> <select id="getById" parameterType="map" resultType="map">
SELECT * FROM jl_key_dm_leave_application WHERE id = #{id} LIMIT 1 SELECT * FROM jl_key_dm_leave_application WHERE id = #{leave_id} LIMIT 1
</select> </select>
<insert id="insert" parameterType="map"> <insert id="insert" parameterType="map">
...@@ -61,7 +181,7 @@ ...@@ -61,7 +181,7 @@
start_time,end_time,duration_unit,duration,reason,emergency_contact,emergency_phone, start_time,end_time,duration_unit,duration,reason,emergency_contact,emergency_phone,
status,submit_time,is_used,create_by,create_time,order_no status,submit_time,is_used,create_by,create_time,order_no
) VALUES ( ) VALUES (
#{id},#{_user.id},#{_user.name},#{_user.parent_id},#{_user.company_name},#{leave_type_id},#{leave_type_name}, #{leave_id},#{_user.id},#{_user.name},#{_user.parent_id},#{_user.company_name},#{leave_type_id},#{leave_type_name},
#{start_time},#{end_time},#{duration_unit},#{duration},#{reason},#{emergency_contact},#{emergency_phone}, #{start_time},#{end_time},#{duration_unit},#{duration},#{reason},#{emergency_contact},#{emergency_phone},
#{status},#{submit_time},1,#{_user.id},NOW(),#{order_no} #{status},#{submit_time},1,#{_user.id},NOW(),#{order_no}
) )
...@@ -81,35 +201,41 @@ ...@@ -81,35 +201,41 @@
emergency_phone = #{emergency_phone}, emergency_phone = #{emergency_phone},
update_by = #{_user.id}, update_by = #{_user.id},
update_time = NOW() update_time = NOW()
WHERE id = #{id} WHERE id = #{leave_id}
</update> </update>
<!-- 提交:设置 status=1 (审核中),submit_time=NOW() --> <!-- 提交:设置 status=1 (审核中),submit_time=NOW() -->
<update id="submit" parameterType="map"> <update id="submit" parameterType="map">
UPDATE jl_key_dm_leave_application UPDATE jl_key_dm_leave_application
SET status = 1, submit_time = NOW(), op_result = 0, update_by = #{_user.id}, update_time = NOW() SET status = 1, submit_time = NOW(), op_result = 0, update_by = #{_user.id}, update_time = NOW()
WHERE id = #{id} WHERE id = #{leave_id}
</update>
<update id="transferApproval" parameterType="map">
UPDATE jl_key_dm_leave_application
SET status = 2, op_result = 0, update_by = #{_user.id}, update_time = NOW()
WHERE id = #{leave_id} AND status = 1
</update> </update>
<!-- 撤回:仅限审核中状态撤回,设置 status=0 --> <!-- 撤回:仅限审核中状态撤回,设置 status=0 -->
<update id="revoke" parameterType="map"> <update id="revoke" parameterType="map">
UPDATE jl_key_dm_leave_application UPDATE jl_key_dm_leave_application
SET status = 0, op_result = 0, update_by = #{_user.id}, update_time = NOW() SET status = 0, op_result = 0, update_by = #{_user.id}, update_time = NOW()
WHERE id = #{id} AND status = 1 WHERE id = #{leave_id} AND status = 1
</update> </update>
<!-- 审批通过:设置 status=9, op_result=1, approval_complete_time --> <!-- 审批通过:设置 status=9, op_result=1, approval_complete_time -->
<update id="approve" parameterType="map"> <update id="approve" parameterType="map">
UPDATE jl_key_dm_leave_application UPDATE jl_key_dm_leave_application
SET status = 9, op_result = 1, approver_time = NOW(), update_by = #{_user.id}, update_time = NOW() SET status = 9, op_result = 1, approval_complete_time = NOW(), update_by = #{_user.id}, update_time = NOW()
WHERE id = #{id} WHERE id = #{leave_id}
</update> </update>
<!-- 驳回:设置 status=-1, op_result=-1, back_reason --> <!-- 驳回:设置 status=-1, op_result=-1, back_reason -->
<update id="reject" parameterType="map"> <update id="reject" parameterType="map">
UPDATE jl_key_dm_leave_application UPDATE jl_key_dm_leave_application
SET status = -1, op_result = -1, back_reason = #{comment}, approver_time = NOW(), update_by = #{_user.id}, update_time = NOW() SET status = -1, op_result = -1, back_reason = #{comment}, approval_complete_time = NOW(), update_by = #{_user.id}, update_time = NOW()
WHERE id = #{id} WHERE id = #{leave_id}
</update> </update>
<!-- 统计:按人员统计已通过请假时长(按天数汇总),params.start, params.end, params.department --> <!-- 统计:按人员统计已通过请假时长(按天数汇总),params.start, params.end, params.department -->
...@@ -120,7 +246,8 @@ ...@@ -120,7 +246,8 @@
AND is_used = 1 AND is_used = 1
AND status = 9 AND status = 9
<if test="start != null and end != null"> <if test="start != null and end != null">
AND submit_time BETWEEN #{start} AND #{end} And start_time &lt; #{end}
AND end_time >= #{start};
</if> </if>
<if test="department != null and department != ''"> <if test="department != null and department != ''">
AND (department_id = #{department} OR department_name LIKE CONCAT('%', #{department}, '%')) AND (department_id = #{department} OR department_name LIKE CONCAT('%', #{department}, '%'))
......
...@@ -5,7 +5,15 @@ ...@@ -5,7 +5,15 @@
<select id="selectApprovalRecords" parameterType="map" resultType="map"> <select id="selectApprovalRecords" parameterType="map" resultType="map">
SELECT id,leave_id,node_index,node_type,approver_id,approver_name,approver_result,approver_time,status,comment,transfer_to_id,transfer_to_name,transfer_reason SELECT id,leave_id,node_index,node_type,approver_id,approver_name,approver_result,approver_time,status,comment,transfer_to_id,transfer_to_name,transfer_reason
FROM jl_key_dm_leave_approval_record FROM jl_key_dm_leave_approval_record
WHERE leave_id = #{id} WHERE leave_id = #{leave_id} and
status != 0
ORDER BY approver_time ASC
</select>
<select id="selectById" parameterType="map" resultType="map">
SELECT id,leave_id,node_index,node_type,approver_id,approver_name,approver_result,approver_time,status,comment,transfer_to_id,transfer_to_name,transfer_reason
FROM jl_key_dm_leave_approval_record
WHERE id = #{id}
ORDER BY approver_time ASC ORDER BY approver_time ASC
</select> </select>
...@@ -13,51 +21,118 @@ ...@@ -13,51 +21,118 @@
INSERT INTO jl_key_dm_leave_approval_record( INSERT INTO jl_key_dm_leave_approval_record(
id,leave_id,node_index,node_type,approver_id,approver_name,approver_result,approver_time,status,comment,transfer_to_id,transfer_to_name,transfer_reason,is_used,create_by,create_time,order_no id,leave_id,node_index,node_type,approver_id,approver_name,approver_result,approver_time,status,comment,transfer_to_id,transfer_to_name,transfer_reason,is_used,create_by,create_time,order_no
) VALUES ( ) VALUES (
#{id},#{leave_id},#{node_index},#{node_type},#{approver_id},#{approver_name},#{approver_result},#{approver_time},#{status},#{comment},#{transfer_to_id},#{transfer_to_name},#{transfer_reason},1,#{_user.id},NOW(),#{order_no} #{id},#{leave_id},#{node_index},#{node_type},#{approver_id},#{approver_name},#{approver_result},NOW(),#{status},#{comment},#{transfer_to_id},#{transfer_to_name},#{transfer_reason},1,#{_user.id},NOW(),#{order_no}
) )
</insert> </insert>
<select id="selectApprovalHistory" parameterType="page" resultType="map"> <select id="selectApprovalHistory" parameterType="page" resultType="map">
SELECT a.*, l.user_name, l.leave_type_name, l.start_time, l.end_time SELECT a.*
FROM jl_key_dm_leave_approval_record a FROM jl_key_dm_leave_application a
LEFT JOIN jl_key_dm_leave_application l ON l.id = a.leave_id LEFT JOIN jl_key_dm_leave_approval_record r ON a.id = r.leave_id
<where> <where>
AND a.is_used = 1 a.is_used = 1
AND (
(r.node_type = 1
<if test="params._user.id != null and params._user.id != ''">
AND r.approver_id = #{params._user.id}
</if>
)
OR
(r.node_type = 1 AND r.transfer_to_id = #{params._user.id})
)
<if test="params.approver_name != null and params.approver_name != ''"> <if test="params.approver_name != null and params.approver_name != ''">
AND a.approver_name LIKE CONCAT('%', #{params.approver_name}, '%') AND a.approver_name LIKE CONCAT('%', #{params.approver_name}, '%')
</if> </if>
<if test="params._user.id != null and params._user.id != ''"> <!-- 支持按起止时间区间查询(来自 params.params.start_time / params.params.end_time):返回与区间有交集的请假记录 -->
AND a.approver_id = #{params._user.id} <if test="params.params != null and params.params.start_time != null and params.params.start_time != '' and params.params.end_time != null and params.params.end_time != ''">
AND a.start_time &lt; #{params.params.end_time}
AND a.end_time &gt;= #{params.params.start_time}
</if>
<!-- 支持按状态过滤(来自 params.params.status) -->
<if test="params.params != null and params.params.status != null and params.params.status != ''">
AND a.status = #{params.params.status}
</if> </if>
</where> </where>
ORDER BY a.approver_time DESC ORDER BY FIELD(a.status, 1) DESC, a.submit_time DESC
</select> </select>
<update id="submit" parameterType="map"> <update id="submit" parameterType="map">
UPDATE jl_key_dm_leave_approval_record UPDATE jl_key_dm_leave_approval_record
SET status = 1,update_by = #{_user.id}, update_time = NOW() SET status = 1,update_by = #{_user.id}, update_time = NOW()
WHERE leave_id = #{id} WHERE id = #{id}
</update> </update>
<!-- 撤回:仅限审核中状态撤回,设置 status=0 --> <!-- 撤回:仅限待审批状态(status=1)撤回,设置 status=0 -->
<update id="revoke" parameterType="map"> <update id="revoke" parameterType="map">
UPDATE jl_key_dm_leave_approval_record UPDATE jl_key_dm_leave_approval_record
SET status = 0, update_by = #{_user.id}, update_time = NOW() SET status = 0, update_by = #{_user.id}, update_time = NOW()
WHERE leave_id = #{id} AND status = 1 WHERE id = #{id} AND status = 1
</update> </update>
<!-- 审批通过:设置 status=9, op_result=1, approval_complete_time --> <!-- 审批通过:设置 status=9, op_result=1, approval_complete_time -->
<update id="approve" parameterType="map"> <update id="approve" parameterType="map">
UPDATE jl_key_dm_leave_approval_record UPDATE jl_key_dm_leave_approval_record
SET status = 2, approval_complete_time = NOW(), update_by = #{_user.id}, update_time = NOW(),approver_result = 1 SET status = 2, approver_time = NOW(), update_by = #{_user.id}, update_time = NOW(),approver_result = 1
WHERE leave_id = #{id} WHERE id = #{id}
</update> </update>
<!-- 驳回:设置 status=-1, op_result=-1, back_reason --> <!-- 驳回:设置 status=-1, op_result=-1, back_reason -->
<update id="reject" parameterType="map"> <update id="reject" parameterType="map">
UPDATE jl_key_dm_leave_approval_record UPDATE jl_key_dm_leave_approval_record
SET status = 2, back_reason = #{comment}, approval_complete_time = NOW(), update_by = #{_user.id}, update_time = NOW(),approver_result = -1 SET status = 2, approver_time = NOW(), update_by = #{_user.id}, update_time = NOW(),approver_result = -1
WHERE leave_id = #{id} WHERE id = #{id}
</update>
<update id="update" parameterType="map">
UPDATE jl_key_dm_leave_approval_record
SET
update_by = #{_user.id},
update_time = NOW()
<!-- 条件判断:approver_id 非空时才更新 -->
<if test="approver_id != null">
,approver_id = #{approver_id}
</if>
<!-- 条件判断:approver_name 非空时才更新 -->
<if test="approver_name != null">
,approver_name = #{approver_name}
</if>
<!-- 条件判断:status 非空时才更新 -->
<if test="status != null">
,status = #{status}
</if>
<!-- 条件判断:approver_result 非空时才更新 -->
<if test="approver_result != null">
,approver_result = #{approver_result}
</if>
<!-- 条件判断:comment 非空时才更新 -->
<if test="comment != null">
,comment = #{comment}
</if>
WHERE
id = #{id}
</update>
<update id="transferApproval" parameterType="map">
UPDATE jl_key_dm_leave_approval_record
SET
status = 2,
approver_result = 0,
update_by = #{_user.id},
update_time = NOW()
<!-- 条件判断:approver_id 非空时才更新 -->
<if test="approver_id != null and approver_id != ''">
,transfer_to_id = #{approver_id}
</if>
<!-- 条件判断:approver_name 非空时才更新 -->
<if test="approver_name != null and approver_name != ''">
,transfer_to_name = #{approver_name}
</if>
<!-- 条件判断:comment 非空时才更新 -->
<if test="comment != null and comment != ''">
,transfer_reason = #{comment}
</if>
WHERE
id = #{id}
</update> </update>
</mapper> </mapper>
......
...@@ -84,6 +84,14 @@ ...@@ -84,6 +84,14 @@
ORDER BY order_no ASC, create_time DESC ORDER BY order_no ASC, create_time DESC
</select> </select>
<select id="selectLeaveTypeById" parameterType="String" resultType="String">
SELECT
type_name
FROM jl_key_dm_leave_type
where id = #{id}
ORDER BY order_no ASC, create_time DESC
</select>
<select id="findLeaveTypeList" parameterType="map" resultType="map"> <select id="findLeaveTypeList" parameterType="map" resultType="map">
SELECT SELECT
id, id,
...@@ -459,6 +467,44 @@ ...@@ -459,6 +467,44 @@
update_time = NOW() update_time = NOW()
WHERE id = #{id} WHERE id = #{id}
</update> </update>
<select id="selectOrgPermission" parameterType="map" resultType="map">
SELECT
u.id,
u.is_ext,
u.is_leave,
u.rc_role_id,
u.office_id,
u.name,
u.gh,
u.email,
u.phone,
u.mobile,
u.birthday,
u.in_work_time,
u.leader,
u.leader_name,
u.is_used,
u.create_by,
u.create_time,
u.update_by,
u.update_time,
u.order_no
FROM jl_key_dm_permission_user p
left join jl_key_dm_user u on p.user_id = u.id
<where>
AND is_used = 1
<if test="_user.company_id != null and _user.company_id != ''">
AND u.office_id = #{_user.company_id}
</if>
<if test="_user.id != null and _user.id != ''">
AND u.id != #{_user.id}
</if>
<if test="permissionType != null and permissionType != ''">
AND p.permission_code = #{permissionType}
</if>
</where>
ORDER BY order_no ASC, create_time DESC
</select>
</mapper> </mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论