From 04abe23808d72c86781c2fa9af358d93455f2bb1 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 13 十一月 2025 17:35:56 +0800
Subject: [PATCH] yys  1.仓储物流增加分类管理      2.仓储物流分类管理导出接口      4.新疆生产管控定制化

---
 src/main/java/com/ruoyi/device/pojo/DeviceLedger.java                                             |   12 ++
 src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java             |   38 ++++-
 src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java                                 |    2 
 src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java                              |    3 
 src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java                       |    3 
 src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java                 |   44 +++---
 src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java                                  |    8 +
 src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java   |    9 +
 src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java                                           |   13 ++
 src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java                |   31 ++++
 src/main/java/com/ruoyi/project/system/controller/SysUserController.java                          |   12 ++
 src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java                                           |   15 ++
 src/main/java/com/ruoyi/sales/pojo/Loss.java                                                      |   31 +++++
 src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java                           |    8 +
 src/main/resources/mapper/staff/StaffSchedulingMapper.xml                                         |    7 
 src/main/resources/mapper/system/SysUserMapper.xml                                                |    6 +
 src/main/resources/mapper/device/DeviceLedgerMapper.xml                                           |    2 
 src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java                        |   12 ++
 src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java |   34 +++++
 src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java                                     |   24 ++-
 src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java                                         |   10 +
 src/main/java/com/ruoyi/sales/mapper/LossMapper.java                                              |   11 +
 22 files changed, 288 insertions(+), 47 deletions(-)

diff --git a/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java b/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java
index 84fdbe5..e1faffb 100644
--- a/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java
+++ b/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.compensationperformance.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -9,16 +10,23 @@
 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.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.purchase.dto.PaymentRegistrationDto;
+import com.ruoyi.staff.mapper.StaffOnJobMapper;
+import com.ruoyi.staff.pojo.StaffOnJob;
 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.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author :yys
@@ -76,5 +84,31 @@
         util.exportExcel(response, list, "瀵煎嚭钖祫绠$悊鍒楄〃");
     }
 
+    @Log(title = "涓嬭浇钖祫绠$悊鍒楄〃妯℃澘", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportTemplate")
+    public void exportTemplate(HttpServletResponse response) {
+        List<CompensationPerformance> list = new ArrayList<>();
+        ExcelUtil<CompensationPerformance> util = new ExcelUtil<>(CompensationPerformance.class);
+        util.exportExcel(response, list, "涓嬭浇钖祫绠$悊鍒楄〃妯℃澘");
+    }
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Log(title = "瀵煎叆钖祫绠$悊鍒楄〃", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file) throws Exception {
+        ExcelUtil<CompensationPerformance> util = new ExcelUtil<>(CompensationPerformance.class);
+        List<CompensationPerformance> list = util.importExcel(file.getInputStream());
+        list.forEach(item->{
+            SysUser staffOnJob = sysUserMapper.selectUserByNickName(item.getName());
+            if(staffOnJob!=null){
+                item.setStaffId(staffOnJob.getUserId());
+            }
+        });
+        boolean b = compensationPerformanceService.saveBatch(list);
+        return AjaxResult.success(b);
+    }
+
 
 }
diff --git a/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java b/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java
index 499d75a..84d6138 100644
--- a/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java
+++ b/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java
@@ -28,9 +28,9 @@
     private Long id;
 
     /**
-     * 鍛樺伐id
+     * 鐢ㄦ埛id
      */
-    @ApiModelProperty("鍛樺伐id")
+    @ApiModelProperty("鐢ㄦ埛id")
     private Long staffId;
 
     /**
@@ -61,14 +61,14 @@
      * 搴斿嚭鍕ゅぉ鏁�
      */
     @ApiModelProperty("搴斿嚭鍕ゅぉ鏁�")
-    @Excel(name = "搴斿嚭鍕ゅぉ鏁�")
+//    @Excel(name = "搴斿嚭鍕ゅぉ鏁�")
     private BigDecimal shouldAttendedNum;
 
     /**
      * 瀹為檯鍑哄嫟澶╂暟
      */
     @ApiModelProperty("瀹為檯鍑哄嫟澶╂暟")
