From 593cbad35cb45247ac022127ca7edad48ff92b12 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 05 三月 2026 15:51:44 +0800
Subject: [PATCH] yys 1.人员入职同步新增用户,离职禁用登录     2.社保管理模块开发

---
 src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java                     |    1 
 src/main/java/com/ruoyi/staff/mapper/SchemeInsuranceDetailMapper.java            |   18 +
 src/main/java/com/ruoyi/staff/service/SchemeInsuranceDetailService.java          |   16 +
 src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java      |    5 
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java            |   45 +++
 src/main/java/com/ruoyi/common/utils/OrderUtils.java                             |   45 ++++
 src/main/java/com/ruoyi/staff/service/impl/SchemeInsuranceDetailServiceImpl.java |   20 +
 src/main/java/com/ruoyi/project/system/domain/SysDept.java                       |    5 
 src/main/java/com/ruoyi/staff/service/SchemeApplicableStaffService.java          |   27 ++
 src/main/java/com/ruoyi/staff/mapper/SchemeApplicableStaffMapper.java            |   18 +
 src/main/java/com/ruoyi/staff/controller/SchemeApplicableStaffController.java    |   69 ++++++
 src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java                               |    5 
 src/main/java/com/ruoyi/staff/controller/SchemeInsuranceDetailController.java    |   18 +
 src/main/java/com/ruoyi/staff/pojo/SchemeApplicableStaff.java                    |   84 +++++++
 src/main/resources/mapper/staff/SchemeApplicableStaffMapper.xml                  |   20 +
 src/main/java/com/ruoyi/staff/pojo/SchemeInsuranceDetail.java                    |   69 ++++++
 src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java                 |    3 
 src/main/resources/mapper/system/SysUserMapper.xml                               |    3 
 src/main/resources/application-dev.yml                                           |    4 
 src/main/resources/mapper/staff/SchemeInsuranceDetailMapper.xml                  |   20 +
 src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java |  153 +++++++++++++
 src/main/resources/mapper/system/SysDeptMapper.xml                               |    4 
 22 files changed, 644 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/ruoyi/common/utils/OrderUtils.java b/src/main/java/com/ruoyi/common/utils/OrderUtils.java
