diff --git a/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java b/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java index 8af02627..b4a6ee5e 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowDesignController.java @@ -243,6 +243,27 @@ public class FlowDesignController { return Result.success(); } + /** + * 设置流程设计在流程中心的展示状态。 + * @param id 流程设计 ID + * @param centerEnabled 传 1 表示显示,传 0 表示隐藏 + * @return Result;code 为 0 表示保存成功,非 0 时 msg 说明错误,data 无业务数据 + */ + @At + @ApiOperation("设置流程中心显示状态") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("flow.design") + public Result updateCenterEnabled(@Param("id") Long id, @Param("centerEnabled") Integer centerEnabled) { + if (id == null || centerEnabled == null || (centerEnabled != 0 && centerEnabled != 1)) { + return Result.error("流程设计或显示状态无效"); + } + int updated = processDesignService.update(Chain.make("centerEnabled", centerEnabled), Cnd.where(ProcessDesign::getId, "=", id)); + if (updated == 0 && processDesignService.fetch(id) == null) { + return Result.error("流程设计不存在"); + } + return Result.success(); + } + @At @SaCheckLogin @ApiOperation("获取流程设计任务参与者处理类") diff --git a/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java b/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java index 1b63eb68..ce19f8ca 100644 --- a/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java +++ b/src/main/java/com/budwk/app/flow/entity/ProcessDesign.java @@ -68,6 +68,11 @@ public class ProcessDesign extends BaseModel { @Column private Integer isDeployed; + @Comment("是否在流程中心显示(1显示,0隐藏)") + @Column + @Default("1") + private Integer centerEnabled; + @Comment("排序编码") @Column @Default("0") diff --git a/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java b/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java index 7f3e3933..8f47782f 100644 --- a/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java +++ b/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java @@ -11,6 +11,7 @@ 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.Static; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; @@ -57,6 +58,8 @@ public class SysV4ServController { $condition """); Cnd cnd = Cnd.NEW(); + // 只隐藏流程中心入口;历史流程实例及已有流程定义保持原有状态。 + cnd.and(new Static("COALESCE(d.centerEnabled, 1) = 1")); if (StrUtil.isNotBlank(keyword)) { cnd.where().andLike("t.disPlayName", keyword); } diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java index 790ad4d7..8d2e9cc7 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java @@ -23,7 +23,6 @@ import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; @@ -161,10 +160,6 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService for (Sys_user_source source : sources) { Sys_user user = userMap.get(source.getLoginname()); source.setMember(null); - String unitId = source.getUnitId(); - if (StringUtils.isNotBlank(unitId) && unitId.length() == 5) { - source.setUnitId(unitId.substring(0, 3)); - } // 创建用户对象 Sys_user u = new Sys_user(); @@ -180,6 +175,10 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService } else { // 修改现有用户 u.setId(user.getId()); + // 拉取数据未分配三级单位时写入空字符串,避免 updateIgnoreNull 保留人员原有的三级单位。 + if (StrUtil.isBlank(source.getThreeUnitId())) { + u.setThreeUnitId(""); + } /* * aidFundMember 由基金会员业务维护,数据中心源表默认值为 0。 * 全量更新已有用户时置空,避免 updateIgnoreNull 把已迁移的基金会员标识覆盖为非会员。 diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java index 894af098..cd967446 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserPullServiceImpl.java @@ -132,6 +132,39 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl Date nowDate = new Date(); + // 人员单位号先与单位表批量比对,缺失单位只同步一次,避免逐人查询单位表。 + Set sourceUnitIds = rawDataList.stream() + .map(raw -> raw.getStr("SZDWH")) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + Map unitMap = dao().query(Sys_unit.class, Cnd.NEW()).stream() + .collect(Collectors.toMap(Sys_unit::getId, unit -> unit)); + if (!unitMap.keySet().containsAll(sourceUnitIds)) { + log.info("单位需要更新,正在同步更新"); + sysDataUnitPullService.updateUnits(new ArrayList<>(unitMap.keySet())); + unitMap = dao().query(Sys_unit.class, Cnd.NEW()).stream() + .collect(Collectors.toMap(Sys_unit::getId, unit -> unit)); + } + + // 信息中心三级单位的层级入库后为4,其直属二级单位层级为3;单位号位数不参与判断。 + Map tertiaryParentUnitIds = new HashMap<>(); + for (String sourceUnitId : sourceUnitIds) { + Sys_unit unit = unitMap.get(sourceUnitId); + if (unit == null) { + log.warn("人员单位号{}在单位表中不存在,保留信息中心原始单位号", sourceUnitId); + continue; + } + if (!Integer.valueOf(4).equals(unit.getUnitLevel())) { + continue; + } + Sys_unit parentUnit = unitMap.get(unit.getParentId()); + if (parentUnit == null || !Integer.valueOf(3).equals(parentUnit.getUnitLevel())) { + log.warn("三级单位{}缺少有效的二级父单位,保留信息中心原始单位号", sourceUnitId); + continue; + } + tertiaryParentUnitIds.put(sourceUnitId, parentUnit.getId()); + } + // 赋值 List latestSourceList = rawDataList.stream().map(raw -> { Sys_user_source sysUser = new Sys_user_source(); @@ -174,7 +207,10 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl } sysUser.setUnitName(raw.getStr("SZDW")); - sysUser.setUnitId(resolveSourceUnitId(raw.getStr("SZDWH"))); + String sourceUnitId = raw.getStr("SZDWH"); + String parentUnitId = tertiaryParentUnitIds.get(sourceUnitId); + sysUser.setUnitId(StrUtil.blankToDefault(parentUnitId, sourceUnitId)); + sysUser.setThreeUnitId(parentUnitId == null ? null : sourceUnitId); // 设置拉取时间 sysUser.setPullTime(nowDate); @@ -188,17 +224,6 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl dao().insert(latestSourceList); } - // 人员的单位数据和数据库的单位数据比较,如果人员里面有单位不存在,去更新单位数据 - List sourceUnitIds = latestSourceList.stream().map(Sys_user_source::getUnitId).filter(StrUtil::isNotBlank).distinct().toList(); - Sql sql = Sqls.create("select id from sys_unit group by id"); - sql.setCallback(Sqls.callback.strList()); - dao().execute(sql); - List unitIds = sql.getList(String.class); - - if (!new HashSet<>(unitIds).containsAll(sourceUnitIds)) { - log.info("单位需要更新,正在同步更新"); - sysDataUnitPullService.updateUnits(unitIds); - } return nowDate; } catch (Exception e) { throw new BaseException("数据拉取失败,{}", e.getMessage()); @@ -342,22 +367,6 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl return new ArrayList<>(userMap.values()); } - /** - * 根据接口返回的所在单位号转换数据源用户单位。 - * 入参 rawUnitId 对应人员接口 SZDWH:5位表示三级单位,需要写入其二级父单位;其他长度保持接口原值。 - * 返回值为 sys_user_source.unitId 使用的单位ID,找不到三级单位或父级为空时保留接口原始单位号,避免人员数据丢失。 - */ - private String resolveSourceUnitId(String rawUnitId) { - if (StrUtil.isBlank(rawUnitId) || rawUnitId.length() != 5) { - return rawUnitId; - } - Sys_unit unit = dao().fetch(Sys_unit.class, rawUnitId); - if (unit == null || StrUtil.isBlank(unit.getParentId())) { - return rawUnitId; - } - return unit.getParentId(); - } - @Async private void updateDict(List userSources) { //判断是否要更新在职状态字典 diff --git a/src/main/resources/views/layouts/v4/baseLayout.html b/src/main/resources/views/layouts/v4/baseLayout.html index 2fa6b1a3..539d3a35 100644 --- a/src/main/resources/views/layouts/v4/baseLayout.html +++ b/src/main/resources/views/layouts/v4/baseLayout.html @@ -694,12 +694,10 @@ 应用中心 - + --> 待办中心 diff --git a/src/main/resources/views/platform/flow/design/index.html b/src/main/resources/views/platform/flow/design/index.html index 44ce7cfb..c32838d7 100644 --- a/src/main/resources/views/platform/flow/design/index.html +++ b/src/main/resources/views/platform/flow/design/index.html @@ -54,6 +54,14 @@ layout("/layouts/platform.html"){ 否 + + +