feat: 完善人员数据同步与筛选
- 在人员来源表中保存专业技术职务代码 ZYJSZWDM - 支持按所属单位、在职状态和人员类型筛选空数据 - 在获取信息中心数据和更新系统用户数据页面添加搜索重置按钮 - 同步人员时按人员类型或在职状态设置工会会员标记
This commit is contained in:
@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
|
import org.nutz.dao.util.cri.Static;
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
import org.nutz.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
@@ -47,10 +48,10 @@ public class SysDataUserPullController {
|
|||||||
cnd.andEX(Sys_user_source::getPullTime, "=", pageForm.getPullTime());
|
cnd.andEX(Sys_user_source::getPullTime, "=", pageForm.getPullTime());
|
||||||
cnd.and(Cnd.likeEX(Sys_user_source::getUsername, pageForm.getUserName()));
|
cnd.and(Cnd.likeEX(Sys_user_source::getUsername, pageForm.getUserName()));
|
||||||
cnd.and(Cnd.likeEX(Sys_user_source::getLoginname, pageForm.getLoginName()));
|
cnd.and(Cnd.likeEX(Sys_user_source::getLoginname, pageForm.getLoginName()));
|
||||||
cnd.andEX(Sys_user_source::getUnitName, "=", pageForm.getUnitName());
|
addSourceFilter(cnd, "us.unitName", pageForm.getUnitName());
|
||||||
cnd.andEX(Sys_user_source::getUserState, "=", pageForm.getUserState());
|
addSourceFilter(cnd, "us.userState", pageForm.getUserState());
|
||||||
cnd.andEX(Sys_user_source::getPreparedBy, "=", pageForm.getPreparedBy());
|
cnd.andEX(Sys_user_source::getPreparedBy, "=", pageForm.getPreparedBy());
|
||||||
cnd.andEX(Sys_user_source::getPersonType, "=", pageForm.getPersonType());
|
addSourceFilter(cnd, "us.personType", pageForm.getPersonType());
|
||||||
|
|
||||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||||
@@ -61,6 +62,15 @@ public class SysDataUserPullController {
|
|||||||
return Result.success(pagination);
|
return Result.success(pagination);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addSourceFilter(Cnd cnd, String column, String value) {
|
||||||
|
if ("__EMPTY__".equals(value)) {
|
||||||
|
cnd.and(new Static("(%s IS NULL OR LOWER(%s) REGEXP '^[[:space:]]*(null)?[[:space:]]*$')"
|
||||||
|
.formatted(column, column)));
|
||||||
|
} else {
|
||||||
|
cnd.andEX(column, "=", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("sys.data.user.pull")
|
@SaCheckPermission("sys.data.user.pull")
|
||||||
@ApiOperation("拉取用户数据")
|
@ApiOperation("拉取用户数据")
|
||||||
|
|||||||
@@ -7,4 +7,18 @@ import com.budwk.app.sys.param.SysDataUserUpdateParam;
|
|||||||
*/
|
*/
|
||||||
public interface SysDataUserUpdateService {
|
public interface SysDataUserUpdateService {
|
||||||
String update(SysDataUserUpdateParam updateParam);
|
String update(SysDataUserUpdateParam updateParam);
|
||||||
|
|
||||||
|
static boolean qualifiesAsUnionMember(String personType, String userState) {
|
||||||
|
if ("在岗".equals(userState)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (personType == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return switch (personType) {
|
||||||
|
case "在编", "兰溪编制", "聘用合同制(享受人事代理待遇)",
|
||||||
|
"聘用合同制", "聘用制专家", "人事代理" -> true;
|
||||||
|
default -> false;
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -164,6 +164,9 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
|
|||||||
// 创建用户对象
|
// 创建用户对象
|
||||||
Sys_user u = new Sys_user();
|
Sys_user u = new Sys_user();
|
||||||
BeanUtils.copyProperties(source, u);
|
BeanUtils.copyProperties(source, u);
|
||||||
|
if (SysDataUserUpdateService.qualifiesAsUnionMember(u.getPersonType(), u.getUserState())) {
|
||||||
|
u.setMember(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
// 新增用户,初始化数据
|
// 新增用户,初始化数据
|
||||||
|
|||||||
@@ -123,6 +123,9 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic
|
|||||||
//加入到系统用户表
|
//加入到系统用户表
|
||||||
List<Sys_user> sysUsers = BeanUtil.copyToList(userSources, Sys_user.class);
|
List<Sys_user> sysUsers = BeanUtil.copyToList(userSources, Sys_user.class);
|
||||||
for (Sys_user sysUser : sysUsers) {
|
for (Sys_user sysUser : sysUsers) {
|
||||||
|
if (SysDataUserUpdateService.qualifiesAsUnionMember(sysUser.getPersonType(), sysUser.getUserState())) {
|
||||||
|
sysUser.setMember(true);
|
||||||
|
}
|
||||||
//重新设置
|
//重新设置
|
||||||
sysUser.setId(R.UU32());
|
sysUser.setId(R.UU32());
|
||||||
String salt = R.UU32();
|
String salt = R.UU32();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<slot></slot>
|
<slot></slot>
|
||||||
<div class="search-query" v-if="isSearchButton">
|
<div class="search-query" v-if="isSearchButton">
|
||||||
<el-button type="primary" icon="el-icon-search" @click="$emit('search', null)">搜索</el-button>
|
<el-button type="primary" icon="el-icon-search" @click="$emit('search', null)">搜索</el-button>
|
||||||
|
<slot name="actions"></slot>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ layout("/layouts/platform.html"){
|
|||||||
<el-input placeholder="请输入工号" clearable v-model="pageForm.loginName" style="width: 100%"></el-input>
|
<el-input placeholder="请输入工号" clearable v-model="pageForm.loginName" style="width: 100%"></el-input>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="所属单位">
|
<search-item label="所属单位">
|
||||||
<el-select placeholder="请选择所属单位" v-model="pageForm.unitName" clearable filterable>
|
<el-select placeholder="全部" v-model="pageForm.unitName" clearable filterable>
|
||||||
<el-option v-for="item in unitNameOptions" :key="item" :label="item" :value="item"></el-option>
|
<el-option v-for="item in unitNameOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
<search-item label="在职状态">
|
<search-item label="在职状态">
|
||||||
<el-select v-model="pageForm.userState" clearable filterable>
|
<el-select placeholder="全部" v-model="pageForm.userState" clearable filterable>
|
||||||
<el-option v-for="item in userStateOptions" :label="item" :value="item"></el-option>
|
<el-option v-for="item in userStateOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
<!-- 暂停用人方式筛选,保留查询控件供后续恢复。
|
<!-- 暂停用人方式筛选,保留查询控件供后续恢复。
|
||||||
@@ -55,10 +55,11 @@ layout("/layouts/platform.html"){
|
|||||||
</search-item>
|
</search-item>
|
||||||
-->
|
-->
|
||||||
<search-item label="人员类型">
|
<search-item label="人员类型">
|
||||||
<el-select v-model="pageForm.personType" clearable filterable>
|
<el-select placeholder="全部" v-model="pageForm.personType" clearable filterable>
|
||||||
<el-option v-for="item in personTypeOptions" :label="item" :value="item"></el-option>
|
<el-option v-for="item in personTypeOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
|
<el-button slot="actions" icon="el-icon-refresh-left" @click="resetSearch">重置</el-button>
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -125,6 +126,16 @@ layout("/layouts/platform.html"){
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
resetSearch() {
|
||||||
|
this.$set(this.pageForm, "userName", "")
|
||||||
|
this.$set(this.pageForm, "loginName", "")
|
||||||
|
this.$set(this.pageForm, "unitName", "")
|
||||||
|
this.$set(this.pageForm, "userState", "")
|
||||||
|
this.$set(this.pageForm, "personType", "")
|
||||||
|
this.$set(this.pageForm, "preparedBy", "")
|
||||||
|
this.$set(this.pageForm, "pullTime", (this.pullTimeOptions[0] || {}).pullTime || "")
|
||||||
|
this.doSearch()
|
||||||
|
},
|
||||||
pull() {
|
pull() {
|
||||||
// 拉取未结束时不再打开确认框或发送重复请求。
|
// 拉取未结束时不再打开确认框或发送重复请求。
|
||||||
if (this.pullLoading) return
|
if (this.pullLoading) return
|
||||||
@@ -149,6 +160,7 @@ layout("/layouts/platform.html"){
|
|||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
if (resp.code === 0) {
|
if (resp.code === 0) {
|
||||||
this.$message.success(resp.msg)
|
this.$message.success(resp.msg)
|
||||||
|
this.getSearchOptions()
|
||||||
this.getPullTimeOptions()
|
this.getPullTimeOptions()
|
||||||
this.doSearch()
|
this.doSearch()
|
||||||
}
|
}
|
||||||
@@ -162,12 +174,24 @@ layout("/layouts/platform.html"){
|
|||||||
.catch(() => {})
|
.catch(() => {})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
buildSearchOptions(values) {
|
||||||
|
const optionValues = new Set(values.map(value =>
|
||||||
|
value == null || /^(?:null)?$/i.test(value.trim()) ? "__EMPTY__" : value
|
||||||
|
))
|
||||||
|
const hasEmpty = optionValues.delete("__EMPTY__")
|
||||||
|
const options = Array.from(optionValues, value => ({ label: value, value }))
|
||||||
|
if (hasEmpty) {
|
||||||
|
options.push({ label: "空数据", value: "__EMPTY__" })
|
||||||
|
}
|
||||||
|
return options
|
||||||
|
},
|
||||||
|
|
||||||
getSearchOptions() {
|
getSearchOptions() {
|
||||||
this.$axios.post("/platform/sys/data/user/pull/searchOptions").then((resp) => {
|
this.$axios.post("/platform/sys/data/user/pull/searchOptions").then((resp) => {
|
||||||
if (resp.code === 0) {
|
if (resp.code === 0) {
|
||||||
this.unitNameOptions = resp.data.unitNames
|
this.unitNameOptions = this.buildSearchOptions(resp.data.unitNames)
|
||||||
this.userStateOptions = resp.data.userStates
|
this.userStateOptions = this.buildSearchOptions(resp.data.userStates)
|
||||||
this.personTypeOptions = resp.data.personTypes
|
this.personTypeOptions = this.buildSearchOptions(resp.data.personTypes)
|
||||||
this.preparedByOptions = resp.data.preparedBys
|
this.preparedByOptions = resp.data.preparedBys
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -206,6 +230,7 @@ layout("/layouts/platform.html"){
|
|||||||
if (resp.code === 0) {
|
if (resp.code === 0) {
|
||||||
this.$message.success(resp.msg)
|
this.$message.success(resp.msg)
|
||||||
this.pullTimeDialogVisible = false
|
this.pullTimeDialogVisible = false
|
||||||
|
this.getSearchOptions()
|
||||||
this.doSearch()
|
this.doSearch()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ layout("/layouts/platform.html"){
|
|||||||
<search-item label="人员类型">
|
<search-item label="人员类型">
|
||||||
<dict-select v-model="pageForm.personType" code="USER_PERSON_TYPE" style="width: 100%"></dict-select>
|
<dict-select v-model="pageForm.personType" code="USER_PERSON_TYPE" style="width: 100%"></dict-select>
|
||||||
</search-item>
|
</search-item>
|
||||||
|
<el-button slot="actions" icon="el-icon-refresh-left" @click="resetSearch">重置</el-button>
|
||||||
</search>
|
</search>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -173,6 +174,14 @@ layout("/layouts/platform.html"){
|
|||||||
"member-all-change-info": MEMBER_ALL_CHANGE_INFO
|
"member-all-change-info": MEMBER_ALL_CHANGE_INFO
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
resetSearch() {
|
||||||
|
this.$set(this.pageForm, "userName", "")
|
||||||
|
this.$set(this.pageForm, "loginName", "")
|
||||||
|
this.$set(this.pageForm, "unitId", "")
|
||||||
|
this.$set(this.pageForm, "userState", "")
|
||||||
|
this.$set(this.pageForm, "personType", "")
|
||||||
|
this.doSearch()
|
||||||
|
},
|
||||||
// 更新单位数据
|
// 更新单位数据
|
||||||
updateUnits() {
|
updateUnits() {
|
||||||
if (this.unitUpdateLoading || this.updateLoading) return
|
if (this.unitUpdateLoading || this.updateLoading) return
|
||||||
|
|||||||
Reference in New Issue
Block a user