index 52df76b..32e55a0 100644
--- a/src/main/java/com/ruoyi/common/utils/OrderUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/OrderUtils.java
@@ -13,6 +13,7 @@
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -21,6 +22,50 @@
  */
 public class OrderUtils {
 
+    /**
+     * List<Integer> 杞崲涓� Long[] 鏁扮粍
+     * @param ids
+     * @return
+     */
+    public static Long[] listIntegerToLongArray(List<Integer> ids) {
+        return ids.stream()
+                // 澶勭悊null鍊硷細濡傛灉鍏冪礌涓簄ull锛岃浆鎹负0L锛堝彲鏍规嵁涓氬姟璋冩暣锛屾瘮濡傛姏寮傚父锛�
+                .map(id -> id != null ? id.longValue() : -1L)
+                // 灏哠tream<Long>杞崲涓篖ong[]鏁扮粍
+                .toArray(Long[]::new);
+    }
+
+    /**
+     * 鍒ゆ柇鐩爣id鏄惁鍦ㄩ�楀彿鍒嗛殧鐨勫瓧绗︿覆涓�
+     * @param targetId
+     * @param str
+     * @return
+     */
+    public boolean isStaffIdExist(Object targetId,String str) {
+        // 绌哄�兼牎楠岋紝閬垮厤绌烘寚閽�
+        if (str == null || str.trim().isEmpty() || targetId == null) {
+            return false;
+        }
+        // 鎸夐�楀彿鍒嗗壊鎴愭暟缁�
+        String[] idArray = str.split(",");
+        // 閬嶅巻鏁扮粍鍒ゆ柇鏄惁鍖呭惈鐩爣id
+        for (String id : idArray) {
+            // 鍘婚櫎绌烘牸锛堥槻姝㈠瓧绗︿覆涓湁澶氫綑绌烘牸锛屽"1, 121"锛�
+            String cleanId = id.trim();
+            // 杞崲涓烘暟瀛楀苟姣旇緝
+            try {
+                if (cleanId.equals(String.valueOf(targetId))) {
+                    return true;
+                }
+            } catch (NumberFormatException e) {
+                // 鑻ュ瓨鍦ㄩ潪鏁板瓧ID锛岀洿鎺ヨ繑鍥瀎alse
+                return false;
+            }
+        }
+        return false;
+    }
+
+
 
     /**
      * 鏌ヨ褰撳ぉ锛堝熀浜巆reateTime瀛楁锛夌殑璁板綍鏁伴噺
diff --git a/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java b/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java
index ab8b3d6..8874722 100644
--- a/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java
+++ b/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java
@@ -39,6 +39,7 @@
     private Date updateTime;
 
     /** 澶囨敞 */
+    @TableField(exist = false)
     private String remark;
 
     /** 璇锋眰鍙傛暟 */
diff --git a/src/main/java/com/ruoyi/project/system/domain/SysDept.java b/src/main/java/com/ruoyi/project/system/domain/SysDept.java
index 54e53a7..355618d 100644
--- a/src/main/java/com/ruoyi/project/system/domain/SysDept.java
+++ b/src/main/java/com/ruoyi/project/system/domain/SysDept.java
@@ -6,6 +6,8 @@
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
+
+import com.baomidou.mybatisplus.annotation.TableField;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.framework.web.domain.BaseEntity;
@@ -50,15 +52,18 @@
     private String delFlag;
 
     /** 鐖堕儴闂ㄥ悕绉� */
+    @TableField(exist = false)
     private String parentName;
 
     /** 閮ㄩ棬缂栧彿 */
     private String deptNick;
 
     /** 鍛樺伐鏁伴噺 */
+    @TableField(exist = false)
     private Integer staffCount;
     
     /** 瀛愰儴闂� */
+    @TableField(exist = false)
     private List<SysDept> children = new ArrayList<SysDept>();
 
     public Long getDeptId()
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
index 942a700..c564959 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import com.ruoyi.project.system.domain.SysDept;
@@ -12,7 +13,7 @@
  * @author ruoyi
  */
 @Mapper
-public interface SysDeptMapper
+public interface SysDeptMapper extends BaseMapper<SysDept>
 {
     /**
      * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
index 6bb8927..7773825 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
@@ -456,7 +456,7 @@
 
     /**
      * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
-     * 
+     *
      * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛ID
      * @return 缁撴灉
      */
@@ -473,6 +473,9 @@
         userRoleMapper.deleteUserRole(userIds);
         // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
         userPostMapper.deleteUserPost(userIds);
+        // 鍒犻櫎鐢ㄦ埛涓庨儴闂ㄦ暟鎹�
+        sysUserDeptMapper.delete(new LambdaQueryWrapper<SysUserDept>()
+                .in(SysUserDept::getUserId, userIds));
         return userMapper.deleteUserByIds(userIds);
     }
 
diff --git a/src/main/java/com/ruoyi/staff/controller/SchemeApplicableStaffController.java b/src/main/java/com/ruoyi/staff/controller/SchemeApplicableStaffController.java
new file mode 100644
index 0000000..39f1ef0
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/controller/SchemeApplicableStaffController.java
@@ -0,0 +1,69 @@
+package com.ruoyi.staff.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.staff.pojo.SchemeApplicableStaff;
+import com.ruoyi.staff.service.SchemeApplicableStaffService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 绀句繚鏂规閫傜敤浜哄憳琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:50:17
+ */
+@Api(tags = "绀句繚鏂规閫傜敤浜哄憳琛�")
+@RestController
+@RequestMapping("/schemeApplicableStaff")
+public class SchemeApplicableStaffController extends BaseController {
+
+
+    @Autowired
+    private SchemeApplicableStaffService schemeApplicableStaffService;
+
+
+    @GetMapping("/listPage")
+    @ApiOperation(value = "鍒嗛〉鏌ヨ")
+    public AjaxResult listPage(Page page, SchemeApplicableStaff schemeApplicableStaff) {
+        return schemeApplicableStaffService.listPage(page,schemeApplicableStaff);
+    }
+
+    @PostMapping("/add")
+    @ApiOperation(value = "娣诲姞")
+    @Transactional(rollbackFor = Exception.class)
+    @Log(title = "绀句繚鏂规閫傜敤浜哄憳琛�", businessType = BusinessType.INSERT)
+    public AjaxResult add(@RequestBody SchemeApplicableStaff schemeApplicableStaff) {
+        return schemeApplicableStaffService.add(schemeApplicableStaff);
+    }
+
+    @PostMapping("/updateSchemeApplicableStaff")
+    @ApiOperation(value = "淇敼")
+    @Transactional(rollbackFor = Exception.class)
+    @Log(title = "绀句繚鏂规閫傜敤浜哄憳琛�", businessType = BusinessType.UPDATE)
+    public AjaxResult updateSchemeApplicableStaff(@RequestBody SchemeApplicableStaff schemeApplicableStaff) {
+        return schemeApplicableStaffService.updateSchemeApplicableStaff(schemeApplicableStaff);
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation(value = "鍒犻櫎")
+    @Transactional(rollbackFor = Exception.class)
+    @Log(title = "绀句繚鏂规閫傜敤浜哄憳琛�", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        return schemeApplicableStaffService.delete(ids);
+    }
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/staff/controller/SchemeInsuranceDetailController.java b/src/main/java/com/ruoyi/staff/controller/SchemeInsuranceDetailController.java
new file mode 100644
index 0000000..488be7e
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/controller/SchemeInsuranceDetailController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.staff.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 绀句繚鏂规淇濋櫓绂忓埄鏄庣粏琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:52:23
+ */
+@RestController
+@RequestMapping("/schemeInsuranceDetail")
+public class SchemeInsuranceDetailController {
+
+}
diff --git a/src/main/java/com/ruoyi/staff/mapper/SchemeApplicableStaffMapper.java b/src/main/java/com/ruoyi/staff/mapper/SchemeApplicableStaffMapper.java
new file mode 100644
index 0000000..ebb385d
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/mapper/SchemeApplicableStaffMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.staff.mapper;
+
+import com.ruoyi.staff.pojo.SchemeApplicableStaff;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 绀句繚鏂规閫傜敤浜哄憳琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:50:17
+ */
+@Mapper
+public interface SchemeApplicableStaffMapper extends BaseMapper<SchemeApplicableStaff> {
+
+}
diff --git a/src/main/java/com/ruoyi/staff/mapper/SchemeInsuranceDetailMapper.java b/src/main/java/com/ruoyi/staff/mapper/SchemeInsuranceDetailMapper.java
new file mode 100644
index 0000000..fe7251b
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/mapper/SchemeInsuranceDetailMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.staff.mapper;
+
+import com.ruoyi.staff.pojo.SchemeInsuranceDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 绀句繚鏂规淇濋櫓绂忓埄鏄庣粏琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:52:23
+ */
+@Mapper
+public interface SchemeInsuranceDetailMapper extends BaseMapper<SchemeInsuranceDetail> {
+
+}
diff --git a/src/main/java/com/ruoyi/staff/pojo/SchemeApplicableStaff.java b/src/main/java/com/ruoyi/staff/pojo/SchemeApplicableStaff.java
new file mode 100644
index 0000000..e61df92
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/pojo/SchemeApplicableStaff.java
@@ -0,0 +1,84 @@
+package com.ruoyi.staff.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 绀句繚鏂规閫傜敤浜哄憳琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:50:17
+ */
+@Getter
+@Setter
+@TableName("scheme_applicable_staff")
+@ApiModel(value = "SchemeApplicableStaff瀵硅薄", description = "绀句繚鏂规閫傜敤浜哄憳琛�")
+public class SchemeApplicableStaff implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("绀句繚鏂规淇濋櫓绂忓埄鏄庣粏")
+    @TableField(exist = false)
+    private List<SchemeInsuranceDetail> schemeInsuranceDetailList;
+
+    @ApiModelProperty("涓婚敭ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鏍囬")
+    private String title;
+
+    @ApiModelProperty("閮ㄩ棬ids,澶氫釜浣跨敤,闅斿紑")
+    private String deptIds;
+
+    @ApiModelProperty("閮ㄩ棬鍚嶇О,澶氫釜浣跨敤,闅斿紑")
+    @TableField(exist = false)
+    private String deptNames;
+
+    @ApiModelProperty("浜哄憳鍚嶇О,澶氫釜浣跨敤,闅斿紑")
+    private String staffNames;
+
+    @ApiModelProperty("浜哄憳id,澶氫釜浣跨敤,闅斿紑")
+    private String staffIds;
+
+    @ApiModelProperty("淇濋櫓绫诲瀷鍚嶇О澶氫釜浣跨敤,闅斿紑")
+    private String insuranceTypes;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @TableField(exist = false)
+    @ApiModelProperty("鍒涘缓浜哄悕绉�")
+    private String createUserName;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8", shape = JsonFormat.Shape.STRING)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鏇存柊浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/staff/pojo/SchemeInsuranceDetail.java b/src/main/java/com/ruoyi/staff/pojo/SchemeInsuranceDetail.java
new file mode 100644
index 0000000..9facc7b
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/pojo/SchemeInsuranceDetail.java
@@ -0,0 +1,69 @@
+package com.ruoyi.staff.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 绀句繚鏂规淇濋櫓绂忓埄鏄庣粏琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:52:23
+ */
+@Getter
+@Setter
+@TableName("scheme_insurance_detail")
+@ApiModel(value = "SchemeInsuranceDetail瀵硅薄", description = "绀句繚鏂规淇濋櫓绂忓埄鏄庣粏琛�")
+public class SchemeInsuranceDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("鏄庣粏ID锛堜富閿級")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鍏宠仈鐨勭ぞ淇濇柟妗圛D")
+    private Long schemeId;
+
+    @ApiModelProperty("淇濋櫓绫诲瀷锛堝鍖荤枟淇濋櫓銆佸吇鑰佷繚闄╃瓑锛�")
+    private String insuranceType;
+
+    @ApiModelProperty("缂磋垂鍩烘暟")
+    private BigDecimal paymentBase;
+
+    @ApiModelProperty("鏄惁璋冪敤鍩烘湰宸ヨ祫锛�1-鍚︼紝2-鏄�")
+    private Integer useBasicSalary;
+
+    @ApiModelProperty("涓汉缂磋垂姣斾緥锛�%锛�")
+    private BigDecimal personalRatio;
+
+    @ApiModelProperty("涓汉鍥哄畾缂磋垂閲戦")
+    private BigDecimal personalFixed;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鏇存柊浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java b/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
index 785b722..3ca6fcb 100644
--- a/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
+++ b/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
@@ -69,6 +69,11 @@
     private Long sysDeptId;
 
     /**
+     * 瑙掕壊
+     */
+    private Long roleId;
+
+    /**
      * 瀹跺涵浣忓潃
      */
     @Excel(name = "瀹跺涵浣忓潃", sort = 6)
diff --git a/src/main/java/com/ruoyi/staff/service/SchemeApplicableStaffService.java b/src/main/java/com/ruoyi/staff/service/SchemeApplicableStaffService.java
new file mode 100644
index 0000000..da9a2d7
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/service/SchemeApplicableStaffService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.staff.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.staff.pojo.SchemeApplicableStaff;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 绀句繚鏂规閫傜敤浜哄憳琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:50:17
+ */
+public interface SchemeApplicableStaffService extends IService<SchemeApplicableStaff> {
+
+    AjaxResult listPage(Page page, SchemeApplicableStaff schemeApplicableStaff);
+
+    AjaxResult add(SchemeApplicableStaff schemeApplicableStaff);
+
+    AjaxResult updateSchemeApplicableStaff(SchemeApplicableStaff schemeApplicableStaff);
+
+    AjaxResult delete(List<Long> ids);
+}
diff --git a/src/main/java/com/ruoyi/staff/service/SchemeInsuranceDetailService.java b/src/main/java/com/ruoyi/staff/service/SchemeInsuranceDetailService.java
new file mode 100644
index 0000000..3d698e7
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/service/SchemeInsuranceDetailService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.staff.service;
+
+import com.ruoyi.staff.pojo.SchemeInsuranceDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 绀句繚鏂规淇濋櫓绂忓埄鏄庣粏琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:52:23
+ */
+public interface SchemeInsuranceDetailService extends IService<SchemeInsuranceDetail> {
+
+}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
new file mode 100644
index 0000000..f06704d
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
@@ -0,0 +1,153 @@
+package com.ruoyi.staff.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.domain.SysUserDept;
+import com.ruoyi.project.system.mapper.SysDeptMapper;
+import com.ruoyi.project.system.mapper.SysUserDeptMapper;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper;
+import com.ruoyi.staff.pojo.SchemeApplicableStaff;
+import com.ruoyi.staff.mapper.SchemeApplicableStaffMapper;
+import com.ruoyi.staff.pojo.SchemeInsuranceDetail;
+import com.ruoyi.staff.service.SchemeApplicableStaffService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 绀句繚鏂规閫傜敤浜哄憳琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:50:17
+ */
+@Service
+public class SchemeApplicableStaffServiceImpl extends ServiceImpl<SchemeApplicableStaffMapper, SchemeApplicableStaff> implements SchemeApplicableStaffService {
+
+    @Autowired
+    private SchemeApplicableStaffMapper schemeApplicableStaffMapper;
+
+    @Autowired
+    private SchemeInsuranceDetailMapper schemeInsuranceDetailMapper;
+
+    @Autowired
+    private SysUserDeptMapper sysUserDeptMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+
+
+    @Override
+    public AjaxResult listPage(Page page, SchemeApplicableStaff schemeApplicableStaff) {
+        LambdaQueryWrapper<SchemeApplicableStaff> schemeApplicableStaffLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(schemeApplicableStaff != null){
+            if(StringUtils.isNotEmpty(schemeApplicableStaff.getTitle())){
+                schemeApplicableStaffLambdaQueryWrapper.like(SchemeApplicableStaff::getTitle, schemeApplicableStaff.getTitle());
+            }
+        }
+        Page<SchemeApplicableStaff> page1 = schemeApplicableStaffMapper.selectPage(page, schemeApplicableStaffLambdaQueryWrapper);
+        List<Long> collect = page1.getRecords().stream().map(SchemeApplicableStaff::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(collect)){
+            return AjaxResult.success(page1);
+        }
+        List<SchemeInsuranceDetail> schemeInsuranceDetails = schemeInsuranceDetailMapper
+                .selectList(new LambdaQueryWrapper<SchemeInsuranceDetail>()
+                        .in(SchemeInsuranceDetail::getSchemeId, collect));
+        page1.getRecords().forEach(item -> {
+            item.setSchemeInsuranceDetailList(schemeInsuranceDetails
+                    .stream()
+                    .filter(detail -> detail.getSchemeId().equals(item.getId()))
+                    .collect(Collectors.toList()));
+            SysUser sysUser = sysUserMapper.selectUserById(item.getCreateUser().longValue());
+            item.setCreateUserName(sysUser == null ? "鏈煡" : sysUser.getNickName());
+            // 鑾峰彇閮ㄩ棬淇℃伅
+            String[] split = item.getDeptIds().split(",");
+            List<SysDept> sysDepts = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                    .in(SysDept::getDeptId, Arrays.stream(split).map(Long::valueOf).collect(Collectors.toList())));
+            if(!CollectionUtils.isEmpty(sysDepts)){
+                item.setDeptNames(sysDepts.stream().map(SysDept::getDeptName).collect(Collectors.joining(",")));
+            }
+        });
+        return AjaxResult.success(page1);
+    }
+
+    public void setSchemeApplicableStaffUserInfo(SchemeApplicableStaff schemeApplicableStaff) {
+        // 閫氳繃閮ㄩ棬鑾峰彇浜哄憳id
+        List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectList(new LambdaQueryWrapper<SysUserDept>()
+                .in(SysUserDept::getDeptId, schemeApplicableStaff.getDeptIds()));
+        if(CollectionUtils.isEmpty(sysUserDepts)){
+            throw new IllegalArgumentException("閮ㄩ棬涓嬫棤鍛樺伐");
+        }
+        List<SysUser> sysUsers = sysUserMapper.selectUserByIds(sysUserDepts.stream().map(SysUserDept::getUserId).collect(Collectors.toList()));
+        if(CollectionUtils.isEmpty(sysUsers)){
+            throw new IllegalArgumentException("閮ㄩ棬涓嬫棤鍛樺伐");
+        }
+        schemeApplicableStaff.setStaffIds(sysUsers
+                .stream()
+                .map(SysUser::getUserId)
+                .filter(Objects::nonNull)         // 杩囨护鎺� null 鍊�
+                .map(String::valueOf)
+                .collect(Collectors.joining( ",")));
+        schemeApplicableStaff.setStaffNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
+    }
+
+    @Override
+    public AjaxResult add(SchemeApplicableStaff schemeApplicableStaff) {
+        if(schemeApplicableStaff == null){
+            return AjaxResult.error("鍙傛暟閿欒");
+        }
+        if(CollectionUtils.isEmpty(schemeApplicableStaff.getSchemeInsuranceDetailList())){
+            return AjaxResult.error("璇烽�夋嫨鏂规鏄庣粏");
+        }
+        setSchemeApplicableStaffUserInfo(schemeApplicableStaff); //鏍规嵁閮ㄩ棬璁剧疆鐢ㄦ埛淇℃伅
+        int insert = schemeApplicableStaffMapper.insert(schemeApplicableStaff);
+        schemeApplicableStaff.getSchemeInsuranceDetailList().forEach(item -> {
+            item.setSchemeId(schemeApplicableStaff.getId());
+            schemeInsuranceDetailMapper.insert(item);
+        });
+        return AjaxResult.success(insert);
+    }
+
+    @Override
+    public AjaxResult updateSchemeApplicableStaff(SchemeApplicableStaff schemeApplicableStaff) {
+        if(schemeApplicableStaff == null){
+            return AjaxResult.error("鍙傛暟閿欒");
+        }
+        setSchemeApplicableStaffUserInfo(schemeApplicableStaff); //鏍规嵁閮ㄩ棬璁剧疆鐢ㄦ埛淇℃伅
+        int update = schemeApplicableStaffMapper.updateById(schemeApplicableStaff);
+        // 鍏堝垹锛岄噸鏂扮粦瀹�
+        schemeInsuranceDetailMapper.delete(new LambdaQueryWrapper<SchemeInsuranceDetail>()
+                .eq(SchemeInsuranceDetail::getSchemeId, schemeApplicableStaff.getId()));
+        schemeApplicableStaff.getSchemeInsuranceDetailList().forEach(item -> {
+            item.setSchemeId(schemeApplicableStaff.getId());
+            schemeInsuranceDetailMapper.insert(item);
+        });
+        return AjaxResult.success(update);
+    }
+
+    @Override
+    public AjaxResult delete(List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return AjaxResult.error("鍙傛暟閿欒");
+        }
+        int delete = schemeApplicableStaffMapper.deleteBatchIds(ids);
+        schemeInsuranceDetailMapper.delete(new LambdaQueryWrapper<SchemeInsuranceDetail>()
+                .in(SchemeInsuranceDetail::getSchemeId, ids));
+        return AjaxResult.success(delete);
+    }
+}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/SchemeInsuranceDetailServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/SchemeInsuranceDetailServiceImpl.java
new file mode 100644
index 0000000..801649e
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/service/impl/SchemeInsuranceDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.staff.service.impl;
+
+import com.ruoyi.staff.pojo.SchemeInsuranceDetail;
+import com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper;
+import com.ruoyi.staff.service.SchemeInsuranceDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 绀句繚鏂规淇濋櫓绂忓埄鏄庣粏琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-05 11:52:23
+ */
+@Service
+public class SchemeInsuranceDetailServiceImpl extends ServiceImpl<SchemeInsuranceDetailMapper, SchemeInsuranceDetail> implements SchemeInsuranceDetailService {
+
+}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index d421345..02253f5 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -6,10 +6,15 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.dto.WordDateDto;
 import com.ruoyi.project.system.domain.SysPost;
+import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysPostMapper;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.impl.SysUserServiceImpl;
 import com.ruoyi.staff.dto.StaffOnJobDto;
 import com.ruoyi.staff.mapper.StaffContractMapper;
 import com.ruoyi.staff.mapper.StaffLeaveMapper;
@@ -22,6 +27,8 @@
 import freemarker.template.Template;
 import lombok.AllArgsConstructor;
 
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.ListUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -35,6 +42,7 @@
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @AllArgsConstructor
 @Service
@@ -50,6 +58,12 @@
     @Autowired
     private StaffLeaveMapper staffLeaveMapper;
 
+    @Autowired
+    private SysUserServiceImpl sysUserService;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
 
     //鍦ㄨ亴鍛樺伐鍙拌处鍒嗛〉鏌ヨ
     @Override
@@ -64,14 +78,29 @@
         String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
         // 鍒ゆ柇缂栧彿鏄惁瀛樺湪
         List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo, staffOnJobPrams.getStaffNo()));
