From 8c5464464036193ddac1de2c5155c94141545c7c Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 21 五月 2026 09:44:24 +0800
Subject: [PATCH] 质量管理增加接口描述

---
 src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java |  133 ++++++++++++++++++++++++++------------------
 1 files changed, 79 insertions(+), 54 deletions(-)

diff --git a/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
index e8d3982..d57a25e 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
@@ -2,32 +2,33 @@
 
 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.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.bean.dto.UserAccountDto;
+import com.ruoyi.production.bean.dto.UserProductionAccountingDto;
+import com.ruoyi.production.service.SalesLedgerProductionAccountingService;
 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.controller.TaxCalculator;
-import com.ruoyi.staff.dto.StaffOnJobDto;
+import com.ruoyi.staff.mapper.SchemeApplicableStaffMapper;
 import com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper;
 import com.ruoyi.staff.mapper.StaffOnJobMapper;
 import com.ruoyi.staff.pojo.SchemeApplicableStaff;
-import com.ruoyi.staff.mapper.SchemeApplicableStaffMapper;
 import com.ruoyi.staff.pojo.SchemeInsuranceDetail;
 import com.ruoyi.staff.pojo.StaffOnJob;
-import com.ruoyi.staff.service.IStaffOnJobService;
 import com.ruoyi.staff.service.SchemeApplicableStaffService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -39,29 +40,19 @@
  * @since 2026-03-05 11:50:17
  */
 @Service
+@RequiredArgsConstructor
 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;
-
-    @Autowired
-    private StaffOnJobMapper staffOnJobMapper;
+    private final SchemeApplicableStaffMapper schemeApplicableStaffMapper;
+    private final SchemeInsuranceDetailMapper schemeInsuranceDetailMapper;
+    private final SysUserMapper sysUserMapper;
+    private final SysDeptMapper sysDeptMapper;
+    private final StaffOnJobMapper staffOnJobMapper;
+    private final SalesLedgerProductionAccountingService salesLedgerProductionAccountingService;
 
 
     @Override
-    public AjaxResult listPage(Page page, SchemeApplicableStaff schemeApplicableStaff) {
+    public R<?> listPage(Page page, SchemeApplicableStaff schemeApplicableStaff) {
         LambdaQueryWrapper<SchemeApplicableStaff> schemeApplicableStaffLambdaQueryWrapper = new LambdaQueryWrapper<>();
         if(schemeApplicableStaff != null){
             if(StringUtils.isNotEmpty(schemeApplicableStaff.getTitle())){
@@ -71,7 +62,7 @@
         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);
+            return R.ok(page1);
         }
         List<SchemeInsuranceDetail> schemeInsuranceDetails = schemeInsuranceDetailMapper
                 .selectList(new LambdaQueryWrapper<SchemeInsuranceDetail>()
@@ -91,7 +82,7 @@
                 item.setDeptNames(sysDepts.stream().map(SysDept::getDeptName).collect(Collectors.joining(",")));
             }
         });
-        return AjaxResult.success(page1);
+        return R.ok(page1);
     }
 
     public void setSchemeApplicableStaffUserInfo(SchemeApplicableStaff schemeApplicableStaff) {
@@ -112,12 +103,12 @@
     }
 
     @Override
-    public AjaxResult add(SchemeApplicableStaff schemeApplicableStaff) {
+    public R<?> add(SchemeApplicableStaff schemeApplicableStaff) {
         if(schemeApplicableStaff == null){
-            return AjaxResult.error("鍙傛暟閿欒");
+            return R.fail("鍙傛暟閿欒");
         }
         if(CollectionUtils.isEmpty(schemeApplicableStaff.getSchemeInsuranceDetailList())){
-            return AjaxResult.error("璇烽�夋嫨鏂规鏄庣粏");
+            return R.fail("璇烽�夋嫨鏂规鏄庣粏");
         }
         setSchemeApplicableStaffUserInfo(schemeApplicableStaff); //鏍规嵁閮ㄩ棬璁剧疆鐢ㄦ埛淇℃伅
         int insert = schemeApplicableStaffMapper.insert(schemeApplicableStaff);
@@ -125,13 +116,13 @@
             item.setSchemeId(schemeApplicableStaff.getId());
             schemeInsuranceDetailMapper.insert(item);
         });
