瀏覽代碼

薪资管理历史版本

yzc 10 月之前
父節點
當前提交
80cf5ec54a

+ 10 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/user/UserSalaryManageController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.oa.entity.user.dto.UserSalaryManageDto;
 import com.fjhx.oa.entity.user.dto.UserSalaryManageSelectDto;
 import com.fjhx.oa.entity.user.vo.UserSalaryManageVo;
+import com.fjhx.oa.entity.user.vo.UserSalaryVo;
 import com.fjhx.oa.service.user.UserSalaryManageService;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 
 /**
@@ -52,4 +54,12 @@ public class UserSalaryManageController {
         userSalaryManageService.edit(userSalaryManageDto);
     }
 
+
+    /**
+     * 获取历史版本结构
+     */
+    @PostMapping("/getHistoryVerList")
+    List<UserSalaryVo> getHistoryVerList(@RequestBody UserSalaryManageDto dto) {
+        return userSalaryManageService.getHistoryVerList(dto.getUserId());
+    }
 }

+ 6 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/user/po/UserSalaryDetail.java

@@ -20,6 +20,12 @@ import java.math.BigDecimal;
 @TableName("user_salary_detail")
 public class UserSalaryDetail extends BasePo {
 
+
+    /**
+     * 薪资备份主表
+     */
+    private Long userSalaryId;
+
     /**
      * 用户id
      */

+ 5 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/user/vo/UserSalaryDetailVo.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class UserSalaryDetailVo extends UserSalaryDetail {
 
+    /**
+     * 薪资结构
+     */
+    private String salaryStructureName;
+
 }

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/user/vo/UserSalaryHistoryVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.user.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Getter
+@Setter
+public class UserSalaryHistoryVo {
+
+    private Long user_id;
+    private Integer data_ver;
+    private Date create_time;
+    private Date update_time;
+
+}

+ 4 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/user/vo/UserSalaryVo.java

@@ -4,6 +4,8 @@ import com.fjhx.oa.entity.user.po.UserSalary;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 用户薪资备份表列表查询返回值实体
  *
@@ -14,4 +16,6 @@ import lombok.Setter;
 @Setter
 public class UserSalaryVo extends UserSalary {
 
+    List<UserSalaryDetailVo> userSalaryDetailList;
+
 }

+ 2 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/user/UserSalaryManageMapper.java

@@ -3,6 +3,7 @@ package com.fjhx.oa.mapper.user;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.oa.entity.user.po.UserSalaryManage;
+import com.fjhx.oa.entity.user.vo.UserSalaryHistoryVo;
 import com.fjhx.oa.entity.user.vo.UserSalaryManageVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -31,4 +32,5 @@ public interface UserSalaryManageMapper extends BaseMapper<UserSalaryManage> {
 
     UserSalaryManageVo getDetail(@Param("userId") Long userId);
 
+    List<UserSalaryHistoryVo> getHistoryVerList(@Param("userId") Long userId);
 }

+ 8 - 0
hx-oa/src/main/java/com/fjhx/oa/service/user/UserSalaryManageService.java

@@ -6,6 +6,9 @@ import com.fjhx.oa.entity.user.dto.UserSalaryManageDto;
 import com.fjhx.oa.entity.user.dto.UserSalaryManageSelectDto;
 import com.fjhx.oa.entity.user.po.UserSalaryManage;
 import com.fjhx.oa.entity.user.vo.UserSalaryManageVo;
+import com.fjhx.oa.entity.user.vo.UserSalaryVo;
+
+import java.util.List;
 
 
 /**
@@ -28,4 +31,9 @@ public interface UserSalaryManageService extends IService<UserSalaryManage> {
      */
     void edit(UserSalaryManageDto userSalaryManageDto);
 
+    /**
+     * 获取历史版本结构
+     */
+    List<UserSalaryVo> getHistoryVerList(Long userId);
+
 }

+ 6 - 0
hx-oa/src/main/java/com/fjhx/oa/service/user/UserSalaryService.java

@@ -1,11 +1,15 @@
 package com.fjhx.oa.service.user;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.oa.entity.user.dto.UserSalarySelectDto;
 import com.fjhx.oa.entity.user.po.UserSalary;
 import com.fjhx.oa.entity.user.vo.UserSalaryVo;
 import com.ruoyi.common.core.service.BaseService;
 
