From 4ed6929b3c8e8d12b64dade132ffd8023cbb73b3 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 27 一月 2026 17:29:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New
---
src/main/java/com/ruoyi/stock/pojo/StockInventory.java | 10
src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java | 15
src/main/java/com/ruoyi/stock/service/StockInventoryService.java | 6
src/main/java/com/ruoyi/home/controller/HomeController.java | 46 ++
src/main/java/com/ruoyi/home/dto/CustomerRevenueAnalysisDto.java | 19 +
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 3
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 445 ++++++++++++++++++++++++-
src/main/java/com/ruoyi/stock/controller/StockInRecordController.java | 1
src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java | 36 ++
src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java | 2
src/main/java/com/ruoyi/home/dto/ProductCategoryDistributionDto.java | 49 ++
src/main/resources/mapper/stock/StockUninventoryMapper.xml | 22
src/main/java/com/ruoyi/home/dto/HomeSummaryDto.java | 31 +
src/main/java/com/ruoyi/stock/service/StockUninventoryService.java | 7
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 38 ++
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java | 2
src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java | 2
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 6
src/main/java/com/ruoyi/home/dto/DeptStaffDistributionDto.java | 22 +
src/main/resources/mapper/stock/StockInventoryMapper.xml | 48 +
src/main/java/com/ruoyi/home/dto/CustomerContributionRankingDto.java | 21 +
src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java | 4
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java | 2
src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java | 6
src/main/java/com/ruoyi/home/dto/SupplierPurchaseRankingDto.java | 21 +
src/main/java/com/ruoyi/stock/controller/StockInventoryController.java | 13
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java | 19
src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java | 1
src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java | 11
src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java | 2
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | 36 +
src/main/java/com/ruoyi/home/service/HomeService.java | 12
src/main/java/com/ruoyi/stock/pojo/StockUninventory.java | 18
33 files changed, 862 insertions(+), 114 deletions(-)
diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
index edda887..d6fe834 100644
--- a/src/main/java/com/ruoyi/home/controller/HomeController.java
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -1,7 +1,5 @@
package com.ruoyi.home.controller;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -9,9 +7,6 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.home.dto.*;
import com.ruoyi.home.service.HomeService;
-import com.ruoyi.production.dto.ProductOrderDto;
-import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.dto.SalesLedgerWorkDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -59,6 +54,47 @@
return AjaxResult.success(count);
}
+ @GetMapping("/deptStaffDistribution")
+ @ApiOperation("鍚勯儴闂ㄤ汉鍛樺垎甯�")
+ public AjaxResult deptStaffDistribution() {
+ DeptStaffDistributionDto dto = homeService.deptStaffDistribution();
+ return AjaxResult.success(dto);
+ }
+
+ @GetMapping("/summaryStatistics")
+ @ApiOperation("鍛樺伐-瀹㈡埛-渚涘簲鍟嗘�绘暟")
+ public AjaxResult summaryStatistics() {
+ HomeSummaryDto homeSummaryDto = homeService.summaryStatistics();
+ return AjaxResult.success(homeSummaryDto);
+ }
+
+ @GetMapping("/supplierPurchaseRanking")
+ @ApiOperation("渚涘簲鍟嗛噰璐帓鍚�")
+ public AjaxResult supplierPurchaseRanking(@RequestParam(value = "type", defaultValue = "0") Integer type) {
+ List<SupplierPurchaseRankingDto> list = homeService.supplierPurchaseRanking(type);
+ return AjaxResult.success(list);
+ }
+
+ @GetMapping("/customerRevenueAnalysis")
+ @ApiOperation("瀹㈡埛钀ユ敹璐$尞鏁板�煎垎鏋�")
+ public AjaxResult customerRevenueAnalysis(@RequestParam("customerId") Long customerId, @RequestParam(value = "type", defaultValue = "0") Integer type) {
+ CustomerRevenueAnalysisDto dto = homeService.customerRevenueAnalysis(customerId, type);
+ return AjaxResult.success(dto);
+ }
+
+ @GetMapping("/productCategoryDistribution")
+ @ApiOperation("浜у搧澶х被鍒嗗竷")
+ public AjaxResult productCategoryDistribution() {
+ ProductCategoryDistributionDto dto = homeService.productCategoryDistribution();
+ return AjaxResult.success(dto);
+ }
+
+ @GetMapping("/customerContributionRanking")
+ @ApiOperation("瀹㈡埛閲戦璐$尞鎺掑悕")
+ public AjaxResult customerContributionRanking(@RequestParam(value = "type", defaultValue = "1") Integer type) {
+ List<CustomerContributionRankingDto> list = homeService.customerContributionRanking(type);
+ return AjaxResult.success(list);
+ }
/********************************************************钀ラ攢閲囪喘绫�**************************************************/
@GetMapping("/business")
diff --git a/src/main/java/com/ruoyi/home/dto/CustomerContributionRankingDto.java b/src/main/java/com/ruoyi/home/dto/CustomerContributionRankingDto.java
new file mode 100644
index 0000000..2b6468d
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/CustomerContributionRankingDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 瀹㈡埛閲戦璐$尞鎺掑悕DTO
+ */
+@Data
+@ApiModel("瀹㈡埛閲戦璐$尞鎺掑悕")
+public class CustomerContributionRankingDto {
+
+ @ApiModelProperty("瀹㈡埛鍚嶇О")
+ private String customerName;
+
+ @ApiModelProperty("鍚堝悓鎬婚噾棰�")
+ private BigDecimal totalAmount;
+}
diff --git a/src/main/java/com/ruoyi/home/dto/CustomerRevenueAnalysisDto.java b/src/main/java/com/ruoyi/home/dto/CustomerRevenueAnalysisDto.java
new file mode 100644
index 0000000..1bad069
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/CustomerRevenueAnalysisDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.dto.MapDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 瀹㈡埛钀ユ敹璐$尞鏁板�煎垎鏋怐TO
+ */
+@Data
+@ApiModel("瀹㈡埛钀ユ敹璐$尞鏁板�煎垎鏋�")
+public class CustomerRevenueAnalysisDto {
+
+ @ApiModelProperty("鍒嗘瀽鏉$洰鍒楄〃")
+ private List<MapDto> items;
+}
diff --git a/src/main/java/com/ruoyi/home/dto/DeptStaffDistributionDto.java b/src/main/java/com/ruoyi/home/dto/DeptStaffDistributionDto.java
new file mode 100644
index 0000000..4ead293
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/DeptStaffDistributionDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.dto.MapDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 閮ㄩ棬浜哄憳鍒嗗竷缁熻DTO
+ */
+@Data
+@ApiModel("閮ㄩ棬浜哄憳鍒嗗竷缁熻")
+public class DeptStaffDistributionDto {
+
+ @ApiModelProperty("閮ㄩ棬鎬讳汉鏁�")
+ private Long total;
+
+ @ApiModelProperty("閮ㄩ棬鍒嗗竷鍒楄〃")
+ private List<MapDto> items;
+}
diff --git a/src/main/java/com/ruoyi/home/dto/HomeSummaryDto.java b/src/main/java/com/ruoyi/home/dto/HomeSummaryDto.java
new file mode 100644
index 0000000..9d8863b
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/HomeSummaryDto.java
@@ -0,0 +1,31 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 棣栭〉姹囨�荤粺璁TO
+ */
+@Data
+@ApiModel("棣栭〉姹囨�荤粺璁�")
+public class HomeSummaryDto {
+
+ @ApiModelProperty("鎬诲伐浣滀汉鍛�")
+ private Long totalStaff;
+
+ @ApiModelProperty("鎬诲伐浣滀汉鍛樺悓姣斿闀跨巼")
+ private String staffGrowthRate;
+
+ @ApiModelProperty("鎬诲鎴锋暟")
+ private Long totalCustomer;
+
+ @ApiModelProperty("鎬诲鎴峰悓姣斿闀跨巼")
+ private String customerGrowthRate;
+
+ @ApiModelProperty("鎬讳緵搴斿晢鏁�")
+ private Long totalSupplier;
+
+ @ApiModelProperty("鎬讳緵搴斿晢鍚屾瘮澧為暱鐜�")
+ private String supplierGrowthRate;
+}
diff --git a/src/main/java/com/ruoyi/home/dto/ProductCategoryDistributionDto.java b/src/main/java/com/ruoyi/home/dto/ProductCategoryDistributionDto.java
new file mode 100644
index 0000000..5b11452
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/ProductCategoryDistributionDto.java
@@ -0,0 +1,49 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.dto.MapDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 浜у搧澶х被鍒嗗竷缁熻DTO
+ */
+@Data
+@ApiModel("浜у搧澶х被鍒嗗竷缁熻")
+public class ProductCategoryDistributionDto {
+
+ @ApiModelProperty("澶х被鍒嗗竷鍒楄〃")
+ private List<MajorCategoryDto> items;
+
+ @Data
+ public static class MajorCategoryDto {
+ @ApiModelProperty("澶х被鍚嶇О")
+ private String name;
+
+ @ApiModelProperty("搴撳瓨鎬绘暟")
+ private String value;
+
+ @ApiModelProperty("鍗犳瘮")
+ private String rate;
+
+ @ApiModelProperty("灏忕被鍒嗗竷璇︽儏")
+ private List<MinorCategoryDto> children;
+ }
+
+ @Data
+ public static class MinorCategoryDto {
+ @ApiModelProperty("灏忕被鍚嶇О")
+ private String name;
+
+ @ApiModelProperty("搴撳瓨鏁伴噺")
+ private String value;
+
+ @ApiModelProperty("鍗犳瘮")
+ private String rate;
+
+ @ApiModelProperty("鍨嬪彿鍒嗗竷璇︽儏")
+ private List<MapDto> children;
+ }
+}
diff --git a/src/main/java/com/ruoyi/home/dto/SupplierPurchaseRankingDto.java b/src/main/java/com/ruoyi/home/dto/SupplierPurchaseRankingDto.java
new file mode 100644
index 0000000..db9c370
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/SupplierPurchaseRankingDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 渚涘簲鍟嗛噰璐帓鍚岲TO
+ */
+@Data
+@ApiModel("渚涘簲鍟嗛噰璐帓鍚�")
+public class SupplierPurchaseRankingDto {
+
+ @ApiModelProperty("渚涘簲鍟嗗悕绉�")
+ private String supplierName;
+
+ @ApiModelProperty("閲囪喘鎬婚噾棰�")
+ private BigDecimal totalAmount;
+}
diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java
index 2dbab27..db43d86 100644
--- a/src/main/java/com/ruoyi/home/service/HomeService.java
+++ b/src/main/java/com/ruoyi/home/service/HomeService.java
@@ -33,4 +33,16 @@
ProductionProgressDto productionProgress();
ProductionTurnoverDto workInProcessTurnover();
+
+ DeptStaffDistributionDto deptStaffDistribution();
+
+ HomeSummaryDto summaryStatistics();
+
+ List<SupplierPurchaseRankingDto> supplierPurchaseRanking(Integer type);
+
+ CustomerRevenueAnalysisDto customerRevenueAnalysis(Long customerId, Integer type);
+
+ ProductCategoryDistributionDto productCategoryDistribution();
+
+ List<CustomerContributionRankingDto> customerContributionRanking(Integer type);
}
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 4ceed69..3b48ec4 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -1,45 +1,40 @@
package com.ruoyi.home.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.basic.mapper.CustomerMapper;
+import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.collaborativeApproval.mapper.NoticeMapper;
import com.ruoyi.collaborativeApproval.pojo.Notice;
import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
import com.ruoyi.device.mapper.DeviceRepairMapper;
-import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.dto.MapDto;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.home.dto.*;
import com.ruoyi.home.service.HomeService;
-import com.ruoyi.lavorissue.mapper.LavorIssueMapper;
-import com.ruoyi.lavorissue.pojo.LaborIssue;
-import com.ruoyi.procurementrecord.mapper.CustomStorageMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
-import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
-import com.ruoyi.procurementrecord.pojo.CustomStorage;
-import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.dto.ProductOrderDto;
import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.dto.ProductionProductMainDto;
import com.ruoyi.production.mapper.ProductOrderMapper;
-import com.ruoyi.production.mapper.ProductProcessMapper;
import com.ruoyi.production.mapper.ProductWorkOrderMapper;
-import com.ruoyi.production.mapper.ProductionProductMainMapper;
-import com.ruoyi.production.pojo.ProductOrder;
-import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.pojo.ProductWorkOrder;
import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.domain.SysUserDept;
import com.ruoyi.project.system.mapper.SysDeptMapper;
+import com.ruoyi.project.system.mapper.SysUserDeptMapper;
import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PaymentRegistration;
@@ -49,9 +44,13 @@
import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.sales.pojo.ReceiptPayment;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.staff.mapper.StaffOnJobMapper;
+import com.ruoyi.staff.pojo.StaffOnJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -60,13 +59,11 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -87,13 +84,7 @@
private SalesLedgerProductMapper salesLedgerProductMapper;
@Autowired
- private ProcurementRecordOutMapper procurementRecordOutMapper;
-
- @Autowired
private ProcurementRecordMapper procurementRecordStorageMapper;
-
- @Autowired
- private CustomStorageMapper customStorageMapper;
@Autowired
private QualityInspectMapper qualityStatisticsMapper;
@@ -108,9 +99,6 @@
private PaymentRegistrationMapper paymentRegistrationMapper;
@Autowired
- private LavorIssueMapper lavorIssueMapper;
-
- @Autowired
private SysDeptMapper sysDeptMapper;
@Autowired
@@ -118,13 +106,24 @@
@Autowired
private ProductOrderMapper productOrderMapper;
@Autowired
- private ProductProcessMapper productProcessMapper;
- @Autowired
private ProductWorkOrderMapper productWorkOrderMapper;
@Autowired
private ProductModelMapper productModelMapper;
@Autowired
+ private ProductMapper productMapper;
+ @Autowired
private StockUtils stockUtils;
+ @Autowired
+ private StaffOnJobMapper staffOnJobMapper;
+ @Autowired
+ private CustomerMapper customerMapper;
+ @Autowired
+ private SupplierManageMapper supplierManageMapper;
+ @Autowired
+ private SysUserMapper sysUserMapper;
+ @Autowired
+ private SysUserDeptMapper sysUserDeptMapper;
+
@Override
public HomeBusinessDto business() {
// 鏋勫缓缁撴灉
@@ -581,6 +580,398 @@
productionTurnoverDto.setProcessDetails(strings);
productionTurnoverDto.setProcessQuantityDetails(processQuantityDetails);
return productionTurnoverDto;
+ }
+ @Override
+ public DeptStaffDistributionDto deptStaffDistribution() {
+ DeptStaffDistributionDto dto = new DeptStaffDistributionDto();
+ List<MapDto> items = new ArrayList<>();
+
+ // 鏌ヨ鎵�鏈夋甯镐笖鏈垹闄ょ殑閮ㄩ棬
+ List<SysDept> depts = sysDeptMapper.selectDeptList(new SysDept());
+ if (CollectionUtils.isEmpty(depts)) {
+ dto.setItems(items);
+ return dto;
+ }
+
+ long totalUsers = 0;
+ List<Map<String, Object>> countsByDept = new ArrayList<>();
+
+ for (SysDept dept : depts) {
+ if ("0".equals(dept.getStatus()) && "0".equals(dept.getDelFlag())) {
+ Long count = sysUserDeptMapper.selectCount(new LambdaQueryWrapper<SysUserDept>()
+ .eq(SysUserDept::getDeptId, dept.getDeptId()));
+ if (count > 0) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("name", dept.getDeptName());
+ map.put("count", count);
+ countsByDept.add(map);
+ totalUsers += count;
+ }
+ }
+ }
+
+ if (totalUsers > 0) {
+ BigDecimal total = BigDecimal.valueOf(totalUsers);
+ for (Map<String, Object> map : countsByDept) {
+ MapDto mapDto = new MapDto();
+ mapDto.setName((String) map.get("name"));
+ Long count = (Long) map.get("count");
+ mapDto.setValue(count.toString());
+ mapDto.setRate(BigDecimal.valueOf(count).multiply(new BigDecimal("100"))
+ .divide(total, 2, RoundingMode.HALF_UP).toString());
+ items.add(mapDto);
+ }
+ }
+
+ dto.setTotal(totalUsers);
+ dto.setItems(items);
+ return dto;
+ }
+
+ @Override
+ public HomeSummaryDto summaryStatistics() {
+ HomeSummaryDto dto = new HomeSummaryDto();
+ LocalDate now = LocalDate.now();
+ YearMonth currentMonth = YearMonth.from(now);
+ YearMonth prevMonth = currentMonth.minusMonths(1);
+
+ LocalDateTime currentMonthEnd = currentMonth.atEndOfMonth().atTime(23, 59, 59);
+ LocalDateTime prevMonthEnd = prevMonth.atEndOfMonth().atTime(23, 59, 59);
+
+ // 鎬诲伐浣滀汉鍛�
+ Long currentStaff = countStaff(currentMonthEnd);
+ Long prevStaff = countStaff(prevMonthEnd);
+ dto.setTotalStaff(currentStaff);
+ dto.setStaffGrowthRate(calculateMoM(currentStaff, prevStaff));
+
+ // 鎬诲鎴锋暟
+ Long currentCustomers = countCustomers(currentMonthEnd);
+ Long prevCustomers = countCustomers(prevMonthEnd);
+ dto.setTotalCustomer(currentCustomers);
+ dto.setCustomerGrowthRate(calculateMoM(currentCustomers, prevCustomers));
+
+ // 鎬讳緵搴斿晢鏁�
+ Long currentSuppliers = countSuppliers(currentMonthEnd);
+ Long prevSuppliers = countSuppliers(prevMonthEnd);
+ dto.setTotalSupplier(currentSuppliers);
+ dto.setSupplierGrowthRate(calculateMoM(currentSuppliers, prevSuppliers));
+
+ return dto;
+ }
+
+ private Long countStaff(LocalDateTime dateTime) {
+ Long sysUserCount = sysUserMapper.selectCount(new LambdaQueryWrapper<SysUser>()
+ .eq(SysUser::getDelFlag, "0")
+ .le(SysUser::getCreateTime, dateTime));
+ Long staffCountItem = staffOnJobMapper.selectCount(new LambdaQueryWrapper<StaffOnJob>()
+ .le(StaffOnJob::getCreateTime, dateTime));
+ return sysUserCount + staffCountItem;
+ }
+
+
+ private Long countCustomers(LocalDateTime dateTime) {
+ return customerMapper.selectCount(new LambdaQueryWrapper<Customer>()
+ .le(Customer::getMaintenanceTime, dateTime.toLocalDate()));
+ }
+
+ private Long countSuppliers(LocalDateTime dateTime) {
+ return supplierManageMapper.selectCount(new LambdaQueryWrapper<SupplierManage>()
+ .le(SupplierManage::getCreateTime, dateTime));
+ }
+
+ private String calculateMoM(Number current, Number prev) {
+ BigDecimal curVal = new BigDecimal(current.toString());
+ BigDecimal prevVal = new BigDecimal(prev.toString());
+ if (prevVal.compareTo(BigDecimal.ZERO) == 0) {
+ return curVal.compareTo(BigDecimal.ZERO) > 0 ? "100.00" : "0.00";
+ }
+ return curVal.subtract(prevVal)
+ .divide(prevVal, 4, RoundingMode.HALF_UP)
+ .multiply(new BigDecimal("100"))
+ .setScale(2, RoundingMode.HALF_UP)
+ .toString();
+ }
+
+ @Override
+ public List<SupplierPurchaseRankingDto> supplierPurchaseRanking(Integer type) {
+ LocalDate today = LocalDate.now();
+ LocalDate startDate;
+ LocalDate endDate;
+ switch (type) {
+ case 0: // 鍛�
+ startDate = today.with(DayOfWeek.MONDAY);
+ endDate = today.with(DayOfWeek.SUNDAY);
+ break;
+ case 1: // 鏈�
+ startDate = today.with(TemporalAdjusters.firstDayOfMonth());
+ endDate = today.with(TemporalAdjusters.lastDayOfMonth());
+ break;
+ case 2: // 瀛e害
+ Month currentMonth = today.getMonth();
+ Month firstMonthOfQuarter = currentMonth.firstMonthOfQuarter();
+ Month lastMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
+
+ startDate = today.withMonth(firstMonthOfQuarter.getValue()).with(TemporalAdjusters.firstDayOfMonth());
+ endDate = today.withMonth(lastMonthOfQuarter.getValue()).with(TemporalAdjusters.lastDayOfMonth());
+ break;
+ default:
+ return new ArrayList<>();
+ }
+
+ QueryWrapper<PurchaseLedger> queryWrapper = new QueryWrapper<>();
+ queryWrapper.select("supplier_name", "SUM(contract_amount) as total_amount")
+ .ge("entry_date", startDate)
+ .le("entry_date", endDate)
+// .ne("approval_status", 3)
+ .groupBy("supplier_name")
+ .orderByDesc("total_amount")
+ .last("LIMIT 5");
+
+ List<Map<String, Object>> maps = purchaseLedgerMapper.selectMaps(queryWrapper);
+ return maps.stream().map(map -> {
+ SupplierPurchaseRankingDto dto = new SupplierPurchaseRankingDto();
+ dto.setSupplierName(map.get("supplier_name") != null ? map.get("supplier_name").toString() : "");
+ Object amount = map.get("total_amount");
+ dto.setTotalAmount(amount != null ? new BigDecimal(amount.toString()) : BigDecimal.ZERO);
+ return dto;
+ }).collect(Collectors.toList());
+ }
+
+ @Override
+ public CustomerRevenueAnalysisDto customerRevenueAnalysis(Long customerId, Integer type) {
+ CustomerRevenueAnalysisDto dto = new CustomerRevenueAnalysisDto();
+ List<MapDto> items = new ArrayList<>();
+ LocalDate today = LocalDate.now();
+
+ LocalDate start;
+ LocalDate end;
+ boolean groupByMonth = false;
+
+ switch (type) {
+ case 0: // 鍛�
+ start = today.with(DayOfWeek.MONDAY);
+ end = today.with(DayOfWeek.SUNDAY);
+ break;
+ case 1: // 鏈�
+ start = today.with(TemporalAdjusters.firstDayOfMonth());
+ end = today.with(TemporalAdjusters.lastDayOfMonth());
+ break;
+ case 2: // 瀛e害
+ Month firstMonthOfQuarter = today.getMonth().firstMonthOfQuarter();
+ start = today.withMonth(firstMonthOfQuarter.getValue()).with(TemporalAdjusters.firstDayOfMonth());
+ end = today.withMonth(firstMonthOfQuarter.plus(2).getValue()).with(TemporalAdjusters.lastDayOfMonth());
+ groupByMonth = true;
+ break;
+ default:
+ dto.setItems(items);
+ return dto;
+ }
+
+ List<SalesLedger> list = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+ .eq(SalesLedger::getCustomerId, customerId)
+ .ge(SalesLedger::getEntryDate, start)
+ .le(SalesLedger::getEntryDate, end));
+
+ if (groupByMonth) {
+ for (int i = 0; i < 3; i++) {
+ LocalDate m = start.plusMonths(i);
+ String monthName = m.getMonthValue() + "鏈�";
+ BigDecimal sum = list.stream()
+ .filter(l -> l.getEntryDate() != null)
+ .filter(l -> {
+ LocalDate ld = l.getEntryDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+ return ld.getMonth() == m.getMonth() && ld.getYear() == m.getYear();
+ })
+ .map(SalesLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ MapDto mapDto = new MapDto();
+ mapDto.setName(monthName);
+ mapDto.setValue(sum.setScale(2, RoundingMode.HALF_UP).toString());
+ items.add(mapDto);
+ }
+ } else {
+ long days = ChronoUnit.DAYS.between(start, end) + 1;
+ for (int i = 0; i < days; i++) {
+ LocalDate d = start.plusDays(i);
+ String dayName = d.getMonthValue() + "/" + d.getDayOfMonth();
+ BigDecimal sum = list.stream()
+ .filter(l -> l.getEntryDate() != null)
+ .filter(l -> l.getEntryDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().equals(d))
+ .map(SalesLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ MapDto mapDto = new MapDto();
+ mapDto.setName(dayName);
+ mapDto.setValue(sum.setScale(2, RoundingMode.HALF_UP).toString());
+ items.add(mapDto);
+ }
+ }
+
+ dto.setItems(items);
+ return dto;
+ }
+
+ @Override
+ public ProductCategoryDistributionDto productCategoryDistribution() {
+ ProductCategoryDistributionDto dto = new ProductCategoryDistributionDto();
+ List<ProductCategoryDistributionDto.MajorCategoryDto> majorItems = new ArrayList<>();
+
+ // 鎵�鏈夌殑浜у搧澶х被鍜屽皬绫�
+ List<Product> allProducts = productMapper.selectList(new LambdaQueryWrapper<Product>());
+ if (CollectionUtils.isEmpty(allProducts)) {
+ dto.setItems(majorItems);
+ return dto;
+ }
+
+ List<Product> majorCategories = allProducts.stream().filter(p -> p.getParentId() == null).collect(Collectors.toList());
+ List<Product> minorCategories = allProducts.stream().filter(p -> p.getParentId() != null).collect(Collectors.toList());
+
+ // 浠� sales_ledger_product 鎷垮埌姣忎釜浜у搧鐨勫瀷鍙峰簱瀛�
+ // 闇�鍖呭惈瑙勬牸鍨嬪彿浠ユ敮鎸佷笁绾у垎甯�
+ List<Map<String, Object>> quantityMaps = salesLedgerProductMapper.selectMaps(new QueryWrapper<SalesLedgerProduct>()
+ .select("product_id", "specification_model", "type", "SUM(quantity) as sum_qty")
+ .isNotNull("product_id")
+ .groupBy("product_id", "specification_model", "type"));
+
+ Map<Long, Map<String, Map<Integer, BigDecimal>>> modelStockGroups = new HashMap<>();
+ for (Map<String, Object> map : quantityMaps) {
+ Long productId = Long.parseLong(map.get("product_id").toString());
+ String model = map.get("specification_model") != null ? map.get("specification_model").toString() : "鏈煡鍨嬪彿";
+ Integer type = Integer.parseInt(map.get("type").toString());
+ BigDecimal sum = map.get("sum_qty") != null ? new BigDecimal(map.get("sum_qty").toString()) : BigDecimal.ZERO;
+
+ modelStockGroups.computeIfAbsent(productId, k -> new HashMap<>())
+ .computeIfAbsent(model, k -> new HashMap<>())
+ .put(type, sum);
+ }
+
+ // 搴撳瓨骞舵眹鎬�
+ Map<Long, List<MapDto>> productModelsMap = new HashMap<>();
+ Map<Long, BigDecimal> productTotalStockMap = new HashMap<>();
+
+ for (Long pid : modelStockGroups.keySet()) {
+ Map<String, Map<Integer, BigDecimal>> models = modelStockGroups.get(pid);
+ BigDecimal productStock = BigDecimal.ZERO;
+ List<MapDto> modelDtos = new ArrayList<>();
+
+ for (String modelName : models.keySet()) {
+ Map<Integer, BigDecimal> types = models.get(modelName);
+ BigDecimal procurement = types.getOrDefault(2, BigDecimal.ZERO);
+ BigDecimal sales = types.getOrDefault(1, BigDecimal.ZERO);
+ BigDecimal stock = procurement.subtract(sales);
+ if (stock.compareTo(BigDecimal.ZERO) < 0) stock = BigDecimal.ZERO;
+
+ MapDto modelDto = new MapDto();
+ modelDto.setName(modelName);
+ modelDto.setValue(stock.stripTrailingZeros().toPlainString());
+ modelDtos.add(modelDto);
+ productStock = productStock.add(stock);
+ }
+ productModelsMap.put(pid, modelDtos);
+ productTotalStockMap.put(pid, productStock);
+ }
+
+ BigDecimal totalInventory = productTotalStockMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 鍨嬪彿鍗犳瘮
+ if (totalInventory.compareTo(BigDecimal.ZERO) > 0) {
+ for (List<MapDto> dtos : productModelsMap.values()) {
+ for (MapDto m : dtos) {
+ BigDecimal val = new BigDecimal(m.getValue());
+ m.setRate(val.multiply(new BigDecimal("100"))
+ .divide(totalInventory, 2, RoundingMode.HALF_UP).toString());
+ }
+ }
+ }
+
+ // 鍒嗗眰鏁版嵁
+ for (Product major : majorCategories) {
+ ProductCategoryDistributionDto.MajorCategoryDto majorDto = new ProductCategoryDistributionDto.MajorCategoryDto();
+ majorDto.setName(major.getProductName());
+
+ List<ProductCategoryDistributionDto.MinorCategoryDto> minorDtos = new ArrayList<>();
+ BigDecimal majorStock = BigDecimal.ZERO;
+
+ for (Product minor : minorCategories) {
+ if (major.getId().equals(minor.getParentId())) {
+ BigDecimal stock = productTotalStockMap.getOrDefault(minor.getId(), BigDecimal.ZERO);
+ ProductCategoryDistributionDto.MinorCategoryDto minorDto = new ProductCategoryDistributionDto.MinorCategoryDto();
+ minorDto.setName(minor.getProductName());
+ minorDto.setValue(stock.stripTrailingZeros().toPlainString());
+
+ if (totalInventory.compareTo(BigDecimal.ZERO) > 0) {
+ minorDto.setRate(stock.multiply(new BigDecimal("100"))
+ .divide(totalInventory, 2, RoundingMode.HALF_UP).toString());
+ } else {
+ minorDto.setRate("0.00");
+ }
+
+ minorDto.setChildren(productModelsMap.getOrDefault(minor.getId(), new ArrayList<>()));
+ minorDtos.add(minorDto);
+ majorStock = majorStock.add(stock);
+ }
+ }
+
+ majorDto.setValue(majorStock.stripTrailingZeros().toPlainString());
+
+ if (totalInventory.compareTo(BigDecimal.ZERO) > 0) {
+ majorDto.setRate(majorStock.multiply(new BigDecimal("100"))
+ .divide(totalInventory, 2, RoundingMode.HALF_UP).toString());
+ } else {
+ majorDto.setRate("0.00");
+ }
+ majorDto.setChildren(minorDtos);
+ majorItems.add(majorDto);
+ }
+
+ dto.setItems(majorItems);
+ return dto;
+ }
+
+ @Override
+ public List<CustomerContributionRankingDto> customerContributionRanking(Integer type) {
+ LocalDate today = LocalDate.now();
+ LocalDate startDate = null;
+ LocalDate endDate = null;
+ switch (type) {
+ case 0:
+ startDate = today.with(DayOfWeek.MONDAY);
+ endDate = today.with(DayOfWeek.SUNDAY);
+ break;
+ case 1:
+ startDate = today.with(TemporalAdjusters.firstDayOfMonth());
+ endDate = today.with(TemporalAdjusters.lastDayOfMonth());
+ break;
+ case 2:
+ Month currentMonth = today.getMonth();
+ Month firstMonthOfQuarter = currentMonth.firstMonthOfQuarter();
+ Month lastMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
+ startDate = today.withMonth(firstMonthOfQuarter.getValue()).with(TemporalAdjusters.firstDayOfMonth());
+ endDate = today.withMonth(lastMonthOfQuarter.getValue()).with(TemporalAdjusters.lastDayOfMonth());
+ break;
+ }
+
+ QueryWrapper<SalesLedger> queryWrapper = new QueryWrapper<>();
+ queryWrapper.select("customer_name", "SUM(contract_amount) as total_amount")
+ .isNotNull("customer_name")
+ .groupBy("customer_name")
+ .orderByDesc("total_amount")
+ .last("LIMIT 5");
+
+ if (startDate != null && endDate != null) {
+ queryWrapper.between("entry_date", startDate, endDate);
+ }
+
+ List<Map<String, Object>> maps = salesLedgerMapper.selectMaps(queryWrapper);
+ List<CustomerContributionRankingDto> result = new ArrayList<>();
+ for (Map<String, Object> map : maps) {
+ CustomerContributionRankingDto rankingDto = new CustomerContributionRankingDto();
+ rankingDto.setCustomerName(map.get("customer_name").toString());
+ rankingDto.setTotalAmount(map.get("total_amount") != null ? new BigDecimal(map.get("total_amount").toString()) : BigDecimal.ZERO);
+ result.add(rankingDto);
+ }
+ return result;
}
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 93119de..3dc98a1 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -91,7 +91,7 @@
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
- ProductOrder order = productOrderMapper.selectById(productOrder);
+ ProductOrder order = productOrderMapper.selectById(productOrder.getId());
productWorkOrder.setPlanQuantity(order.getQuantity());
productWorkOrder.setWorkOrderNo(workOrderNoStr);
productWorkOrder.setStatus(1);
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 66270d4..804c630 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -187,7 +187,7 @@
qualityInspect.setModel(productModel.getModel());
qualityInspect.setUnit(productModel.getUnit());
qualityInspect.setQuantity(productQty);
- qualityInspect.setProcess(productProcess.getName());
+ qualityInspect.setProcess(process);
qualityInspect.setInspectState(0);
qualityInspect.setInspectType(inspectType);
qualityInspect.setProductMainId(productionProductMain.getId());
@@ -209,7 +209,7 @@
}
/*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
- productWorkOrder.setCompleteQuantity(productQty.add(dto.getQuantity()));
+ productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
}
@@ -291,7 +291,7 @@
// 鍒犻櫎浜у嚭璁板綍
productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
.eq(ProductionProductOutput::getProductMainId, productionProductMain.getId()));
- //鍒犻櫎鍏ュ簱
+ //鍒犻櫎鎶曞叆璁板綍
productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
.eq(ProductionProductInput::getProductMainId, productionProductMain.getId()));
//鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
diff --git a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
index 63f417b..39bdbf2 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.math.LongMath;
+import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.controller.BaseController;
@@ -14,6 +15,7 @@
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
@@ -47,9 +49,7 @@
@Autowired
private ISalesLedgerProductService salesLedgerProductService;
@Autowired
- private ProcurementRecordOutService procurementRecordOutService;
- @Autowired
- private ProcurementRecordService procurementRecordStorageService;
+ private StockUtils stockUtils;
@GetMapping("/listPage")
@ApiOperation("鍙戣揣瀹℃壒鍒楄〃")
@@ -99,18 +99,9 @@
// throw new ServiceException("閲囪喘璁板綍涓嶅瓨鍦紝瀹℃壒鍥炴粴");
// }
- // 鐢熸垚鍑哄簱璁板綍
- ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
-// procurementRecordOutAdd.setId(procurementRecordStorage.getId());
- procurementRecordOutAdd.setId(0);
- procurementRecordOutAdd.setProductModelId(salesLedgerProduct.getProductModelId());
- procurementRecordOutAdd.setSalesLedgerProductId((long) Math.toIntExact(salesLedgerProduct.getId()));
- procurementRecordOutAdd.setType(2);
- procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId()));
- procurementRecordOutAdd.setQuantity(salesLedgerProduct.getQuantity().toPlainString());
- procurementRecordOutAdd.setTime(LocalDate.now().toString());
- procurementRecordOutService.stockout(procurementRecordOutAdd);
+ //鍑哄簱
+ stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
}
return AjaxResult.success();
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
index 94e4669..b12fc67 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -6,7 +6,6 @@
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.stock.dto.StockInRecordDto;
-import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.service.StockInRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
index a1d1210..f4bd009 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.compensationperformance.pojo.CompensationPerformance;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.R;
@@ -93,4 +92,16 @@
public R stockInAndOutRecord(StockInventoryDto stockInventoryDto,Page page) {
return R.ok(stockInventoryService.stockInAndOutRecord(stockInventoryDto,page));
}
+
+ @PostMapping("/frozenStock")
+ @ApiOperation("鍐荤粨搴撳瓨")
+ public R frozenStock(@RequestBody StockInventoryDto stockInventoryDto) {
+ return R.ok(stockInventoryService.frozenStock(stockInventoryDto));
+ }
+
+ @PostMapping("/thawStock")
+ @ApiOperation("瑙e喕搴撳瓨")
+ public R thawStock(@RequestBody StockInventoryDto stockInventoryDto) {
+ return R.ok(stockInventoryService.thawStock(stockInventoryDto));
+ }
}
diff --git a/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java b/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
index 755084c..bd98859 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
@@ -5,9 +5,7 @@
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
-import com.ruoyi.stock.pojo.StockOutRecord;
import com.ruoyi.stock.service.StockOutRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
diff --git a/src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java b/src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java
index b2950db..43714ca 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java
@@ -2,9 +2,9 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockUnQualifiedRecordTypeEnum;
import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
import com.ruoyi.stock.service.StockUninventoryService;
import io.swagger.annotations.ApiOperation;
@@ -57,4 +57,17 @@
stockUninventoryService.exportStockUninventory(response,stockUninventoryDto);
}
+
+ @PostMapping("/frozenStock")
+ @ApiOperation("鍐荤粨搴撳瓨")
+ public R frozenStock(@RequestBody StockInventoryDto stockInventoryDto) {
+ return R.ok(stockUninventoryService.frozenStock(stockInventoryDto));
+ }
+
+ @PostMapping("/thawStock")
+ @ApiOperation("瑙e喕搴撳瓨")
+ public R thawStock(@RequestBody StockInventoryDto stockInventoryDto) {
+ return R.ok(stockUninventoryService.thawStock(stockInventoryDto));
+ }
+
}
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
index 5c58f53..1aed75c 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -1,6 +1,5 @@
package com.ruoyi.stock.dto;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.stock.pojo.StockInRecord;
import lombok.Data;
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
index 37b5efe..125b52b 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -37,4 +37,6 @@
private BigDecimal totalStockIn;
private BigDecimal totalStockOut;
private BigDecimal currentStock;
+
+ private BigDecimal unLockedQuantity;
}
diff --git a/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java
index e496352..404c58a 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java
@@ -3,6 +3,8 @@
import com.ruoyi.stock.pojo.StockUninventory;
import lombok.Data;
+import java.math.BigDecimal;
+
@Data
public class StockUninventoryDto extends StockUninventory {
private String productName;
@@ -15,4 +17,6 @@
//鍏ュ簱绫诲瀷瀵瑰簲鐨刬d
private Long recordId;
+
+ private BigDecimal unLockedQuantity;
}
diff --git a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
index 3daa2a8..4b7553f 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
@@ -1,14 +1,9 @@
package com.ruoyi.stock.execl;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
@Data
public class StockInventoryExportData {
@@ -27,6 +22,12 @@
@Excel(name = "搴撳瓨鏁伴噺")
private BigDecimal qualitity;
+ @Excel(name = "棰勮鏁伴噺")
+ private BigDecimal warnNum;
+
+ @Excel(name = "鍐荤粨鏁伴噺")
+ private BigDecimal lockedQuantity;
+
@Excel(name = "澶囨敞")
private String remark;
//
diff --git a/src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java b/src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java
new file mode 100644
index 0000000..7fd6e36
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java
@@ -0,0 +1,36 @@
+package com.ruoyi.stock.execl;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class StockUnInventoryExportData {
+
+
+
+ @Excel(name = "浜у搧鍚嶇О")
+ private String productName;
+
+ @Excel(name = "瑙勬牸")
+ private String model;
+
+ @Excel(name = "鍗曚綅")
+ private String unit;
+
+ @Excel(name = "搴撳瓨鏁伴噺")
+ private BigDecimal qualitity;
+
+ @Excel(name = "鍐荤粨鏁伴噺")
+ private BigDecimal lockedQuantity;
+
+ @Excel(name = "澶囨敞")
+ private String remark;
+//
+// @Excel(name = "鏈�鏂版洿鏂版椂闂�")
+// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+// private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
index 16b0519..d37e367 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
@@ -1,12 +1,12 @@
package com.ruoyi.stock.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.execl.StockInventoryExportData;
import com.ruoyi.stock.pojo.StockInventory;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java
index 9c058ed..89e9b17 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java
@@ -1,11 +1,11 @@
package com.ruoyi.stock.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.stock.dto.StockUninventoryDto;
-import com.ruoyi.stock.execl.StockInventoryExportData;
+import com.ruoyi.stock.execl.StockUnInventoryExportData;
import com.ruoyi.stock.pojo.StockUninventory;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -28,5 +28,5 @@
int updateAddStockUnInventory(@Param("ew") StockUninventoryDto stockUninventoryDto);
- List<StockInventoryExportData> listStockInventoryExportData(@Param("ew") StockUninventoryDto stockUninventoryDto);
+ List<StockUnInventoryExportData> listStockInventoryExportData(@Param("ew") StockUninventoryDto stockUninventoryDto);
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
index 4568dcc..36e7cf0 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
@@ -3,19 +3,17 @@
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.lang.Nullable;
import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
/**
* <p>
@@ -61,7 +59,7 @@
private BigDecimal lockedQuantity;
@ApiModelProperty("棰勮鏁伴噺")
- private Integer warnNum;
+ private BigDecimal warnNum;
@ApiModelProperty("澶囨敞")
private String remark;
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java b/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
index 6403dba..6ed47de 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
@@ -3,13 +3,16 @@
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
/**
* <p>
@@ -37,11 +40,15 @@
private BigDecimal qualitity;
@TableField(fill = FieldFill.INSERT)
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
@ApiModelProperty("鏇存柊鏃堕棿")
@TableField(fill = FieldFill.INSERT_UPDATE)
- private Integer updateTime;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private LocalDateTime updateTime;
@ApiModelProperty("鐗堟湰鍙�")
private Integer version;
@@ -49,4 +56,7 @@
@ApiModelProperty("澶囨敞")
private String remark;
+ @ApiModelProperty("琚鍗曢攣瀹氭暟閲�")
+ private BigDecimal lockedQuantity;
+
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
index d4b5171..65dcca3 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
@@ -2,15 +2,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.pojo.StockInventory;
-import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
-import java.util.List;
/**
* <p>
@@ -36,4 +35,7 @@
IPage<StockInventoryDto> stockInAndOutRecord(StockInventoryDto stockInventoryDto,Page page);
+ Boolean frozenStock(StockInventoryDto stockInventoryDto);
+
+ Boolean thawStock(StockInventoryDto stockInventoryDto);
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java b/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
index 7f435fa..0d6ba6d 100644
--- a/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
@@ -2,9 +2,10 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
import com.ruoyi.stock.pojo.StockUninventory;
-import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletResponse;
@@ -25,4 +26,8 @@
Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto);
void exportStockUninventory(HttpServletResponse response, StockUninventoryDto stockUninventoryDto);
+
+ Boolean frozenStock(StockInventoryDto stockInventoryDto);
+
+ Boolean thawStock(StockInventoryDto stockInventoryDto);
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index e622dd7..bf64268 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -11,12 +11,10 @@
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.staff.pojo.StaffOnJob;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
import com.ruoyi.stock.execl.StockInRecordExportData;
-import com.ruoyi.stock.execl.StockInventoryExportData;
import com.ruoyi.stock.mapper.StockInRecordMapper;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.mapper.StockUninventoryMapper;
@@ -25,7 +23,6 @@
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockInRecordService;
import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index e103f75..99c4544 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
@@ -13,11 +14,10 @@
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.execl.StockInventoryExportData;
-import com.ruoyi.stock.pojo.StockInventory;
import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.StockInventory;
import com.ruoyi.stock.service.StockInRecordService;
import com.ruoyi.stock.service.StockInventoryService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.stock.service.StockOutRecordService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@@ -70,6 +70,8 @@
newStockInventory.setQualitity(stockInventoryDto.getQualitity());
newStockInventory.setVersion(1);
newStockInventory.setRemark(stockInventoryDto.getRemark());
+ newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
+ newStockInventory.setWarnNum(stockInventoryDto.getWarnNum());
stockInventoryMapper.insert(newStockInventory);
}else {
stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
@@ -90,6 +92,9 @@
stockOutRecordDto.setType("0");
stockOutRecordService.add(stockOutRecordDto);
StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
+ if (stockInventoryDto.getQualitity().compareTo( oldStockInventory.getQualitity().subtract(oldStockInventory.getLockedQuantity()))>0) {
+ throw new RuntimeException("搴撳瓨涓嶈冻鏃犳硶鍑哄簱");
+ }
if (ObjectUtils.isEmpty(oldStockInventory)) {
throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
}else {
@@ -120,6 +125,11 @@
stockInventoryDto.setRecordType(StockQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
stockInventoryDto.setQualitity(dto.getQualitity());
stockInventoryDto.setRemark(dto.getRemark());
+ stockInventoryDto.setWarnNum(dto.getWarnNum());
+ if (ObjectUtils.isNotEmpty(dto.getLockedQuantity())&&dto.getLockedQuantity().compareTo(dto.getQualitity())>0) {
+ throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫簱瀛樻暟閲�");
+ }
+ stockInventoryDto.setLockedQuantity(dto.getLockedQuantity());
stockInventoryDto.setProductModelId(item.getProductModelId());
this.addstockInventory(stockInventoryDto);
matched = true;
@@ -167,4 +177,28 @@
public IPage<StockInventoryDto> stockInAndOutRecord(StockInventoryDto stockInventoryDto, Page page) {
return stockInventoryMapper.stockInAndOutRecord(stockInventoryDto,page);
}
+
+ @Override
+ public Boolean frozenStock(StockInventoryDto stockInventoryDto) {
+ StockInventory stockInventory = stockInventoryMapper.selectById(stockInventoryDto.getId());
+ if (stockInventory.getQualitity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃搴撳瓨鏁伴噺");
+ }
+ if (ObjectUtils.isEmpty(stockInventory.getLockedQuantity())) {
+ stockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
+ }else {
+ stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().add(stockInventoryDto.getLockedQuantity()));
+ }
+ return this.updateById(stockInventory);
+ }
+
+ @Override
+ public Boolean thawStock(StockInventoryDto stockInventoryDto) {
+ StockInventory stockInventory = stockInventoryMapper.selectById(stockInventoryDto.getId());
+ if (stockInventory.getLockedQuantity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ throw new RuntimeException("瑙e喕鏁伴噺涓嶈兘瓒呰繃鍐荤粨鏁伴噺");
+ }
+ stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().subtract(stockInventoryDto.getLockedQuantity()));
+ return this.updateById(stockInventory);
+ }
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
index 76dc175..f46f4c0 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -14,7 +14,6 @@
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
-import com.ruoyi.stock.execl.StockInRecordExportData;
import com.ruoyi.stock.execl.StockOutRecordExportData;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.mapper.StockOutRecordMapper;
@@ -25,7 +24,6 @@
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockOutRecordService;
import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
index fae9248..2d5b8f5 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -4,18 +4,18 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.stock.dto.StockInRecordDto;
+import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
-import com.ruoyi.stock.execl.StockInventoryExportData;
-import com.ruoyi.stock.pojo.StockInventory;
-import com.ruoyi.stock.pojo.StockUninventory;
+import com.ruoyi.stock.execl.StockUnInventoryExportData;
import com.ruoyi.stock.mapper.StockUninventoryMapper;
+import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockInRecordService;
import com.ruoyi.stock.service.StockOutRecordService;
import com.ruoyi.stock.service.StockUninventoryService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -94,8 +94,32 @@
@Override
public void exportStockUninventory(HttpServletResponse response, StockUninventoryDto stockUninventoryDto) {
- List<StockInventoryExportData> list = stockUninventoryMapper.listStockInventoryExportData(stockUninventoryDto);
- ExcelUtil<StockInventoryExportData> util = new ExcelUtil<>(StockInventoryExportData.class);
+ List<StockUnInventoryExportData> list = stockUninventoryMapper.listStockInventoryExportData(stockUninventoryDto);
+ ExcelUtil<StockUnInventoryExportData> util = new ExcelUtil<>(StockUnInventoryExportData.class);
util.exportExcel(response,list, "涓嶅悎鏍煎簱瀛樹俊鎭�");
}
+
+ @Override
+ public Boolean frozenStock(StockInventoryDto stockInventoryDto) {
+ StockUninventory stockUninventory = stockUninventoryMapper.selectById(stockInventoryDto.getId());
+ if (stockUninventory.getQualitity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃搴撳瓨鏁伴噺");
+ }
+ if (ObjectUtils.isEmpty(stockUninventory.getLockedQuantity())) {
+ stockUninventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
+ }else {
+ stockUninventory.setLockedQuantity(stockUninventory.getLockedQuantity().add(stockInventoryDto.getLockedQuantity()));
+ }
+ return this.updateById(stockUninventory);
+ }
+
+ @Override
+ public Boolean thawStock(StockInventoryDto stockInventoryDto) {
+ StockUninventory stockUninventory = stockUninventoryMapper.selectById(stockInventoryDto.getId());
+ if (stockUninventory.getLockedQuantity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ throw new RuntimeException("瑙e喕鏁伴噺涓嶈兘瓒呰繃鍐荤粨鏁伴噺");
+ }
+ stockUninventory.setLockedQuantity(stockUninventory.getLockedQuantity().subtract(stockInventoryDto.getLockedQuantity()));
+ return this.updateById(stockUninventory);
+ }
}
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index b3f54ee..3cf81dc 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -4,14 +4,14 @@
<!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
<resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.StockInventory">
- <result column="id" property="id" />
- <result column="product_model_id" property="productModelId" />
- <result column="qualitity" property="qualitity" />
- <result column="create_time" property="createTime" />
- <result column="update_time" property="updateTime" />
- <result column="version" property="version" />
- <result column="locked_quantity" property="lockedQuantity" />
- <result column="warn_num" property="warnNum" />
+ <result column="id" property="id"/>
+ <result column="product_model_id" property="productModelId"/>
+ <result column="qualitity" property="qualitity"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="version" property="version"/>
+ <result column="locked_quantity" property="lockedQuantity"/>
+ <result column="warn_num" property="warnNum"/>
</resultMap>
<update id="updateAddStockInventory">
update stock_inventory
@@ -19,11 +19,17 @@
<if test="ew.qualitity != null">
qualitity = qualitity + #{ew.qualitity},
</if>
- <if test="ew.version != null">
- version = version + 1,
+ <if test="ew.version != null">
+ version = version + 1,
</if>
<if test="ew.remark != null and ew.remark !=''">
remark = #{ew.remark},
+ </if>
+ <if test="ew.warnNum != null and ew.warnNum !=''">
+ warn_num = #{ew.warnNum},
+ </if>
+ <if test="ew.lockedQuantity != null and ew.lockedQuantity !=''">
+ locked_quantity = locked_quantity + #{ew.lockedQuantity},
</if>
update_time = now()
</set>
@@ -46,13 +52,21 @@
where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity}
</update>
<select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
- select si.*,
- pm.model,
- pm.unit,
- p.product_name
+ select si.id,
+ si.qualitity,
+ COALESCE(si.locked_quantity, 0) as locked_quantity,
+ si.product_model_id,
+ si.create_time,
+ si.update_time,
+ COALESCE(si.warn_num, 0) as warn_num,
+ si.version,
+ (si.qualitity - COALESCE(si.locked_quantity, 0)) as un_locked_quantity,
+ pm.model,
+ pm.unit,
+ p.product_name
from stock_inventory si
- left join product_model pm on si.product_model_id = pm.id
- left join product p on pm.product_id = p.id
+ left join product_model pm on si.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
where 1 = 1
<if test="ew.productName != null and ew.productName !=''">
and p.product_name like concat('%',#{ew.productName},'%')
@@ -63,6 +77,8 @@
pm.model,
pm.unit,
p.product_name,
+ coalesce(si.warn_num, 0) as warn_num,
+ coalesce(si.locked_quantity, 0) as locked_quantity,
si.remark,
si.update_time
from stock_inventory si
diff --git a/src/main/resources/mapper/stock/StockUninventoryMapper.xml b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
index 39b16b3..b171ae2 100644
--- a/src/main/resources/mapper/stock/StockUninventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
@@ -44,19 +44,27 @@
where product_model_id = #{ew.productModelId}
</update>
<select id="pageStockUninventory" resultType="com.ruoyi.stock.dto.StockUninventoryDto">
- select su.*,
- pm.model,
- pm.unit,
- p.product_name
+ select su.id,
+ su.qualitity,
+ COALESCE(su.locked_quantity, 0) as locked_quantity,
+ su.product_model_id,
+ su.create_time,
+ su.update_time,
+ su.version,
+ su.update_time,
+ (su.qualitity - COALESCE(su.locked_quantity, 0)) as un_locked_quantity,
+ pm.model,
+ pm.unit,
+ p.product_name
from stock_uninventory su
- left join product_model pm on su.product_model_id = pm.id
- left join product p on pm.product_id = p.id
+ left join product_model pm on su.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
where 1 = 1
<if test="ew.productName != null and ew.productName !=''">
and p.product_name like concat('%',#{ew.productName},'%')
</if>
</select>
- <select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData">
+ <select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockUnInventoryExportData">
select su.*,
pm.model,
pm.unit,
--
Gitblit v1.9.3