This commit is contained in:
2026-08-20 10:55:26 +08:00
parent 34fe53caf9
commit 7622e414b6
6 changed files with 285 additions and 0 deletions
@@ -0,0 +1,47 @@
package com.budwk.app.zhgh.staffmanage.sourcechange.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.sourcechange.param.PendingConfirmUserPageForm;
import com.budwk.app.zhgh.staffmanage.sourcechange.service.PendingConfirmUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* 待确认人员记录页面及查询接口。
*/
@Api(tags = "待确认人员记录")
@IocBean
@At("/platform/sourcechange/pending")
public class PendingConfirmUserController {
@Inject
private PendingConfirmUserService pendingConfirmUserService;
/**
* 打开待确认人员记录页面。
*/
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/sourcechange/pending/index.html")
@SaCheckPermission("staff.sourcechange.pending")
public void index() {
}
/**
* 分页查询待确认或已确认人员。
*
* @param pageForm 查询条件
* @return 人员分页数据
*/
@At
@Ok("json")
@ApiOperation("分页查询待确认人员记录")
@SaCheckPermission("staff.sourcechange.pending")
public Result pageData(PendingConfirmUserPageForm pageForm) {
return Result.success(pendingConfirmUserService.pageData(pageForm));
}
}
@@ -0,0 +1,28 @@
package com.budwk.app.zhgh.staffmanage.sourcechange.param;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 待确认人员记录分页查询参数。
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PendingConfirmUserPageForm extends PageForm {
/** 所属工会ID。 */
private String unionId;
/** 所属单位ID。 */
private String unitId;
/** 人员类型。 */
private String personType;
/** 在职状态。 */
private String userState;
/** 确认状态:1待确认、2已确认,默认查询待确认。 */
private Integer pendingConfirmStatus = 1;
}
@@ -0,0 +1,27 @@
package com.budwk.app.zhgh.staffmanage.sourcechange.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.sourcechange.param.PendingConfirmUserPageForm;
/**
* 待确认人员记录业务服务。
*/
public interface PendingConfirmUserService extends BaseService<Sys_user> {
/**
* 分页查询待确认或已确认人员。
*
* @param pageForm 查询条件
* @return 人员分页数据
*/
Pagination pageData(PendingConfirmUserPageForm pageForm);
/**
* 人员变更提交成功后,将待确认状态更新为已确认。
*
* @param userId 系统用户ID
*/
void markConfirmed(String userId);
}
@@ -0,0 +1,123 @@
package com.budwk.app.zhgh.staffmanage.sourcechange.service.impl;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.staffmanage.sourcechange.param.PendingConfirmUserPageForm;
import com.budwk.app.zhgh.staffmanage.sourcechange.service.PendingConfirmUserService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.IocBean;
import java.util.Map;
/**
* 待确认人员记录业务实现。
*/
@IocBean(args = {"refer:dao"})
public class PendingConfirmUserServiceImpl extends BaseServiceImpl<Sys_user> implements PendingConfirmUserService {
private static final int STATUS_PENDING = 1;
private static final int STATUS_CONFIRMED = 2;
public PendingConfirmUserServiceImpl(Dao dao) {
super(dao);
}
/**
* 从系统用户表查询确认状态为待确认或已确认的人员。
*
* @param pageForm 查询条件
* @return 人员分页数据
*/
@Override
public Pagination pageData(PendingConfirmUserPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
userInfo.id,
userInfo.loginname,
userInfo.username,
userInfo.sex,
userInfo.userState,
userInfo.personType,
userInfo.unitId,
unitInfo.name AS unitName,
unionInfo.id unionId,
unionInfo.name AS unionName,
userInfo.pendingConfirmStatus
FROM sys_user userInfo
LEFT JOIN sys_unit unitInfo ON unitInfo.id = userInfo.unitId
LEFT JOIN sys_union unionInfo ON unionInfo.id = unitInfo.unionId
$condition
""");
Cnd cnd = Cnd.NEW();
int status = Integer.valueOf(STATUS_CONFIRMED).equals(pageForm.getPendingConfirmStatus())
? STATUS_CONFIRMED : STATUS_PENDING;
cnd.and("userInfo.pendingConfirmStatus", "=", status);
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup keywordGroup = new SqlExpressionGroup();
keywordGroup.orLike("userInfo.loginname", pageForm.getSearchKeyword());
keywordGroup.orLike("userInfo.username", pageForm.getSearchKeyword());
cnd.and(keywordGroup);
}
cnd.andEX("userInfo.unionId", "=", pageForm.getUnionId());
cnd.andEX("userInfo.unitId", "=", pageForm.getUnitId());
cnd.andEX("userInfo.personType", "=", pageForm.getPersonType());
cnd.andEX("userInfo.userState", "=", pageForm.getUserState());
String orderColumn = resolveOrderColumn(pageForm.getPageOrderName());
if (StrUtil.isAllNotBlank(orderColumn, pageForm.getPageOrderBy())) {
cnd.orderBy(orderColumn, PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.asc("userInfo.loginname");
}
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 变更提交成功后仅把待确认人员更新为已确认,重复调用不会改变其他状态。
*
* @param userId 系统用户ID
*/
@Override
public void markConfirmed(String userId) {
if (StrUtil.isBlank(userId)) {
return;
}
Sql sql = Sqls.create("""
UPDATE sys_user
SET pendingConfirmStatus = @confirmedStatus
WHERE id = @userId
AND pendingConfirmStatus = @pendingStatus
""");
sql.setParam("confirmedStatus", STATUS_CONFIRMED);
sql.setParam("pendingStatus", STATUS_PENDING);
sql.setParam("userId", userId);
dao().execute(sql);
}
/**
* 将前端排序字段转换为固定数据库字段,避免排序参数直接拼接到 SQL。
*
* @param pageOrderName 前端排序字段
* @return 允许排序的数据库字段,不支持时返回空字符串
*/
private String resolveOrderColumn(String pageOrderName) {
Map<String, String> orderColumns = Map.of(
"loginname", "userInfo.loginname",
"username", "userInfo.username",
"unionName", "unionInfo.name",
"unitName", "unitInfo.name",
"personType", "userInfo.personType",
"userState", "userInfo.userState"
);
return orderColumns.getOrDefault(StrUtil.nullToEmpty(pageOrderName), "");
}
}