+import java.util.List;
+import java.util.function.Consumer;
+
 
 /**
  * <p>
@@ -22,6 +26,8 @@ public interface UserSalaryService extends BaseService<UserSalary> {
      */
     Page<UserSalaryVo> getPage(UserSalarySelectDto dto);
 
+    List<UserSalaryVo> getList(Consumer<LambdaQueryWrapper<UserSalary>> consumer);
+
     /**
      * 用户薪资备份表明细
      */

+ 10 - 1
hx-oa/src/main/java/com/fjhx/oa/service/user/impl/UserSalaryDetailServiceImpl.java

@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.oa.entity.user.po.UserSalaryDetail;
 import com.fjhx.oa.entity.user.vo.UserSalaryDetailVo;
 import com.fjhx.oa.mapper.user.UserSalaryDetailMapper;
+import com.fjhx.oa.service.salary.SalaryStructureService;
 import com.fjhx.oa.service.user.UserSalaryDetailService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 
@@ -22,8 +24,15 @@ import java.util.List;
 @Service
 public class UserSalaryDetailServiceImpl extends ServiceImpl<UserSalaryDetailMapper, UserSalaryDetail> implements UserSalaryDetailService {
 
+    @Resource
+    private SalaryStructureService salaryStructureService;
+
     @Override
     public List<UserSalaryDetailVo> getList(IWrapper wrapper) {
-        return baseMapper.getList(wrapper);
+        List<UserSalaryDetailVo> list = baseMapper.getList(wrapper);
+        salaryStructureService.attributeAssign(list, UserSalaryDetailVo::getSalaryStructureId, (item, structure) -> {
+            item.setSalaryStructureName(structure.getName());
+        });
+        return list;
     }
 }

+ 48 - 0
hx-oa/src/main/java/com/fjhx/oa/service/user/impl/UserSalaryManageServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.oa.service.user.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,12 +10,16 @@ import com.fjhx.file.entity.FileInfoVo;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.oa.entity.user.dto.UserSalaryManageDto;
 import com.fjhx.oa.entity.user.dto.UserSalaryManageSelectDto;
+import com.fjhx.oa.entity.user.po.UserSalary;
 import com.fjhx.oa.entity.user.po.UserSalaryDetail;
 import com.fjhx.oa.entity.user.po.UserSalaryManage;
+import com.fjhx.oa.entity.user.vo.UserSalaryDetailVo;
 import com.fjhx.oa.entity.user.vo.UserSalaryManageVo;
+import com.fjhx.oa.entity.user.vo.UserSalaryVo;
 import com.fjhx.oa.mapper.user.UserSalaryManageMapper;
 import com.fjhx.oa.service.user.UserSalaryDetailService;
 import com.fjhx.oa.service.user.UserSalaryManageService;
+import com.fjhx.oa.service.user.UserSalaryService;
 import com.fjhx.tenant.utils.DeptUstil;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
@@ -41,6 +46,8 @@ public class UserSalaryManageServiceImpl extends ServiceImpl<UserSalaryManageMap
 
     @Resource
     private UserSalaryDetailService userSalaryDetailService;
+    @Resource
+    private UserSalaryService userSalaryService;
 
     @Override
     public Page<UserSalaryManageVo> getPage(UserSalaryManageSelectDto dto) {
@@ -79,14 +86,30 @@ public class UserSalaryManageServiceImpl extends ServiceImpl<UserSalaryManageMap
             }
             userSalaryDetailService.updateBatchById(oldList);
         }
+        //保存历史版本
+        UserSalary oldUserSalary = userSalaryService.getOne(q -> q.eq(UserSalary::getUserId, dto.getUserId()).eq(UserSalary::getIsCurrentVer, 1));
+        if (ObjectUtil.isNotEmpty(oldUserSalary)) {
+            UserSalary userSalary = BeanUtil.copyProperties(this.getById(dto.getUserId()), UserSalary.class);
+            userSalary.setId(oldUserSalary.getId());
+            userSalary.setIsCurrentVer(0);
+            userSalaryService.updateById(userSalary);
+        }
 
         //再处理新数据
         dataVer++;//版本号+1
         this.updateById(dto);
         ObsFileUtil.editFile(dto.getFileList(), dto.getUserId(), 10);