-        if (staffOnJobs.size()>0){
+        if (staffOnJobs != null && !staffOnJobs.isEmpty()){
             throw new BaseException("缂栧彿涓�"+staffOnJobPrams.getStaffNo()+"鐨勫憳宸ュ凡缁忓瓨鍦�,鏃犳硶鏂板!!!");
         }
+
         // 鍒涘缓鍏ヨ亴鏁版嵁
         staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime());
         staffOnJobPrams.setStaffState(1);
         staffOnJobMapper.insert(staffOnJobPrams);
-
+        // 鏌ヨ鐢ㄦ埛鏄惁宸茬粡鏂板
+        SysUser sysUser = sysUserService.selectUserById(staffOnJobPrams.getId());
+        if(sysUser == null){
+            SysUser sysUser1 = new SysUser();
+            sysUser1.setUserName(staffOnJobPrams.getStaffNo());
+            sysUser1.setNickName(staffOnJobPrams.getStaffName());
+            String s = SecurityUtils.encryptPassword("123456");
+            sysUser1.setPassword(s);
+            Long[] posts = new Long[]{staffOnJobPrams.getSysPostId().longValue()};
+            sysUser1.setPostIds(posts);
+            sysUser1.setRoleIds(new Long[]{staffOnJobPrams.getRoleId()});
+            sysUser1.setDeptIds(new  Long[]{staffOnJobPrams.getSysDeptId()});
+            sysUser1.setStatus("0");
+            sysUserService.insertUser(sysUser1);
+        }
         // 鍒涘缓鍚堝悓璁板綍
         StaffContract staffContract = new StaffContract();
         staffContract.setStaffOnJobId(staffOnJobPrams.getId());