-        return AjaxResult.success(insert);
+        return R.ok(insert);
     }
 
     @Override
-    public AjaxResult updateSchemeApplicableStaff(SchemeApplicableStaff schemeApplicableStaff) {
+    public R<?> updateSchemeApplicableStaff(SchemeApplicableStaff schemeApplicableStaff) {
         if(schemeApplicableStaff == null){
-            return AjaxResult.error("鍙傛暟閿欒");
+            return R.fail("鍙傛暟閿欒");
         }
         setSchemeApplicableStaffUserInfo(schemeApplicableStaff); //鏍规嵁閮ㄩ棬璁剧疆鐢ㄦ埛淇℃伅
         int update = schemeApplicableStaffMapper.updateById(schemeApplicableStaff);
@@ -142,38 +133,38 @@
             item.setSchemeId(schemeApplicableStaff.getId());
             schemeInsuranceDetailMapper.insert(item);
         });
-        return AjaxResult.success(update);
+        return R.ok(update);
     }
 
     @Override
-    public AjaxResult delete(List<Long> ids) {
+    public R<?> delete(List<Long> ids) {
         if (CollectionUtils.isEmpty(ids)) {
-            return AjaxResult.error("鍙傛暟閿欒");
+            return R.fail("鍙傛暟閿欒");
         }
         int delete = schemeApplicableStaffMapper.deleteBatchIds(ids);
         schemeInsuranceDetailMapper.delete(new LambdaQueryWrapper<SchemeInsuranceDetail>()
                 .in(SchemeInsuranceDetail::getSchemeId, ids));
-        return AjaxResult.success(delete);
+        return R.ok(delete);
     }
 
     /**
      * 閫氳繃鍛樺伐id璁$畻绀句繚鏂规
      * @param id
      */
-    public void calculateByEmployeeId(Integer id,Map<String, Object> map) {
+    public void calculateByEmployeeId(Integer id,Map<String, Object> map,String date) {
         // 1. 鍏ュ弬鏍¢獙
         if (id == null) {
             return; // 鎴栬繑鍥炵┖鍒楄〃锛屾牴鎹笟鍔¢渶姹傝皟鏁�
         }
         Long staffId = id.longValue();
         // 绀句繚閲戦
-        BigDecimal schemeAmount = new BigDecimal("0.00");
+        BigDecimal socialPersonal = new BigDecimal("0.00");
         // 鍏Н閲戦噾棰�
-        BigDecimal gjj = new BigDecimal("0.00");
+        BigDecimal fundPersonal = new BigDecimal("0.00");
         // 鍩烘湰宸ヨ祫
         BigDecimal basicSalary = new BigDecimal("0.00");
-        map.put("gjj", gjj); // 鍏Н閲�
-        map.put("schemeAmount", schemeAmount); // 绀句繚閲戦
+        map.put("fundPersonal", fundPersonal); // 鍏Н閲�
+        map.put("socialPersonal", socialPersonal); // 绀句繚閲戦
         map.put("basicSalary", basicSalary); // 鍩烘湰宸ヨ祫
         // 涓◣閲戦
         BigDecimal salaryTax = new BigDecimal("0.00");
@@ -209,8 +200,22 @@
         // 搴斿彂宸ヨ祫
         map.put("grossSalary", basicSalary);
         // 涓◣閲戦锛堟棤绀句繚鐗堬級
-        BigDecimal bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, schemeAmount, gjj);
+        BigDecimal bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, socialPersonal, fundPersonal);
         map.put("salaryTax", bigDecimal);
+        // 璁℃椂宸ヨ祫 璁′欢宸ヨ祫
+        UserProductionAccountingDto userProductionAccountingDto = new UserProductionAccountingDto();
+        userProductionAccountingDto.setUserId(getUidByStaffId(staffId));
+        userProductionAccountingDto.setDate(date);
+        UserAccountDto byUserId = salesLedgerProductionAccountingService.getByUserId(userProductionAccountingDto);
+        if(byUserId != null){
+            map.put("pieceSalary", byUserId.getAccountBalance());
+            map.put("hourlySalary", byUserId.getAccount());
+            // 搴斿彂 瀹炲彂澧炲姞
+            grossSalary = grossSalary.add(byUserId.getAccountBalance()).add(byUserId.getAccount());
+            map.put("grossSalary", grossSalary);
+            netSalary = netSalary.add(byUserId.getAccountBalance()).add(byUserId.getAccount());
+            map.put("netSalary", netSalary);
+        }
         // 2. 鏌ヨ璇ヤ汉鍛樺搴旂殑绀句繚鏂规
         List<SchemeApplicableStaff> schemeList = schemeApplicableStaffMapper.selectSchemeByStaffId(staffId);
         if (CollectionUtils.isEmpty(schemeList)) {
@@ -224,26 +229,46 @@
                 continue;
             }
             for (SchemeInsuranceDetail detail : detailList) {
-                if("浣忔埧鍏Н閲�".equals(detail.getInsuranceType())){
-                    gjj = gjj.add(calculateByEmployeeIdType(detail.getInsuranceType(),gjj, staffOnJobDto, detail));
+                if("鍏Н閲�".equals(detail.getInsuranceType())){
+                    fundPersonal = fundPersonal.add(calculateByEmployeeIdType(detail.getInsuranceType(),fundPersonal, staffOnJobDto, detail));
                 }else{
-                    schemeAmount = schemeAmount.add(calculateByEmployeeIdType(detail.getInsuranceType(),schemeAmount, staffOnJobDto, detail));
+                    socialPersonal = socialPersonal.add(calculateByEmployeeIdType(detail.getInsuranceType(),socialPersonal, staffOnJobDto, detail));
                 }
             }
         }
-        map.put("schemeAmount", schemeAmount);
-        map.put("gjj", gjj);
+        map.put("socialPersonal", socialPersonal);
+        map.put("fundPersonal", fundPersonal);
         // 涓◣閲戦锛堢ぞ淇濈増锛�
-        bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, schemeAmount, gjj);
+        bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, socialPersonal, fundPersonal);
         map.put("salaryTax", bigDecimal);
         // 搴旀墸宸ヨ祫
