From af96f51d29e2419d413f6171627841b6bb9a76bc Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期一, 22 六月 2026 17:18:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_pro_河南鹤壁_泽淇实业
---
src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java | 13 +
src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java | 245 +++++++++++++++++++++
src/main/resources/mapper/basic/CustomerMapper.xml | 70 +++--
src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java | 55 ----
src/main/resources/mapper/basic/SupplierManageMapper.xml | 120 ----------
src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml | 2
src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml | 2
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java | 49 ++++
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 34 ++-
src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java | 1
src/main/resources/application-sdtx.yml | 5
src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java | 1
src/main/java/com/ruoyi/RuoYiApplication.java | 4
13 files changed, 374 insertions(+), 227 deletions(-)
diff --git a/src/main/java/com/ruoyi/RuoYiApplication.java b/src/main/java/com/ruoyi/RuoYiApplication.java
index 97efe32..074bcd7 100644
--- a/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -7,11 +7,11 @@
/**
* 鍚姩绋嬪簭
- *
+ *
* @author ruoyi
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
-@EnableScheduling
+//@EnableScheduling
public class RuoYiApplication
{
public static void main(String[] args)
diff --git a/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java b/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
index f871b91..d29ac3b 100644
--- a/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
@@ -12,6 +12,7 @@
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import java.util.Map;
/**
* 瀹㈡埛妗fMapper鎺ュ彛
@@ -20,55 +21,7 @@
* @date 2025-05-07
*/
@Mapper
-public interface CustomerMapper extends BaseMapper<Customer>
-{
- /**
- * 鏌ヨ瀹㈡埛妗f
- *
- * @param id 瀹㈡埛妗f涓婚敭
- * @return 瀹㈡埛妗f
- */
- Customer selectCustomerById(Long id);
-
- /**
- * 鏌ヨ瀹㈡埛妗f鍒楄〃
- *
- * @param customer 瀹㈡埛妗f
- * @return 瀹㈡埛妗f闆嗗悎
- */
- List<Customer> selectCustomerList(Customer customer);
-
- /**
- * 鏂板瀹㈡埛妗f
- *
- * @param customer 瀹㈡埛妗f
- * @return 缁撴灉
- */
- int insertCustomer(Customer customer);
-
- /**
- * 淇敼瀹㈡埛妗f
- *
- * @param customer 瀹㈡埛妗f
- * @return 缁撴灉
- */
- int updateCustomer(Customer customer);
-
- /**
- * 鍒犻櫎瀹㈡埛妗f
- *
- * @param id 瀹㈡埛妗f涓婚敭
- * @return 缁撴灉
- */
- int deleteCustomerById(Long id);
-
- /**
- * 鎵归噺鍒犻櫎瀹㈡埛妗f
- *
- * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
- * @return 缁撴灉
- */
- int deleteCustomerByIds(Long[] ids);
+public interface CustomerMapper extends BaseMapper<Customer> {
IPage<CustomerVo> listPage(Page<CustomerDto> page, @Param("c") CustomerDto customer, @Param("loginUserId") Long loginUserId);
@@ -77,4 +30,8 @@
IPage<CustomerTransactionsVo> customewTransactions(Page page, @Param("customerName") String customerName);
IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, @Param("customerId") Long customerId);
+
+ List<Map<String, Object>> getShippedAmountByCustomerIds(@Param("customerIds") List<Long> customerIds);
+
+ List<Map<String, Object>> getShippedAmountBySalesLedgerIds(@Param("salesLedgerIds") List<Long> salesLedgerIds);
}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index 827e3a2..293566a 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -34,6 +34,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
+import java.math.BigDecimal;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@@ -383,12 +384,56 @@
@Override
public IPage<CustomerTransactionsVo> customewTransactions(Page page, String customerName) {
- return customerMapper.customewTransactions(page, customerName);
+ IPage<CustomerTransactionsVo> p = customerMapper.customewTransactions(page, customerName);
+ List<CustomerTransactionsVo> records = p.getRecords();
+ if (!CollectionUtils.isEmpty(records)) {
+ List<Long> customerIds = records.stream().map(CustomerTransactionsVo::getCustomerId).collect(Collectors.toList());
+ List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountByCustomerIds(customerIds);
+ Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+ for (Map<String, Object> map : shippedAmountList) {
+ if (map.get("outboundAmount") != null) {
+ shippedAmountMap.put(((Number) map.get("customerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+ }
+ }
+ for (CustomerTransactionsVo vo : records) {
+ BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getCustomerId(), BigDecimal.ZERO);
+ vo.setShippedAmount(outboundAmount);
+ BigDecimal contractAmounts = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+ BigDecimal unshippedAmount = contractAmounts.subtract(outboundAmount);
+ if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+ unshippedAmount = BigDecimal.ZERO;
+ }
+ vo.setUnshippedAmount(unshippedAmount);
+ }
+ }
+ return p;
}
@Override
public IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, Long customerId) {
- return customerMapper.customewTransactionsDetails(page, customerId);
+ IPage<CustomerTransactionsDetailsVo> p = customerMapper.customewTransactionsDetails(page, customerId);
+ List<CustomerTransactionsDetailsVo> records = p.getRecords();
+ if (!CollectionUtils.isEmpty(records)) {
+ List<Long> salesLedgerIds = records.stream().map(CustomerTransactionsDetailsVo::getSalesLedgerId).collect(Collectors.toList());
+ List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountBySalesLedgerIds(salesLedgerIds);
+ Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+ for (Map<String, Object> map : shippedAmountList) {
+ if (map.get("outboundAmount") != null) {
+ shippedAmountMap.put(((Number) map.get("salesLedgerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+ }
+ }
+ for (CustomerTransactionsDetailsVo vo : records) {
+ BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getSalesLedgerId(), BigDecimal.ZERO);
+ vo.setShippedAmount(outboundAmount);
+ BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount();
+ BigDecimal unshippedAmount = contractAmount.subtract(outboundAmount);
+ if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+ unshippedAmount = BigDecimal.ZERO;
+ }
+ vo.setUnshippedAmount(unshippedAmount);
+ }
+ }
+ return p;
}
/**
diff --git a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
index 613bde2..ec8bb26 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
@@ -16,32 +16,47 @@
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo;
import com.ruoyi.purchase.vo.SupplierTransactionsVo;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityUnqualified;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.stock.mapper.StockInRecordMapper;
+import com.ruoyi.stock.pojo.StockInRecord;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
-public class SupplierServiceImpl extends ServiceImpl<SupplierManageMapper,SupplierManage> implements ISupplierService {
+public class SupplierServiceImpl extends ServiceImpl<SupplierManageMapper, SupplierManage> implements ISupplierService {
private final SupplierManageMapper supplierMapper;
private final PurchaseLedgerMapper purchaseLedgerMapper;
+ private final SalesLedgerProductMapper salesLedgerProductMapper;
+ private final StockInRecordMapper stockInRecordMapper;
+ private final QualityInspectMapper qualityInspectMapper;
+ private final QualityUnqualifiedMapper qualityUnqualifiedMapper;
/**
* 渚涘簲鍟嗘柊澧�
+ *
* @param supplierManage
* @return
*/
@Override
public void saveSupplier(SupplierManage supplierManage) {
LambdaQueryWrapper<SupplierManage> supplierManageLambdaQueryWrapper = new LambdaQueryWrapper<>();
- supplierManageLambdaQueryWrapper.eq(SupplierManage::getSupplierName,supplierManage.getSupplierName());
+ supplierManageLambdaQueryWrapper.eq(SupplierManage::getSupplierName, supplierManage.getSupplierName());
if (supplierMapper.selectCount(supplierManageLambdaQueryWrapper) > 0) {
throw new RuntimeException("渚涘簲鍟嗗凡瀛樺湪");
}
@@ -50,6 +65,7 @@
/**
* 渚涘簲鍟嗗垹闄�
+ *
* @param ids
* @return
*/
@@ -67,6 +83,7 @@
/**
* 渚涘簲鍟嗚鎯�
+ *
* @param id
* @return
*/
@@ -77,6 +94,7 @@
/**
* 渚涘簲鍟嗕慨鏀�
+ *
* @param supplierManage
* @return
*/
@@ -87,17 +105,19 @@
/**
* 渚涘簲鍟嗗垎椤垫煡璇�
+ *
* @param page
* @param supplierManageDto
* @return
*/
@Override
public IPage<SupplierManage> supplierListPage(Page page, SupplierManageDto supplierManageDto) {
- return supplierMapper.supplierListPage(page,supplierManageDto);
+ return supplierMapper.supplierListPage(page, supplierManageDto);
}
/**
* 渚涘簲鍟嗗鍑�
+ *
* @param response
* @param supplierManageDto
*/
@@ -115,19 +135,19 @@
ExcelUtil<SupplierManageExcelDto> util = new ExcelUtil<SupplierManageExcelDto>(SupplierManageExcelDto.class);
List<SupplierManageExcelDto> list = util.importExcel(file.getInputStream());
ArrayList<SupplierManage> supplierManages = new ArrayList<>();
- list.stream().forEach(dto -> {
+ list.forEach(dto -> {
SupplierManage supplierManage = new SupplierManage();
- BeanUtils.copyProperties(dto,supplierManage);
+ BeanUtils.copyProperties(dto, supplierManage);
supplierManage.setMaintainTime(LocalDate.now());
Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
- supplierManage.setMaintainUserId(Integer.parseInt(userId+""));
+ supplierManage.setMaintainUserId(Integer.parseInt(userId + ""));
supplierManages.add(supplierManage);
});
this.saveOrUpdateBatch(supplierManages);
return true;
- }catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
}
return false;
@@ -135,11 +155,218 @@
@Override
public IPage<SupplierTransactionsVo> supplierTransactions(Page page, String supplierName) {
- return supplierMapper.supplierTransactions(page,supplierName);
+ IPage<SupplierTransactionsVo> plPage = supplierMapper.supplierTransactions(page, supplierName);
+ List<SupplierTransactionsVo> resultList = plPage.getRecords();
+ if (resultList.isEmpty()) {
+ return plPage;
+ }
+
+ List<Long> supplierIds = resultList.stream().map(SupplierTransactionsVo::getSupplierId).collect(Collectors.toList());
+
+ List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+ .in(PurchaseLedger::getSupplierId, supplierIds));
+
+ if (purchaseLedgers.isEmpty()) {
+ for (SupplierTransactionsVo vo : resultList) {
+ vo.setShippedAmount(BigDecimal.ZERO);
+ BigDecimal contractAmount = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+ vo.setUnshippedAmount(contractAmount);
+ }
+ return plPage;
+ }
+
+ List<Long> ledgerIds = purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList());
+
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+ .in(SalesLedgerProduct::getSalesLedgerId, ledgerIds)
+ .eq(SalesLedgerProduct::getType, 2));
+
+ // 涓嶈川妫�鐩存帴鍏ュ簱鐨� - 7
+ List<StockInRecord> directInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+ .eq(StockInRecord::getRecordType, "7")
+ .eq(StockInRecord::getApprovalStatus, 1)
+ .in(StockInRecord::getRecordId, ledgerIds));
+
+ // 閫氳繃璐ㄦ鍏ュ簱鐨�
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
+ .in(QualityInspect::getPurchaseLedgerId, ledgerIds));
+ List<Long> inspectIds = qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList());
+
+ // 璐ㄦ鍚堟牸鍏ュ簱 - 10
+ List<StockInRecord> qualifiedInboundRecords = new ArrayList<>();
+ List<QualityUnqualified> qualityUnqualifieds = new ArrayList<>();
+ if (!inspectIds.isEmpty()) {
+ qualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+ .eq(StockInRecord::getRecordType, "10")
+ .eq(StockInRecord::getApprovalStatus, 1)
+ .in(StockInRecord::getRecordId, inspectIds));
+
+ qualityUnqualifieds = qualityUnqualifiedMapper.selectList(new LambdaQueryWrapper<QualityUnqualified>()
+ .in(QualityUnqualified::getInspectId, inspectIds));
+ }
+ List<Long> unqualifiedIds = qualityUnqualifieds.stream().map(QualityUnqualified::getId).collect(Collectors.toList());
+
+ // 璐ㄦ涓嶅悎鏍煎叆搴� - 11
+ List<StockInRecord> unqualifiedInboundRecords = new ArrayList<>();
+ if (!unqualifiedIds.isEmpty()) {
+ unqualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+ .eq(StockInRecord::getRecordType, "11")
+ .eq(StockInRecord::getApprovalStatus, 1)
+ .in(StockInRecord::getRecordId, unqualifiedIds));
+ }
+
+ for (SupplierTransactionsVo vo : resultList) {
+ BigDecimal shippedAmount = BigDecimal.ZERO;
+
+ List<PurchaseLedger> currentLedgers = purchaseLedgers.stream().filter(pl -> pl.getSupplierId().equals(vo.getSupplierId())).toList();
+ for (PurchaseLedger ledger : currentLedgers) {
+ Long ledgerId = ledger.getId();
+
+ List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(ledgerId)).toList();
+ for (StockInRecord sir : currentDirectRecords) {
+ List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(ledgerId)).toList();
+ for (SalesLedgerProduct slp : currentProducts) {
+ if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) {
+ shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice()));
+ }
+ }
+ }
+
+ List<QualityInspect> currentInspects = qualityInspects.stream().filter(q -> q.getPurchaseLedgerId().equals(ledgerId)).toList();
+ for (QualityInspect inspect : currentInspects) {
+ List<StockInRecord> currentQualifiedRecords = qualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(inspect.getId())).toList();
+ for (StockInRecord sir : currentQualifiedRecords) {
+ BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, ledgerId, sir.getProductModelId());
+ if (sir.getStockInNum() != null && minPrice != null) {
+ shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+ }
+ }
+
+ List<QualityUnqualified> currentUnqualifieds = qualityUnqualifieds.stream().filter(q -> q.getInspectId().equals(inspect.getId())).toList();
+ for (QualityUnqualified unqualified : currentUnqualifieds) {
+ List<StockInRecord> currentUnqualifiedRecords = unqualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(unqualified.getId())).toList();
+ for (StockInRecord sir : currentUnqualifiedRecords) {
+ BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, ledgerId, sir.getProductModelId());
+ if (sir.getStockInNum() != null && minPrice != null) {
+ shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+ }
+ }
+ }
+ }
+ }
+
+ BigDecimal contractAmount = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+ if (shippedAmount.subtract(contractAmount).compareTo(BigDecimal.ZERO) > 0) {
+ shippedAmount = contractAmount;
+ }
+ vo.setShippedAmount(shippedAmount);
+ vo.setUnshippedAmount(contractAmount.subtract(shippedAmount));
+ }
+
+ return plPage;
}
@Override
public IPage<SupplierTransactionsDetailsVo> supplierTransactionsDetails(Page page, Long supplierId) {
- return supplierMapper.supplierTransactionsDetails(page,supplierId);
+ IPage<SupplierTransactionsDetailsVo> plPage = supplierMapper.supplierTransactionsDetails(page, supplierId);
+
+ List<SupplierTransactionsDetailsVo> resultList = plPage.getRecords();
+ if (resultList.isEmpty()) {
+ return plPage;
+ }
+
+ List<Long> ledgerIds = resultList.stream().map(SupplierTransactionsDetailsVo::getPurchaseLedgerId).collect(Collectors.toList());
+
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+ .in(SalesLedgerProduct::getSalesLedgerId, ledgerIds)
+ .eq(SalesLedgerProduct::getType, 2));
+
+ // 涓嶈川妫�鐩存帴鍏ュ簱鐨� - 7
+ List<StockInRecord> directInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+ .eq(StockInRecord::getRecordType, "7")
+ .eq(StockInRecord::getApprovalStatus, 1)
+ .in(StockInRecord::getRecordId, ledgerIds));
+
+ // 閫氳繃璐ㄦ鍏ュ簱鐨�
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
+ .in(QualityInspect::getPurchaseLedgerId, ledgerIds));
+ List<Long> inspectIds = qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList());
+
+ // 璐ㄦ鍚堟牸鍏ュ簱 - 10
+ List<StockInRecord> qualifiedInboundRecords = new ArrayList<>();
+ List<QualityUnqualified> qualityUnqualifieds = new ArrayList<>();
+ if (!inspectIds.isEmpty()) {
+ qualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+ .eq(StockInRecord::getRecordType, "10")
+ .eq(StockInRecord::getApprovalStatus, 1)
+ .in(StockInRecord::getRecordId, inspectIds));
+
+ qualityUnqualifieds = qualityUnqualifiedMapper.selectList(new LambdaQueryWrapper<QualityUnqualified>()
+ .in(QualityUnqualified::getInspectId, inspectIds));
+ }
+ List<Long> unqualifiedIds = qualityUnqualifieds.stream().map(QualityUnqualified::getId).collect(Collectors.toList());
+
+ // 璐ㄦ涓嶅悎鏍煎叆搴� - 11
+ List<StockInRecord> unqualifiedInboundRecords = new ArrayList<>();
+ if (!unqualifiedIds.isEmpty()) {
+ unqualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+ .eq(StockInRecord::getRecordType, "11")
+ .eq(StockInRecord::getApprovalStatus, 1)
+ .in(StockInRecord::getRecordId, unqualifiedIds));
+ }
+
+ for (SupplierTransactionsDetailsVo vo : resultList) {
+ BigDecimal shippedAmount = BigDecimal.ZERO;
+
+ List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(vo.getPurchaseLedgerId())).toList();
+ for (StockInRecord sir : currentDirectRecords) {
+ List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(vo.getPurchaseLedgerId())).toList();
+ for (SalesLedgerProduct slp : currentProducts) {
+ if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) {
+ shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice()));
+ }
+ }
+ }
+
+ List<QualityInspect> currentInspects = qualityInspects.stream().filter(q -> q.getPurchaseLedgerId().equals(vo.getPurchaseLedgerId())).toList();
+ for (QualityInspect inspect : currentInspects) {
+ List<StockInRecord> currentQualifiedRecords = qualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(inspect.getId())).toList();
+ for (StockInRecord sir : currentQualifiedRecords) {
+ BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, vo.getPurchaseLedgerId(), sir.getProductModelId());
+ if (sir.getStockInNum() != null && minPrice != null) {
+ shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+ }
+ }
+
+ List<QualityUnqualified> currentUnqualifieds = qualityUnqualifieds.stream().filter(q -> q.getInspectId().equals(inspect.getId())).toList();
+ for (QualityUnqualified unqualified : currentUnqualifieds) {
+ List<StockInRecord> currentUnqualifiedRecords = unqualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(unqualified.getId())).toList();
+ for (StockInRecord sir : currentUnqualifiedRecords) {
+ BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, vo.getPurchaseLedgerId(), sir.getProductModelId());
+ if (sir.getStockInNum() != null && minPrice != null) {
+ shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+ }
+ }
+ }
+ }
+
+ BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount();
+ if (shippedAmount.subtract(contractAmount).compareTo(BigDecimal.ZERO) > 0) {
+ shippedAmount = contractAmount;
+ }
+ vo.setShippedAmount(shippedAmount);
+ vo.setUnshippedAmount(contractAmount.subtract(shippedAmount));
+ }
+
+ return plPage;
+ }
+
+ private BigDecimal getMinTaxInclusiveUnitPrice(List<SalesLedgerProduct> allSlp, Long salesLedgerId, Long productModelId) {
+ return allSlp.stream()
+ .filter(s -> s.getSalesLedgerId().equals(salesLedgerId) && s.getProductModelId() != null && s.getProductModelId().equals(productModelId))
+ .map(SalesLedgerProduct::getTaxInclusiveUnitPrice)
+ .filter(java.util.Objects::nonNull)
+ .min(BigDecimal::compareTo)
+ .orElse(null);
}
}
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 4c00873..46c6f58 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -61,6 +61,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
@@ -497,9 +498,20 @@
@Override
public ProductionProgressDto productionProgress() {
+ LocalDateTime now = LocalDateTime.now();
+
+ LocalDateTime startOfMonth = now
+ .with(TemporalAdjusters.firstDayOfMonth())
+ .with(LocalTime.MIN);
+
+ LocalDateTime endOfMonth = now
+ .with(TemporalAdjusters.lastDayOfMonth())
+ .with(LocalTime.MAX);
+
+
ProductionProgressDto productionProgressDto = new ProductionProgressDto();
- List<ProductionProgressOrderDto> orderDetails = productionOrderMapper.selectProgressOrders(
- LocalDateTime.now().minusMonths(1), LocalDateTime.now());
+ List<ProductionProgressOrderDto> orderDetails = productionOrderMapper
+ .selectProgressOrders(startOfMonth, endOfMonth);
productionProgressDto.setCompletedOrderDetails(orderDetails);
long totalCount = orderDetails.size();
long count = orderDetails.stream().filter(
@@ -519,7 +531,7 @@
public ProductionTurnoverDto workInProcessTurnover() {
ProductionTurnoverDto productionTurnoverDto = new ProductionTurnoverDto();
List<ProductionTaskStatisticsDto> taskList = productionOperationTaskMapper
- .selectTaskStatisticsByDate(LocalDate.now().minusMonths(1), LocalDate.now());
+ .selectTaskStatisticsByDate(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()), LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()));
long sum = taskList.stream()
.filter(task -> defaultDecimal(task.getPlanQuantity()).compareTo(defaultDecimal(task.getCompleteQuantity())) > 0)
.map(ProductionTaskStatisticsDto::getPlanQuantity)
@@ -1625,16 +1637,16 @@
@Override
public List<MapDto> orderCount() {
LocalDate now = LocalDate.now();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- String currentStart = now.withDayOfMonth(1).atStartOfDay()
- .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- String currentEnd = now.atTime(LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+ LocalDateTime startDateTime = now.with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay();
+ LocalDateTime endDateTime = now.with(TemporalAdjusters.lastDayOfMonth()).atTime(LocalTime.MAX);
- LocalDate lastMonthDate = now.minusMonths(1);
- String lastStart = lastMonthDate.withDayOfMonth(1).atStartOfDay()
- .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- String lastEnd = lastMonthDate.withDayOfMonth(lastMonthDate.lengthOfMonth()).atTime(LocalTime.MAX)
- .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+ String currentStart = startDateTime.format(dateTimeFormatter);
+ String currentEnd = endDateTime.format(dateTimeFormatter);
+
+ String lastStart = startDateTime.minusMonths(1).format(dateTimeFormatter);
+ String lastEnd = endDateTime.format(dateTimeFormatter);
int currentCreated = productionOrderMapper.countCreated(currentStart, currentEnd);
int lastCreated = productionOrderMapper.countCreated(lastStart, lastEnd);
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java b/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
index 36a8290..cb4c4d9 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
@@ -14,6 +14,7 @@
private String month; // 鏈堜唤锛堝2024-12锛�
private Integer orderCount; // 璁㈠崟鏁�
private BigDecimal salesAmount; // 閿�鍞
+ private BigDecimal productQuantity; // 浜у搧閿�鍞暟閲�
private BigDecimal shipRate;
}
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
index 5518290..0270328 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -66,6 +66,7 @@
"DATE_FORMAT(sl.entry_date, '%Y-%m') AS month, " +
"COUNT(DISTINCT sl.id) AS order_count, " + // 鎬昏鍗曟暟
"SUM(slp.tax_inclusive_total_price) AS sales_amount, " + // 閿�鍞
+ "SUM(IFNULL(slp.quantity, 0)) AS product_quantity, " + // 浜у搧閿�鍞暟閲�
// 鍙戣揣鐜� = 鍙戣揣璁㈠崟鏁� * 100 / 鎬昏鍗曟暟锛堜繚鐣�2浣嶅皬鏁帮紝閬垮厤闄�0鎶ラ敊锛�
"ROUND(IF(COUNT(DISTINCT sl.id) = 0, 0, " +
"SUM(CASE WHEN slp.approve_status = 2 THEN 1 ELSE 0 END) / COUNT(DISTINCT sl.id) * 100), 2) AS ship_rate " +
diff --git a/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
index 942e089..2ceec4e 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
@@ -51,9 +51,16 @@
map.put("total", new BigDecimal(totalOrders));
map.put("shipRate", "0.00%");
- // 鍙戣揣鐜�
+ // 浜у搧閿�鍞暟閲�
List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
.eq(SalesLedgerProduct::getType, 1));
+ BigDecimal productQuantityTotal = CollectionUtils.isEmpty(products) ? BigDecimal.ZERO :
+ products.stream()
+ .map(SalesLedgerProduct::getQuantity)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ map.put("productQuantityTotal", productQuantityTotal);
+
if (CollectionUtils.isEmpty(products)) {
return AjaxResult.success(map);
}
@@ -116,6 +123,7 @@
List<String> dateList = new ArrayList<>();
List<BigDecimal> orderCountList = new ArrayList<>();
List<BigDecimal> salesAmountList = new ArrayList<>();
+ List<BigDecimal> productQuantityList = new ArrayList<>();
List<BigDecimal> shippingRateList = new ArrayList<>();
Calendar tempCalendar = Calendar.getInstance();
@@ -136,10 +144,12 @@
if (dto != null) {
orderCountList.add(new BigDecimal(dto.getOrderCount()));
salesAmountList.add(dto.getSalesAmount() != null ? dto.getSalesAmount() : BigDecimal.ZERO);
+ productQuantityList.add(dto.getProductQuantity() != null ? dto.getProductQuantity() : BigDecimal.ZERO);
shippingRateList.add(new BigDecimal(String.valueOf(dto.getShipRate())));
} else {
orderCountList.add(BigDecimal.ZERO);
salesAmountList.add(BigDecimal.ZERO);
+ productQuantityList.add(BigDecimal.ZERO);
shippingRateList.add(BigDecimal.ZERO);
}
@@ -150,6 +160,7 @@
map.put("dateList", dateList);
map.put("orderCountList", orderCountList);
map.put("salesAmountList", salesAmountList);
+ map.put("productQuantityList", productQuantityList);
map.put("shippingRateList", shippingRateList);
return AjaxResult.success(map);
}
diff --git a/src/main/resources/application-sdtx.yml b/src/main/resources/application-sdtx.yml
index ceff5df..8a4eae5 100644
--- a/src/main/resources/application-sdtx.yml
+++ b/src/main/resources/application-sdtx.yml
@@ -1,4 +1,3 @@
-
# 椤圭洰鐩稿叧閰嶇疆
ruoyi:
# 鍚嶇О
@@ -261,8 +260,8 @@
temp-dir: /javaWork/product-inventory-management/file/temp/uploads # 涓存椂鐩綍 鍚庢湡鍒犻櫎
upload-dir: /javaWork/product-inventory-management/file/prod/uploads # 姝e紡鐩綍 鍚庢湡鍒犻櫎
path: /javaWork/product-inventory-management/file/path/uploads # 涓婁紶鐩綍
- urlPrefix: /common # 閾炬帴鍓嶇紑
- domain: http://127.0.0.1:7003 # 鍩熷悕鍓嶇紑
+ urlPrefix: /prod-api/common # 閾炬帴鍓嶇紑
+ domain: http://36.213.156.184:9001 # 鍩熷悕鍓嶇紑
expired: 120 # 杩囨湡鏃堕棿(鍗曚綅:鍒嗛挓)
useLimit: 10 # 浣跨敤娆℃暟
compress: true # 鏄惁鍘嬬缉
diff --git a/src/main/resources/mapper/basic/CustomerMapper.xml b/src/main/resources/mapper/basic/CustomerMapper.xml
index e9683da..46b7bf7 100644
--- a/src/main/resources/mapper/basic/CustomerMapper.xml
+++ b/src/main/resources/mapper/basic/CustomerMapper.xml
@@ -112,23 +112,8 @@
<select id="customewTransactions" resultType="com.ruoyi.sales.vo.CustomerTransactionsVo">
select T1.customer_id,
c.customer_name,
- T1.contractAmounts,
- IFNULL(T3.outboundAmount, 0) AS shippedAmount,
- GREATEST(T1.contractAmounts - IFNULL(T3.outboundAmount, 0), 0) AS unshippedAmount
+ T1.contractAmounts
from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger group by customer_id) T1
- left join (
- SELECT
- sl.customer_id,
- sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
- FROM stock_out_record sor
- LEFT join shipping_info s on sor.record_id = s.id
- LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
- LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
- WHERE sor.record_type='13'
- and sor.approval_status=1
- and slp.type = 1
- group by sl.customer_id
- ) T3 on T3.customer_id=T1.customer_id
left join customer c on T1.customer_id = c.id
<where>
<if test="customerName!=null and customerName!=''">
@@ -142,24 +127,45 @@
select sl.id salesLedgerId,
sl.sales_contract_no,
sl.execution_date,
- sl.contract_amount,
- IFNULL(T2.outboundAmount, 0) AS shippedAmount,
- GREATEST(sl.contract_amount - IFNULL(T2.outboundAmount, 0), 0) AS unshippedAmount
+ sl.contract_amount
from sales_ledger sl
- left join (
- SELECT
- sl.id,
- sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
- FROM stock_out_record sor
- left join shipping_info s on sor.record_id = s.id
- LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
- LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
- WHERE sor.record_type='13'
- and sor.approval_status=1
- and slp.type = 1
- group by sl.id
- )T2 on T2.id = sl.id
where sl.customer_id = #{customerId}
order by sl.execution_date
</select>
+
+ <select id="getShippedAmountByCustomerIds" resultType="java.util.Map">
+ SELECT
+ sl.customer_id as customerId,
+ sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
+ FROM stock_out_record sor
+ LEFT join shipping_info s on sor.record_id = s.id
+ LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+ LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
+ WHERE sor.record_type='13'
+ and sor.approval_status=1
+ and slp.type = 1
+ and sl.customer_id IN
+ <foreach collection="customerIds" item="customerId" open="(" separator="," close=")">
+ #{customerId}
+ </foreach>
+ group by sl.customer_id
+ </select>
+
+ <select id="getShippedAmountBySalesLedgerIds" resultType="java.util.Map">
+ SELECT
+ sl.id as salesLedgerId,
+ sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
+ FROM stock_out_record sor
+ LEFT join shipping_info s on sor.record_id = s.id
+ LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+ LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
+ WHERE sor.record_type='13'
+ and sor.approval_status=1
+ and slp.type = 1
+ and sl.id IN
+ <foreach collection="salesLedgerIds" item="id" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ group by sl.id
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/basic/SupplierManageMapper.xml b/src/main/resources/mapper/basic/SupplierManageMapper.xml
index 15567ad..93bd608 100644
--- a/src/main/resources/mapper/basic/SupplierManageMapper.xml
+++ b/src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -73,66 +73,8 @@
<select id="supplierTransactions" resultType="com.ruoyi.purchase.vo.SupplierTransactionsVo">
SELECT T1.supplier_id,
sm.supplier_name,
- T1.contractAmounts,
- IFNULL(T3.InboundAmount, 0) AS shippedAmount,
- T1.contractAmounts - IFNULL(T3.InboundAmount, 0) AS unshippedAmount
+ T1.contractAmounts
FROM (SELECT supplier_id, SUM(contract_amount) AS contractAmounts FROM purchase_ledger GROUP BY supplier_id) T1
- LEFT JOIN (
- SELECT t.supplier_id,
- SUM(t.inbound_amount) AS InboundAmount
- FROM (
- SELECT sir.stock_in_num * slp.tax_inclusive_unit_price AS inbound_amount, pl.supplier_id
- FROM stock_in_record sir
- INNER JOIN sales_ledger_product slp ON slp.sales_ledger_id = sir.record_id
- INNER JOIN purchase_ledger pl ON pl.id = slp.sales_ledger_id
- WHERE sir.approval_status = 1 AND sir.record_type = 7 AND slp.type = 2
- UNION ALL
- SELECT
- sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
- pl2.supplier_id
- FROM stock_in_record sir
- INNER JOIN quality_inspect qi
- ON qi.id = sir.record_id
- INNER JOIN purchase_ledger pl2
- ON pl2.id = qi.purchase_ledger_id
- INNER JOIN (
- SELECT
- sales_ledger_id,
- product_model_id,
- MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
- FROM sales_ledger_product
- WHERE type = 2
- GROUP BY sales_ledger_id, product_model_id
- ) slp_agg
- ON slp_agg.sales_ledger_id = pl2.id
- AND slp_agg.product_model_id = sir.product_model_id
- WHERE sir.approval_status = 1 AND sir.record_type = 10
- UNION ALL
- SELECT sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
- pl2.supplier_id
- FROM stock_in_record sir
- INNER JOIN quality_unqualified qu
- ON qu.id = sir.record_id
- INNER JOIN quality_inspect qi
- ON qi.id = qu.inspect_id
- INNER JOIN purchase_ledger pl2
- ON pl2.id = qi.purchase_ledger_id
- INNER JOIN (
- SELECT
- sales_ledger_id,
- product_model_id,
- MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
- FROM sales_ledger_product
- WHERE type = 2
- GROUP BY sales_ledger_id, product_model_id
- ) slp_agg
- ON slp_agg.sales_ledger_id = pl2.id
- AND slp_agg.product_model_id = sir.product_model_id
- WHERE sir.approval_status = 1
- AND sir.record_type = 11
- ) t
- GROUP BY t.supplier_id
- ) T3 ON T3.supplier_id = T1.supplier_id
LEFT JOIN supplier_manage sm ON T1.supplier_id = sm.id
<where>
<if test="supplierName!=null and supplierName!=''">
@@ -146,66 +88,10 @@
SELECT pl.id purchaseLedgerId,
pl.purchase_contract_number,
pl.execution_date,
- pl.contract_amount,
- IFNULL(T2.InboundAmount, 0) AS shippedAmount,
- pl.contract_amount - IFNULL(T2.InboundAmount, 0) AS unshippedAmount
+ pl.contract_amount
FROM purchase_ledger pl
- LEFT JOIN (
- SELECT t.sales_ledger_id,
- SUM(t.inbound_amount) AS InboundAmount
- FROM (
- SELECT sir.stock_in_num * slp.tax_inclusive_unit_price AS inbound_amount, slp.sales_ledger_id
- FROM stock_in_record sir
- INNER JOIN sales_ledger_product slp ON slp.sales_ledger_id = sir.record_id
- WHERE sir.approval_status = 1 AND sir.record_type = 7 AND slp.type = 2
- UNION ALL
- SELECT
- sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
- slp_agg.sales_ledger_id
- FROM stock_in_record sir
- INNER JOIN quality_inspect qi
- ON qi.id = sir.record_id
- INNER JOIN purchase_ledger pl2
- ON pl2.id = qi.purchase_ledger_id
- INNER JOIN (
- SELECT
- sales_ledger_id,
- product_model_id,
- MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
- FROM sales_ledger_product
- WHERE type = 2
- GROUP BY sales_ledger_id, product_model_id
- ) slp_agg
- ON slp_agg.sales_ledger_id = pl2.id
- AND slp_agg.product_model_id = sir.product_model_id
- WHERE sir.approval_status = 1 AND sir.record_type = 10
- UNION ALL
- SELECT sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
- slp_agg.sales_ledger_id
- FROM stock_in_record sir
- INNER JOIN quality_unqualified qu
- ON qu.id = sir.record_id
- INNER JOIN quality_inspect qi
- ON qi.id = qu.inspect_id
- INNER JOIN purchase_ledger pl2
- ON pl2.id = qi.purchase_ledger_id
- INNER JOIN (
- SELECT
- sales_ledger_id,
- product_model_id,
- MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
- FROM sales_ledger_product
- WHERE type = 2
- GROUP BY sales_ledger_id, product_model_id
- ) slp_agg
- ON slp_agg.sales_ledger_id = pl2.id
- AND slp_agg.product_model_id = sir.product_model_id
- WHERE sir.approval_status = 1
- AND sir.record_type = 11
- ) t
- GROUP BY t.sales_ledger_id
- ) T2 ON T2.sales_ledger_id = pl.id
WHERE pl.supplier_id = #{supplierId}
</select>
+
</mapper>
diff --git a/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml b/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml
index 08cf865..dcb620a 100644
--- a/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml
+++ b/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml
@@ -3,7 +3,7 @@
<mapper namespace="com.ruoyi.collaborativeApproval.mapper.NoticeMapper">
<select id="listPage" resultType="com.ruoyi.collaborativeApproval.dto.NoticeDTO">
- select n.*, su.user_name as create_user_name
+ select n.*, su.nick_name as create_user_name
from notice n
left join sys_user su on n.create_user = su.user_id
<where>
diff --git a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
index 49380aa..df2d565 100644
--- a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
+++ b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
@@ -43,7 +43,9 @@
<if test="qualityUnqualified.entryDateEnd != null and qualityUnqualified.entryDateEnd != '' ">
AND check_time <= DATE_FORMAT(#{qualityUnqualified.entryDateEnd},'%Y-%m-%d')
</if>
+ order by qu.check_time desc
</select>
+
<select id="qualityUnqualifiedExport" resultType="com.ruoyi.quality.pojo.QualityUnqualified">
SELECT
*
--
Gitblit v1.9.3