@@ -112,10 +141,22 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int delStaffOnJobs(List<Integer> ids) {
+        List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().in(StaffOnJob::getId, ids));
+        if(CollectionUtils.isEmpty(staffOnJobs)){
+            throw new BaseException("璇ュ憳宸ヤ笉瀛樺湪,鏃犳硶鍒犻櫎!!!");
+        }
         // 鍒犻櫎鍏ヨ亴鏁版嵁
         staffOnJobMapper.deleteBatchIds(ids);
         // 鍒犻櫎绂昏亴鏁版嵁
         staffLeaveMapper.delete(Wrappers.<StaffLeave>lambdaQuery().in(StaffLeave::getStaffOnJobId, ids));
+        // 鍒犻櫎鐢ㄦ埛鏁版嵁
+        List<SysUser> sysUsers = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery()
+                .in(SysUser::getUserName, staffOnJobs.stream().map(StaffOnJob::getStaffNo).collect(Collectors.toList())));
+        if(CollectionUtils.isNotEmpty(sysUsers)){
+            Long[] longs = sysUsers.stream().map(SysUser::getUserId).toArray(Long[]::new);
+            sysUserService.deleteUserByIds(longs);
+        }
+
         // 鍒犻櫎鍚堝悓鏁版嵁
         return staffContractMapper.delete(Wrappers.<StaffContract>lambdaQuery().in(StaffContract::getStaffOnJobId, ids));
     }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index ff56f9d..3196942 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -74,9 +74,9 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://1.15.17.182:9999/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