-        map.put("deductSalary", bigDecimal.add(gjj).add(schemeAmount));
+        map.put("deductSalary", bigDecimal.add(fundPersonal).add(socialPersonal));
         // 瀹炲彂宸ヨ祫
-        map.put("netSalary", basicSalary.subtract(bigDecimal).subtract(gjj).subtract(schemeAmount));
+        map.put("netSalary", basicSalary.subtract(bigDecimal).subtract(fundPersonal).subtract(socialPersonal));
 
     }
 
     /**
+     * 閫氳繃鍛樺伐Id鑾峰彇鐢ㄦ埛id
+     * @param staffId
+     * @return
+     */
+    public Long getUidByStaffId(Long staffId){
+        StaffOnJob staffOnJob = staffOnJobMapper.selectById(staffId);
+        if(staffOnJob == null){
+            return -1L; // 杩斿洖涓嶅瓨鍦↖d
+        }
+        SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getUserName, staffOnJob.getStaffNo())
+                .eq(SysUser::getDelFlag, "0")
+                .last("limit 1"));
+        if(sysUser == null){
+            return -1L; // 杩斿洖涓嶅瓨鍦↖d
+        }
+        return sysUser.getUserId();
+    }
+
+    /**
      * 璁$畻
      * @param type
      * @param bigDecimal

--
Gitblit v1.9.3