Bladeren bron

feat(staff): 为员工服务添加自动生成员工编码功能

hurx 4 dagen geleden
bovenliggende
commit
203a4b5a71

+ 0 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteCategoryServiceImpl.java

@@ -206,7 +206,6 @@ public class RemoteCategoryServiceImpl implements RemoteCategoryService {
                 .or()
                 .eq(ProductCategory::getParentId, categoryId)
                 .orderByAsc(ProductCategory::getSort)
-                .orderByAsc(ProductCategory::getId)
         );
 
         // 去重:使用 Set 来避免重复

+ 25 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ComStaffServiceImpl.java

@@ -237,6 +237,8 @@ public class ComStaffServiceImpl extends ServiceImpl<ComStaffMapper, ComStaff> i
         }
         ComStaff add = MapstructUtils.convert(bo, ComStaff.class);
         add.setUserId(userId);
+        // 设置人员编码为数据库最大编号加1
+        add.setStaffCode(generateStaffCode());
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
@@ -245,6 +247,29 @@ public class ComStaffServiceImpl extends ServiceImpl<ComStaffMapper, ComStaff> i
         return flag;
     }
 
+    /**
+     * 生成人员编码(格式:00001, 00002, ...)
+     */
+    private String generateStaffCode() {
+        // 查询当前最大编号
+        LambdaQueryWrapper<ComStaff> lqw = Wrappers.lambdaQuery();
+        lqw.select(ComStaff::getStaffCode);
+        lqw.orderByDesc(ComStaff::getStaffCode);
+        lqw.last("LIMIT 1");
+        ComStaff maxRecord = baseMapper.selectOne(lqw);
+
+        int nextNum = 1;
+        if (maxRecord != null && StringUtils.isNotBlank(maxRecord.getStaffCode())) {
+            try {
+                nextNum = Integer.parseInt(maxRecord.getStaffCode()) + 1;
+            } catch (NumberFormatException e) {
+                log.warn("解析人员编码失败: {}", maxRecord.getStaffCode());
+            }
+        }
+        // 格式化为5位数字,如 00001, 00002
+        return String.format("%05d", nextNum);
+    }
+
     /**
      * 修改人员信息
      *