-        password: 123456
+        password: xd@123456..
       # 浠庡簱鏁版嵁婧�
       slave:
         # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
diff --git a/src/main/resources/mapper/staff/SchemeApplicableStaffMapper.xml b/src/main/resources/mapper/staff/SchemeApplicableStaffMapper.xml
new file mode 100644
index 0000000..4f2952d
--- /dev/null
+++ b/src/main/resources/mapper/staff/SchemeApplicableStaffMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.staff.mapper.SchemeApplicableStaffMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.SchemeApplicableStaff">
+        <id column="id" property="id" />
+        <result column="title" property="title" />
+        <result column="dept_ids" property="deptIds" />
+        <result column="staff_names" property="staffNames" />
+        <result column="staff_ids" property="staffIds" />
+        <result column="insurance_types" property="insuranceTypes" />
+        <result column="remark" property="remark" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="create_user" property="createUser" />
+        <result column="update_user" property="updateUser" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/staff/SchemeInsuranceDetailMapper.xml b/src/main/resources/mapper/staff/SchemeInsuranceDetailMapper.xml
new file mode 100644
index 0000000..3aa237b
--- /dev/null
+++ b/src/main/resources/mapper/staff/SchemeInsuranceDetailMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.SchemeInsuranceDetail">
+        <id column="id" property="id" />
+        <result column="scheme_id" property="schemeId" />
+        <result column="insurance_type" property="insuranceType" />
+        <result column="payment_base" property="paymentBase" />
+        <result column="use_basic_salary" property="useBasicSalary" />
+        <result column="personal_ratio" property="personalRatio" />
+        <result column="personal_fixed" property="personalFixed" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="create_user" property="createUser" />
+        <result column="update_user" property="updateUser" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/system/SysDeptMapper.xml b/src/main/resources/mapper/system/SysDeptMapper.xml
index afc1130..ee5256f 100644
--- a/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -52,7 +52,7 @@
 		order by d.parent_id, d.order_num
 	</select>
     