-    @Excel(name = "瀹為檯鍑哄嫟澶╂暟")
+//    @Excel(name = "瀹為檯鍑哄嫟澶╂暟")
     private BigDecimal actualAttendedNum;
 
 
@@ -76,21 +76,21 @@
      * 鍩烘湰宸ヨ祫
      */
     @ApiModelProperty("鍩烘湰宸ヨ祫")
-    @Excel(name = "鍩烘湰宸ヨ祫")
+//    @Excel(name = "鍩烘湰宸ヨ祫")
     private BigDecimal basicSalary;
 
     /**
      * 宀椾綅宸ヨ祫
      */
     @ApiModelProperty("宀椾綅宸ヨ祫")
-    @Excel(name = "宀椾綅宸ヨ祫")
+//    @Excel(name = "宀椾綅宸ヨ祫")
     private BigDecimal postSalary;
 
     /**
      * 鍏ョ鑱岀己鍕ゆ墸娆�
      */
     @ApiModelProperty("鍏ョ鑱岀己鍕ゆ墸娆�")
-    @Excel(name = "鍏ョ鑱岀己鍕ゆ墸娆�")
+//    @Excel(name = "鍏ョ鑱岀己鍕ゆ墸娆�")
     private BigDecimal deductionAbsenteeism;
 
 
@@ -98,34 +98,34 @@
      * 鐥呭亣鎵f
      */
     @ApiModelProperty("鐥呭亣鎵f")
-    @Excel(name = "鐥呭亣鎵f")
+//    @Excel(name = "鐥呭亣鎵f")
     private BigDecimal sickLeaveDeductions;
 
     /**
      * 浜嬪亣鎵f
      */
     @ApiModelProperty("浜嬪亣鎵f")
-    @Excel(name = "浜嬪亣鎵f")
+//    @Excel(name = "浜嬪亣鎵f")
     private BigDecimal deductionPersonalLeave;
     /**
      * 蹇樿鎵撳崱鎵f
      */
     @ApiModelProperty("蹇樿鎵撳崱鎵f")
-    @Excel(name = "蹇樿鎵撳崱鎵f")
+//    @Excel(name = "蹇樿鎵撳崱鎵f")
     private BigDecimal forgetClockDeduct;
 
     /**
      * 缁╂晥寰楀垎
      */
     @ApiModelProperty("缁╂晥寰楀垎")
-    @Excel(name = "缁╂晥寰楀垎")
+//    @Excel(name = "缁╂晥寰楀垎")
     private BigDecimal performanceScore;
 
     /**
      * 缁╂晥宸ヨ祫
      */
     @ApiModelProperty("缁╂晥宸ヨ祫")
-    @Excel(name = "缁╂晥宸ヨ祫")
+//    @Excel(name = "缁╂晥宸ヨ祫")
     private BigDecimal performancePay;
 
 
@@ -133,67 +133,67 @@
      * 搴斿彂鍚堣
      */
     @ApiModelProperty("搴斿彂鍚堣")
-    @Excel(name = "搴斿彂鍚堣")
+//    @Excel(name = "搴斿彂鍚堣")
     private BigDecimal payableWages;
 
     /**
      * 绀句繚涓汉
      */
     @ApiModelProperty("绀句繚涓汉")
-    @Excel(name = "绀句繚涓汉")
+//    @Excel(name = "绀句繚涓汉")
     private BigDecimal socialSecurityIndividuals;
     /**
      * 绀句繚鍏徃
      */
     @ApiModelProperty("绀句繚鍏徃")
-    @Excel(name = "绀句繚鍏徃")
+//    @Excel(name = "绀句繚鍏徃")
     private BigDecimal socialSecurityCompanies;
 
     /**
      * 绀句繚鍚堣
      */
     @ApiModelProperty("绀句繚鍚堣")
