From eba011c9c3a25e73763eb420e9c3275cc1112bab Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 20 一月 2026 14:05:31 +0800
Subject: [PATCH] yys 1.回款提醒,人力资源优化

---
 src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java                              |    7 +++
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                           |    2 
 src/main/java/com/ruoyi/home/controller/HomeController.java                     |    6 +++
 src/main/java/com/ruoyi/home/service/HomeService.java                           |    2 +
 src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java |   10 +++--
 src/main/resources/mapper/sales/ReceiptPaymentMapper.xml                        |    5 ++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java          |    8 +++-
 src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java       |    2 +
 src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java                        |    7 +++
 src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java  |    9 +++-
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java                  |   17 ++++++++
 11 files changed, 66 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
index d0af0b5..1a32b8a 100644
--- a/src/main/java/com/ruoyi/home/controller/HomeController.java
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -77,5 +77,11 @@
         return AjaxResult.success(statisticsReceivablePayable);
     }
 
+    @ApiOperation("瓒呰繃15澶╁緟鍥炴鎻愮ず")
+    @GetMapping("/overdueReceivable")
+    public AjaxResult overdueReceivable() {
+        return AjaxResult.success(homeService.overdueReceivable());
+    }
+
 
 }
diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java
index 1902488..05b6e1a 100644
--- a/src/main/java/com/ruoyi/home/service/HomeService.java
+++ b/src/main/java/com/ruoyi/home/service/HomeService.java
@@ -26,4 +26,6 @@
     List<ApproveProcess> todos() throws ParseException;
 
     StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type);
+
+    Long overdueReceivable();
 }
diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index ad6ca2f..0fc9ba9 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -1,6 +1,8 @@
 package com.ruoyi.home.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.ruoyi.approve.mapper.ApproveProcessMapper;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -22,12 +24,14 @@
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.dto.ReceiptPaymentDto;
 import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.pojo.ReceiptPayment;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.service.impl.ReceiptPaymentServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -404,4 +408,17 @@
 
         return statisticsReceivablePayableDto;
     }
+
+    @Autowired
+    private ReceiptPaymentServiceImpl receiptPaymentService;
+
+    @Override
+    public Long overdueReceivable() {
+        // 閫氳繃寮�绁ㄦ棩鏈熻秴杩�15澶╃殑鏈洖娆炬彁绀�
+        ReceiptPaymentDto receiptPaymentDto = new ReceiptPaymentDto();
+        receiptPaymentDto.setTimeOut(true);
+        receiptPaymentDto.setStatus(false);
+        IPage<ReceiptPaymentDto> receiptPaymentDtoIPage = receiptPaymentService.bindInvoiceNoRegPage(new Page<>(-1, -1), receiptPaymentDto);
+        return receiptPaymentDtoIPage.getTotal();
+    }
 }