-    <select id="selectDeptListByRoleId" resultType="Long">
+    <select id="selectDeptListByRoleId" resultType="java.lang.Long">
 		select d.dept_id
 		from sys_dept d
             left join sys_role_dept rd on d.dept_id = rd.dept_id
@@ -165,7 +165,7 @@
 		update sys_dept set del_flag = '2' where dept_id = #{deptId}
 	</delete>
 
-	<select id="maxLevelDeptId">
+	<select id="maxLevelDeptId" resultType="java.lang.Long">
 		WITH RECURSIVE DepartmentHierarchy AS (
 			SELECT dept_id, parent_id
 			FROM sys_dept
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index d837b7e..e4f818a 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -139,6 +139,7 @@
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		where u.user_id = #{userId}
+		and u.del_flag = '0'
 	</select>
 
 	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
@@ -157,6 +158,7 @@
 		where u.user_id in <foreach collection="userIds" item="item" open="(" separator="," close=")">
  			#{item}
         </foreach>
+		and u.del_flag = '0'
 	</select>
 	<select id="selectRegistrantIds" resultType="com.ruoyi.project.system.domain.SysUser">
 		SELECT user_id, nick_name FROM sys_user
@@ -179,6 +181,7 @@
 		<foreach collection="userIds" item="id" open="(" separator="," close=")">
 			#{id}
 		</foreach>
+		and del_flag = '0'
 	</select>
 	<select id="selectUserByNickName" resultType="com.ruoyi.project.system.domain.SysUser"
 			parameterType="java.lang.String">

--
Gitblit v1.9.3