-    @Excel(name = "绀句繚鍚堣")
+//    @Excel(name = "绀句繚鍚堣")
     private BigDecimal socialSecurityTotal;
 
     /**
      * 鍏Н閲戝悎璁�
      */
     @ApiModelProperty("鍏Н閲戝悎璁�")
-    @Excel(name = "鍏Н閲戝悎璁�")
+//    @Excel(name = "鍏Н閲戝悎璁�")
     private BigDecimal providentFundTotal;
     /**
      * 鍏Н閲戝叕鍙�
      */
     @ApiModelProperty("鍏Н閲戝叕鍙�")
-    @Excel(name = "鍏Н閲戝叕鍙�")
+//    @Excel(name = "鍏Н閲戝叕鍙�")
     private BigDecimal providentFundCompany;
 
     /**
      * 鍏Н閲戜釜浜�
      */
     @ApiModelProperty("鍏Н閲戜釜浜�")
-    @Excel(name = "鍏Н閲戜釜浜�")
+//    @Excel(name = "鍏Н閲戜釜浜�")
     private BigDecimal providentFundIndividuals;
 
     /**
      * 搴旂◣宸ヨ祫
      */
     @ApiModelProperty("搴旂◣宸ヨ祫")
-    @Excel(name = "搴旂◣宸ヨ祫")
+//    @Excel(name = "搴旂◣宸ヨ祫")
     private BigDecimal taxableWaget;
     /**
      * 涓汉鎵�寰楃◣
      */
     @ApiModelProperty("涓汉鎵�寰楃◣")
-    @Excel(name = "涓汉鎵�寰楃◣")
+//    @Excel(name = "涓汉鎵�寰楃◣")
     private BigDecimal personalIncomeTax;
 
     /**
      * 瀹炲彂宸ヨ祫
      */
     @ApiModelProperty("瀹炲彂宸ヨ祫")
-    @Excel(name = "瀹炲彂宸ヨ祫")
+    @Excel(name = "瀹炲彂宸ヨ祫", width = 30)
     private BigDecimal actualWages;
 
     /**
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
index 26bdc91..604001d 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
@@ -37,6 +37,19 @@
     private String deviceModel;
 
     /**
+     * 璁惧鍝佺墝
+     */
+    @ApiModelProperty("璁惧鍝佺墝")
+    private String deviceBrand;
+
+    /**
+     * 瀛樻斁浣嶇疆
+     */
+    @ApiModelProperty("瀛樻斁浣嶇疆")
+    private String storageLocation;
+
+
+    /**
      * 渚涘簲鍟嗗悕绉�
      */
     private String supplierName;
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
index caa8f32..785cf91 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
@@ -41,6 +41,18 @@
     private String deviceModel;
 
     /**
+     * 璁惧鍝佺墝
+     */
+    @ApiModelProperty("璁惧鍝佺墝")
+    private String deviceBrand;
+
+    /**
+     * 瀛樻斁浣嶇疆
+     */
+    @ApiModelProperty("瀛樻斁浣嶇疆")
+    private String storageLocation;
+
+    /**
      * 渚涘簲鍟嗗悕绉�
      */
     private String supplierName;
diff --git a/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java b/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
index 169b83f..51b5f0d 100644
--- a/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
+++ b/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
@@ -15,6 +15,8 @@
 import com.ruoyi.production.mapper.SpeculativeTradingInfoMapper;
 import com.ruoyi.production.pojo.SpeculativeTradingInfo;
 import com.ruoyi.production.service.impl.SalesLedgerSchedulingServiceImpl;
+import com.ruoyi.sales.mapper.LossMapper;
+import com.ruoyi.sales.pojo.Loss;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,15 +46,40 @@
     @Autowired
     private SpeculativeTradingInfoMapper speculativeTradingInfoMapper;
 