diff --git a/src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java b/src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java
index 71f1b5d..c96d9fc 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PaymentRegistrationController.java
@@ -14,6 +14,7 @@
 import com.ruoyi.purchase.pojo.PaymentRegistration;
 import com.ruoyi.purchase.service.IPaymentRegistrationService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -69,8 +70,12 @@
      */
     @Log(title = "浠樻鐧昏", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody PaymentRegistration paymentRegistration) {
-        return toAjax(paymentRegistrationService.insertPaymentRegistration(paymentRegistration));
+    public AjaxResult add(@RequestBody List<PaymentRegistration> paymentRegistration) {
+        if(CollectionUtils.isEmpty(paymentRegistration)) return error("璇烽�夋嫨浠樻鐧昏");
+        for (PaymentRegistration registration : paymentRegistration) {
+            paymentRegistrationService.insertPaymentRegistration(registration);
+        }
+        return toAjax(1);
     }
 
     /**
diff --git a/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java b/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java
index 5bbf31f..dd55f7d 100644
--- a/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java
@@ -15,6 +15,9 @@
 @Data
 public class ReceiptPaymentDto extends ReceiptPayment {
 
+    @ApiModelProperty(value = "true:鏌ヨ瓒呰繃鍗佷簲澶╃殑鏈洖娆捐褰�")
+    private Boolean timeOut;
+
     @ApiModelProperty(value = "瀹㈡埛鍚堝悓鍙�")
     @Excel(name = "瀹㈡埛鍚堝悓鍙�")
     private String customerContractNo;
@@ -70,6 +73,10 @@
     @Excel(name = "浜у搧澶х被")
     private String productCategory;
 
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    @Excel(name = "瑙勬牸鍨嬪彿")
+    private String specificationModel;
+
     @ApiModelProperty(value = "鍥炴閲戦")
     @Excel(name = "鍥炴閲戦")
     private BigDecimal receiptPaymentAmountTotal;
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index 0874b3e..c4379c2 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -22,7 +22,7 @@
     private String productCategory;
     private Set<Long> ids;  //
     /**
-     * 鏄惁寮�绁� 1-鍚� 2-鏄�
+     * 鏄惁寮�绁� 2-鍚� 1-鏄�
      */
     private Integer isInvoice;
     @JsonFormat(pattern = "yyyy-MM-dd")
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index e79c836..2754b09 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -540,8 +540,10 @@
         if (!insertList.isEmpty()) {
             for (SalesLedgerProduct salesLedgerProduct : insertList) {
                 salesLedgerProduct.setType(type);
-                salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
-                salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
+                salesLedgerProduct
+                        .setNoInvoiceNum(salesLedgerDto.getIsInvoice().equals(2) ? BigDecimal.ZERO :salesLedgerProduct.getQuantity());
+                salesLedgerProduct
+                        .setNoInvoiceAmount(salesLedgerDto.getIsInvoice().equals(2) ? BigDecimal.ZERO : salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProductMapper.insert(salesLedgerProduct);
             }
             if (salesLedgerDto.getIsInvoice().equals(2)) {
@@ -549,6 +551,8 @@
                 for (SalesLedgerProduct productDatum : insertList) {
                     productDatum.setCurrentInvoiceAmount(productDatum.getTaxInclusiveTotalPrice());
                     productDatum.setCurrentInvoiceNum(productDatum.getQuantity());
+                    productDatum.setInvoiceNum(productDatum.getQuantity());
+                    productDatum.setInvoiceAmount(productDatum.getTaxInclusiveTotalPrice());
                 }
                 salesLedgerDto.setId(salesLedgerId);
                 salesLedgerDto.setIssueDate(LocalDate.now());
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
index 058513a..a7a7ab5 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -11,6 +11,7 @@
 import com.ruoyi.approve.vo.ApproveProcessVO;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.sales.dto.SalesQuotationDto;
@@ -100,6 +101,7 @@
 
     @Override
     public BigDecimal detail(String type, String productName, String specification) {
+        if(StringUtils.isEmpty(type)) return null;
         SalesQuotationProduct salesQuotationProduct = salesQuotationProductMapper.selectOne(new LambdaQueryWrapper<SalesQuotationProduct>()
                 .eq(SalesQuotationProduct::getProduct, productName)
                 .eq(SalesQuotationProduct::getSpecification, specification)
diff --git a/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java b/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
index dc17ed2..56908a7 100644
--- a/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
+++ b/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
@@ -117,6 +117,13 @@
     private String contractTerm;
 
     /**
+     * 鍚堝悓寮�濮嬫棩鏈�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鍚堝悓寮�濮嬫棩鏈�", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date contractStartTime;
+
+    /**
      * 鍚堝悓鍒版湡鏃ユ湡
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
index f82ecc8..d2e82fd 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
@@ -156,10 +156,12 @@
             StaffOnJob job = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery()
                     .eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo())).get(0);
             //濡傛灉鏇存敼鐨勫悎鍚屽埌鏈熸椂闂存洿涔呭垯鏇存柊,濡傛灉娌℃湁灏变笉鐢ㄦ洿鏂�
-            if (staffJoinLeaveRecord.getContractEndTime().compareTo(job.getContractExpireTime())>0) {
-                BeanUtils.copyProperties(staffJoinLeaveRecord,job,ignoreProperties);
-                staffOnJobMapper.updateById(job);
-            }
+//            if (staffJoinLeaveRecord.getContractEndTime().compareTo(job.getContractExpireTime())>0) {
+//                BeanUtils.copyProperties(staffJoinLeaveRecord,job,ignoreProperties);
+//                staffOnJobMapper.updateById(job);
+//            }
+            BeanUtils.copyProperties(staffJoinLeaveRecord,job,ignoreProperties);
+            staffOnJobMapper.updateById(job);
         }else {
             /*绂昏亴*/
             //绂昏亴鐨勭紪杈戜笉浼氬奖鍝嶅湪鑱岃〃
diff --git a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
index a52038b..28ddd02 100644
--- a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
+++ b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -78,6 +78,7 @@
         T3.customer_name,
         T4.invoiceFileName,
         T5.product_category,
+        T5.specification_model,
         IFNULL(T6.receipt_payment_amount_total ,0) AS receipt_payment_amount_total,
         (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total ,0)) AS no_receipt_amount
         FROM invoice_ledger T1
@@ -113,6 +114,10 @@
             <if test="req.invoiceDateEnd != null and req.invoiceDateEnd != '' ">
                 AND  T1.invoice_date &lt;= DATE_FORMAT(#{req.invoiceDateEnd},'%Y-%m-%d')
             </if>
+            <if test="req.timeOut != null and req.timeOut">
+                AND T1.invoice_date &lt; DATE_SUB(CURDATE(), INTERVAL 15 DAY)
+                AND (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total ,0)) > 0
+            </if>
         </where>
         ORDER BY T2.create_time DESC
     </select>

--
Gitblit v1.9.3