+
+        UserSalary newUserSalary = BeanUtil.copyProperties(dto, UserSalary.class);
+        newUserSalary.setDataVer(dataVer);
+        newUserSalary.setIsCurrentVer(1);
+        userSalaryService.save(newUserSalary);
+        ObsFileUtil.copyFileAndSave(dto.getFileList(), newUserSalary.getId(), 10);
+
         List<UserSalaryDetail> userSalaryDetailList = dto.getUserSalaryDetailList();
         for (UserSalaryDetail userSalaryDetail : userSalaryDetailList) {
             userSalaryDetail.setId(null);
+            userSalaryDetail.setUserSalaryId(newUserSalary.getId());
             userSalaryDetail.setUserId(dto.getUserId());
             userSalaryDetail.setDataVer(dataVer);
             userSalaryDetail.setIsCurrentVer(1);
@@ -94,6 +117,31 @@ public class UserSalaryManageServiceImpl extends ServiceImpl<UserSalaryManageMap
         userSalaryDetailService.saveBatch(userSalaryDetailList);
     }
 
+    @Override
+    public List<UserSalaryVo> getHistoryVerList(Long userId) {
+        Assert.notEmpty(userId, "用户id不能为空!");
+        List<UserSalaryVo> list = userSalaryService.getList(q -> q
+                .eq(UserSalary::getUserId, userId)
+                .eq(UserSalary::getIsCurrentVer, 0)
+                .orderByDesc(UserSalary::getDataVer)
+        );
+        if (ObjectUtil.isEmpty(list)) {
+            return list;
+        }
+
+        //赋值明细
+        List<Long> ids = list.stream().map(UserSalary::getId).collect(Collectors.toList());
+        List<UserSalaryDetailVo> userSalaryDetailVos = userSalaryDetailService.getList(IWrapper.getWrapper()
+                .in(UserSalaryDetail::getUserSalaryId, ids)
+        );
+        Map<Long, List<UserSalaryDetailVo>> collect = userSalaryDetailVos.stream().collect(Collectors.groupingBy(UserSalaryDetail::getUserSalaryId));
+        for (UserSalaryVo userSalary : list) {
+            userSalary.setUserSalaryDetailList(collect.getOrDefault(userSalary.getId(), new ArrayList<>()));
+        }
+
+        return list;
+    }
+
     private void setInfo(List<UserSalaryManageVo> list) {
         if (ObjectUtil.isEmpty(list)) {
             return;

+ 11 - 0
hx-oa/src/main/java/com/fjhx/oa/service/user/impl/UserSalaryServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fjhx.oa.service.user.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.oa.entity.user.dto.UserSalarySelectDto;
@@ -11,6 +12,9 @@ import com.fjhx.oa.service.user.UserSalaryService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.function.Consumer;
+
 
 /**
  * <p>
@@ -32,6 +36,13 @@ public class UserSalaryServiceImpl extends ServiceImpl<UserSalaryMapper, UserSal
     }
 
     @Override
+    public List<UserSalaryVo> getList(Consumer<LambdaQueryWrapper<UserSalary>> consumer) {
+        List<UserSalary> list = this.list(consumer);
+        List<UserSalaryVo> userSalaryVos = BeanUtil.copyToList(this.list(consumer), UserSalaryVo.class);
+        return userSalaryVos;
+    }
+
+    @Override
     public UserSalaryVo detail(Long id) {
         UserSalary UserSalary = this.getById(id);
         UserSalaryVo result = BeanUtil.toBean(UserSalary, UserSalaryVo.class);

+ 11 - 0
hx-oa/src/main/resources/mapper/user/UserSalaryManageMapper.xml

@@ -36,4 +36,15 @@
         <include refid="list"/>
         where su.user_id = #{userId}
     </select>
+    <select id="getHistoryVerList" resultType="com.fjhx.oa.entity.user.vo.UserSalaryHistoryVo">
+        SELECT usd.user_id,
+               usd.data_ver,
+               usd.create_time,
+               usd.update_time
+        FROM user_salary_detail usd
+        WHERE usd.is_current_ver = 0
+          AND usd.user_id = #{userId}
+        GROUP BY usd.data_ver
+        ORDER BY usd.data_ver DESC
+    </select>
 </mapper>