+    @Autowired
+    private LossMapper lossMapper;
+
+    @GetMapping("/loss")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-鎹熻�楃巼", businessType = BusinessType.OTHER)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-鎹熻�楃巼")
+    public AjaxResult loss() {
+        return AjaxResult.success(lossMapper.selectList(null));
+    }
+
+    @PostMapping("/addLoss")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鎹熻�楃巼", businessType = BusinessType.INSERT)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鎹熻�楃巼")
+    public AjaxResult addLoss(@RequestBody Loss loss) {
+        lossMapper.insert(loss);
+        return AjaxResult.success("娣诲姞鎹熻�楃巼鎴愬姛");
+    }
+
+    @PostMapping("/updateLoss")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鎹熻�楃巼", businessType = BusinessType.UPDATE)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鎹熻�楃巼")
+    public AjaxResult updateLoss(@RequestBody Loss loss) {
+        lossMapper.updateById(loss);
+        return AjaxResult.success("淇敼鎹熻�楃巼鎴愬姛");
+    }
+
     @GetMapping("/list")
     @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-鐐掓満淇℃伅", businessType = BusinessType.OTHER)
     @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-鐐掓満淇℃伅")
     public AjaxResult list() {
         List<SpeculativeTradingInfo> result = speculativeTradingInfoMapper.selectList(null);
         result.forEach(item -> {
-
             item.setCurrentWorkLoad(salesLedgerSchedulingService.getSchedulingNumBySpeculativeTradingName(item.getName()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
-            item.setVacant(item.getWorkLoad().subtract(item.getCurrentWorkLoad()));
+            item.setVacant(item.getWorkLoad().subtract(item.getCurrentWorkLoad()).setScale(2, RoundingMode.HALF_UP)); //淇濈暀涓や綅灏忔暟
         });
         return AjaxResult.success(result);
     }
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
index 1acb484..d72bdc3 100644
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
+++ b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
@@ -27,6 +27,9 @@
     @ApiModelProperty(value = "閿�鍞彴璐D")
     private Long salesLedgerId;
 
+    @ApiModelProperty(value = "鐢熶骇鎬婚噺(鍗曚綅kg)")
+    private BigDecimal totalProduction;
+
     /**
      * 鐢熶骇鐐掓満
      */
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
index f60b055..10d472a 100644
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
+++ b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
@@ -23,6 +23,9 @@
     @ApiModelProperty(value = "閿�鍞骇鍝両D")
     private Long salesLedgerProductId;
 
+    @ApiModelProperty(value = "鐢熶骇鎬婚噺(鍗曚綅kg)")
+    private BigDecimal totalProduction;
+
     @ApiModelProperty(value = "閿�鍞彴璐D")
     private Long salesLedgerId;
 
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
index 3d510b8..5a7fe76 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
@@ -11,6 +11,8 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+
 /**
  * @author :yys
  * @date : 2025/7/21 14:41
@@ -25,6 +27,13 @@
     @Override
     public IPage<SalesLedgerProductionAccountingDto> listPage(Page page, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto) {
         IPage<SalesLedgerProductionAccountingDto> list = salesLedgerProductionAccountingMapper.listPage(page, salesLedgerProductionAccountingDto);
+        list.getRecords().forEach(item -> {
+            String[] split = item.getSpecificationModel().split("\\*");
+            if(split.length == 2){
+                // 璁$畻宸ヨ祫 = 宸ユ椂瀹氶 * 鏁伴噺 * 瑙勬牸
+                item.setWages(item.getWages().multiply(new BigDecimal(split[1])));
+            }
+        });
         return list;
     }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
index f9d6105..96be320 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
@@ -18,7 +18,9 @@
 import com.ruoyi.production.service.SalesLedgerSchedulingService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.mapper.LossMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.Loss;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -28,6 +30,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -77,6 +80,15 @@
             }else{
                 i.setStatus("鐢熶骇涓�");
             }
+            // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
+            String[] split = i.getSpecificationModel().split("\\*");
+            if(split.length == 2){
+                BigDecimal multiply = new BigDecimal(split[0])
+                        .multiply(new BigDecimal(split[1])
+                                .multiply(i.getQuantity()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
+                i.setTotalProduction(multiply);
+            }
+
         });
         return list;
     }
@@ -210,8 +222,14 @@
                 totalNum.addAndGet(productionNum.intValue());
             }
         });
-        return new BigDecimal(totalNum.get());
+        // 闇�瑕� / 鎹熻�楃巼
+        Loss loss = lossMapper.selectOne(new LambdaQueryWrapper<Loss>().last("limit 1"));
+        BigDecimal lossNum = loss == null ? new BigDecimal(6) : loss.getRate(); //娌℃湁鎹熻�楃巼鍒欓粯璁や负6
+
+        return new BigDecimal(totalNum.get()).multiply(new BigDecimal(100)).divide(lossNum, 2,RoundingMode.HALF_UP);
     }
+
+    private LossMapper lossMapper;
 
 
     /**
@@ -256,14 +274,16 @@
 //        salesLedgerWorkLambdaQueryWrapper.in(SalesLedgerWork::getSalesLedgerSchedulingId, collect)
 //                .ne(SalesLedgerWork::getStatus, 1);
 //        List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
-//        list.getRecords().forEach(i -> {
-//            // 鑾峰彇瀹屾垚鏁伴噺
-//            i.setSuccessNum(salesLedgerWorks
-//                    .stream()
-//                    .filter(j -> j.getSalesLedgerSchedulingId().equals(i.getId()))
-//                    .map(SalesLedgerWork::getFinishedNum)
-//                    .reduce(BigDecimal.ZERO, BigDecimal::add));
-//        });
+        list.getRecords().forEach(i -> {
+            // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
+            String[] split = i.getSpecificationModel().split("\\*");
+            if(split.length == 2){
+                BigDecimal multiply = new BigDecimal(split[0])
+                        .multiply(new BigDecimal(split[1])
+                                .multiply(i.getSuccessNum()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
+                i.setTotalProduction(multiply);
+            }
+        });
         return list;
     }
 
diff --git a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
index 14618a9..4ddd819 100644
--- a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
+++ b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
@@ -5,6 +5,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.project.system.domain.vo.SysUserDeptVo;
+import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.project.system.service.*;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,6 +68,17 @@
         return getDataTable(list);
     }
 
+    /**
+     * 鑾峰彇鐢ㄦ埛鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/listAll")
+    public AjaxResult listAll(SysUser user)
+    {
+        List<SysUser> list = userService.selectUserList(user);
+        return AjaxResult.success(list);
+    }
+
     @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('system:user:export')")
     @PostMapping("/export")
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
index 550fa51..5b0f56d 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -49,6 +49,14 @@
     public SysUser selectUserByUserName(String userName);
 
     /**
+     * 閫氳繃鏄电О鏌ヨ鐢ㄦ埛
+     *
+     * @param nickName 鐢ㄦ埛鍚�
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+    public SysUser selectUserByNickName(String nickName);
+
+    /**
      * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
      * 
      * @param userId 鐢ㄦ埛ID
diff --git a/src/main/java/com/ruoyi/sales/mapper/LossMapper.java b/src/main/java/com/ruoyi/sales/mapper/LossMapper.java
new file mode 100644
index 0000000..e4cf991
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/mapper/LossMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.sales.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.sales.pojo.Loss;
+
+/**
+ * @author :yys
+ * @date : 2025/11/13 16:17
+ */
+public interface LossMapper extends BaseMapper<Loss> {
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/Loss.java b/src/main/java/com/ruoyi/sales/pojo/Loss.java
new file mode 100644
index 0000000..ad0a03e
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/pojo/Loss.java
@@ -0,0 +1,31 @@
+package com.ruoyi.sales.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/11/13 16:16
+ */
+@Data
+@TableName("loss")
+public class Loss {
+
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 搴忓彿
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private BigDecimal rate;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+}
diff --git a/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java b/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java
index 9f5d82c..a54096a 100644
--- a/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java
+++ b/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java
@@ -53,6 +53,14 @@
         return AjaxResult.success();
     }
 
+    /**
+     * 鑾峰彇褰撳墠鐢ㄦ埛鏈�鏂版帓鐝褰�
+     */
+    @GetMapping("/getCurrentUserLatestScheduling")
+    public AjaxResult getCurrentUserLatestScheduling(){
+        return AjaxResult.success(staffSchedulingService.getCurrentUserLatestScheduling());
+    }
+
     @Log(title = "瀵煎嚭浜哄憳鎺掔彮鍒楄〃", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response ) {
diff --git a/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java b/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java
index 25a41b3..7e57745 100644
--- a/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java
+++ b/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java
@@ -1,5 +1,6 @@
 package com.ruoyi.staff.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -21,27 +22,34 @@
 public class SaveStaffSchedulingDto implements Serializable {
     private Integer id;
 
-    @NotNull(message = "蹇呴』瑕侀�夋嫨鍛樺伐")
-    private Integer staffId;
+//    @NotNull(message = "蹇呴』瑕侀�夋嫨鍛樺伐")
+    private String staffId;
 
-    @NotNull(message = "閮ㄩ棬id涓嶈兘涓虹┖!")
+    /**
+     * 鍗堜紤鏃堕棿
+     */
+    private String lunchTime;
+
+    private String staffName;
+
+//    @NotNull(message = "閮ㄩ棬id涓嶈兘涓虹┖!")
     private Integer department;
 
-    @NotNull(message = "鐝id涓嶈兘涓虹┖!")
+//    @NotNull(message = "鐝id涓嶈兘涓虹┖!")
     private Integer shiftType;
 
-    @NotNull(message = "宸ヤ綔鏃ヤ笉鑳戒负绌�!")
+//    @NotNull(message = "宸ヤ綔鏃ヤ笉鑳戒负绌�!")
     private Date workDate;
 
-    @NotNull(message = "涓婄彮鏃堕棿涓嶈兘涓虹┖!")
+//    @NotNull(message = "涓婄彮鏃堕棿涓嶈兘涓虹┖!")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime workStartTime;
 
-    @NotNull(message = "涓嬬彮鏃堕棿涓嶈兘涓虹┖!")
+//    @NotNull(message = "涓嬬彮鏃堕棿涓嶈兘涓虹┖!")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime workEndTime;
 
-    @NotNull(message = "宸ユ椂涓嶈兘涓虹┖!")
+//    @NotNull(message = "宸ユ椂涓嶈兘涓虹┖!")
     private Integer status;
 
     private String remark;
diff --git a/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java b/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java
index ad8b812..727b773 100644
--- a/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java
+++ b/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java
@@ -1,6 +1,7 @@
 package com.ruoyi.staff.dto;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
@@ -24,7 +25,14 @@
     /**
      * 鍛樺伐ID
      */
-    private Integer staffId;
+    private String staffId;
+
+
+    /**
+     * 鍗堜紤鏃堕棿
+     */
+    @Excel(name = "鍗堜紤鏃堕棿")
+    private String lunchTime;
 
     @Excel(name = "鍛樺伐鍚嶇О")
     private String staffName;
diff --git a/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java b/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java
index 89be920..a00040c 100644
--- a/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java
+++ b/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java
@@ -24,7 +24,19 @@
      * 鍛樺伐ID
      */
     @TableField(value = "staff_id")
-    private Integer staffId;
+    private String staffId;
+
+    /**
+     * 鎺掔彮浜哄憳
+     */
+    @TableField(value = "staff_name")
+    private String staffName;
+
+    /**
+     * 鍗堜紤鏃堕棿
+     */
+    @TableField(value = "lunch_time")
+    private String lunchTime;
 
     /**
      * 閮ㄩ棬
@@ -44,6 +56,7 @@
     @TableField(value = "work_date")
     private Date workDate;
 
+
     /**
      * 寮�濮嬪伐浣滄椂闂�
      */
diff --git a/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java b/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java
index b12faa1..177485d 100644
--- a/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java
+++ b/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java
@@ -17,4 +17,6 @@
     void saveStaffScheduling(SaveStaffSchedulingDto saveStaffSchedulingDto);
 
     IPage<StaffSchedulingDto> listPage(SearchSchedulingVo vo);
+
+    StaffScheduling getCurrentUserLatestScheduling();
 }
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
index b42d1fc..b05fc92 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
@@ -1,8 +1,11 @@
 package com.ruoyi.staff.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.staff.dto.SaveStaffSchedulingDto;
 import com.ruoyi.staff.dto.StaffSchedulingDto;
 import com.ruoyi.staff.mapper.StaffSchedulingMapper;
@@ -54,6 +57,15 @@
 
         return staffSchedulingMapper.listPage(page, vo);
     }
+
+    @Override
+    public StaffScheduling getCurrentUserLatestScheduling() {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        return staffSchedulingMapper.selectOne(new LambdaQueryWrapper<StaffScheduling>()
+                .like(StaffScheduling::getStaffId,loginUser.getUserId())
+                .orderByDesc(StaffScheduling::getWorkEndTime)
+                .last("LIMIT 1"));
+    }
 }
 
 
diff --git a/src/main/resources/mapper/device/DeviceLedgerMapper.xml b/src/main/resources/mapper/device/DeviceLedgerMapper.xml
index 9cee459..b37f95f 100644
--- a/src/main/resources/mapper/device/DeviceLedgerMapper.xml
+++ b/src/main/resources/mapper/device/DeviceLedgerMapper.xml
@@ -11,6 +11,8 @@
         dl.device_name,
         dl.device_model,
         dl.supplier_name,
+        dl.device_brand,
+        dl.storage_location,
         dl.unit,
         dl.number,
         dl.status,
diff --git a/src/main/resources/mapper/staff/StaffSchedulingMapper.xml b/src/main/resources/mapper/staff/StaffSchedulingMapper.xml
index 1a32ef1..5bc5e4a 100644
--- a/src/main/resources/mapper/staff/StaffSchedulingMapper.xml
+++ b/src/main/resources/mapper/staff/StaffSchedulingMapper.xml
@@ -6,7 +6,7 @@
 
     <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.StaffScheduling">
             <id property="id" column="id" jdbcType="INTEGER"/>
-            <result property="staffId" column="staff_id" jdbcType="INTEGER"/>
+            <result property="staffId" column="staff_id" jdbcType="VARCHAR"/>
             <result property="department" column="department" jdbcType="INTEGER"/>
             <result property="shiftType" column="shift_type" jdbcType="INTEGER"/>
             <result property="workDate" column="work_date" jdbcType="DATE"/>
@@ -31,12 +31,11 @@
     </sql>
     <select id="listPage" resultType="com.ruoyi.staff.dto.StaffSchedulingDto">
         SELECT
-        t1.*,t2.staff_name as 'staff_name' ,t2.staff_no as 'staff_no'
+        t1.*
         FROM staff_scheduling t1
-        left join staff_join_leave_record t2 on t1.staff_id = t2.id
         where 1=1
         <if test="vo.staffName != null and vo.staffName != '' ">
-            AND t2.staff_name LIKE CONCAT('%', #{vo.staffName}, '%')
+            AND t1.staff_name LIKE CONCAT('%', #{vo.staffName}, '%')
         </if>
         <if test="vo.shiftType != null and vo.shiftType != '' ">
             AND t1.shift_type = #{vo.shiftType}
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index f77e62c..5c94ed9 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -180,6 +180,12 @@
 			#{id}
 		</foreach>
 	</select>
+	<select id="selectUserByNickName" resultType="com.ruoyi.project.system.domain.SysUser"
+			parameterType="java.lang.String">
+		<include refid="selectUserVo"/>
+		where u.nick_name = #{nickName} and u.del_flag = '0'
+		limit 1
+	</select>
 
 	<insert id="insertUser" parameterType="com.ruoyi.project.system.domain.SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(

--
Gitblit v1.9.3