From f6f57ba70679a0b050031f3cdf81b5bf5d4cbd60 Mon Sep 17 00:00:00 2001 From: liding <756868258@qq.com> Date: 星期五, 11 七月 2025 15:28:37 +0800 Subject: [PATCH] 1.生产加工优化 2.销售,库存查询优化 --- main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java | 2 main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java | 41 +++++++++++-- main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java | 29 +++++++++ main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java | 5 + main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java | 2 main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java | 2 main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java | 39 ++++++++++++- main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql | 6 +- 8 files changed, 111 insertions(+), 15 deletions(-) diff --git a/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java b/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java index 792c8b9..3b7ca54 100644 --- a/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java +++ b/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java @@ -39,7 +39,7 @@ Map<String, BigDecimal> maps = officialInventoryService.selectOfficialAllInfo(); homePageDto.setInventory(maps); //鏈堝害缁熻 - homePageDto.setResultMouth((List<Map<String, BigDecimal>>) map.get("resultMouth")); + homePageDto.setResultMouth((Map<String, BigDecimal>) map.get("resultMouth")); //閿�鍞暟鎹� homePageDto.setSalesResults((List<Map<String, Object>>) map.get("salesResults")); diff --git a/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java b/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java index 8743696..1ad3232 100644 --- a/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java +++ b/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java @@ -28,6 +28,6 @@ //閿�鍞暟鎹� private List<Map<String, Object>> salesResults; //鏈堝害閿�鍞� - private List<Map<String, BigDecimal>> resultMouth; + private Map<String, BigDecimal> resultMouth; } diff --git a/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java b/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java index e81edb6..c7aa0cc 100644 --- a/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java +++ b/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java @@ -44,5 +44,10 @@ */ private String coal; + /** + * 鐧昏浜� + */ private String registrant; + + private String searchAll; } diff --git a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java index 32560a2..0567117 100644 --- a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java +++ b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java @@ -6,5 +6,7 @@ @Data public class SalesRecordDto extends SalesRecord { + private String searchAll; + private String coal; } diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java index 412e7bb..d76fcf5 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java +++ b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java @@ -15,6 +15,7 @@ import com.ruoyi.business.dto.PendingInventoryDto; import com.ruoyi.business.entity.OfficialInventory; import com.ruoyi.business.entity.PendingInventory; +import com.ruoyi.business.entity.SalesRecord; import com.ruoyi.business.mapper.OfficialInventoryMapper; import com.ruoyi.business.mapper.PendingInventoryMapper; import com.ruoyi.business.service.InputInventoryRecordService; @@ -22,6 +23,7 @@ import com.ruoyi.business.service.PendingInventoryService; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.system.mapper.SysUserMapper; import lombok.RequiredArgsConstructor; @@ -29,6 +31,8 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeParseException; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -65,6 +69,31 @@ public IPage<PendingInventoryDto> selectPendingInventoryList(Page page, PendingInventoryDto pendingInventoryDto) { // 1. 鏋勫缓涓绘煡璇� LambdaQueryWrapper<PendingInventory> queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotBlank(pendingInventoryDto.getSearchAll())) { + String searchValue = pendingInventoryDto.getSearchAll(); + // 1. 鍏堝皾璇曚綔涓烘棩鏈熸煡璇� + try { + LocalDate RegistrationDate = LocalDate.parse(searchValue); + queryWrapper.eq(PendingInventory::getRegistrationDate, RegistrationDate); + } catch (DateTimeParseException e) { + // 2. 濡傛灉涓嶆槸鏃ユ湡锛屽垯浣滀负鐓ょ鍚嶇О鏌ヨ + LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>(); + coalQueryWrapper.like(CoalInfo::getCoal, searchValue); + List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper); + if (!coalInfos.isEmpty()) { + // 鎻愬彇鎵�鏈夊尮閰嶇殑鐓ょID + List<Long> coalIds = coalInfos.stream() + .map(CoalInfo::getId) + .collect(Collectors.toList()); + // 浣跨敤in鏌ヨ鍖归厤浠绘剰涓�涓叅绉岻D + queryWrapper.in(PendingInventory::getCoalId, coalIds); + } else { + // 3. 濡傛灉鎵句笉鍒扮叅绉嶏紝鍙互杩斿洖绌虹粨鏋� + queryWrapper.eq(PendingInventory::getCoalId, "-1"); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID + } + } + } + queryWrapper.orderByDesc(PendingInventory::getCreateTime); // 2. 鎵ц涓昏〃鍒嗛〉鏌ヨ diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java index 4157611..6a2d46c 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java +++ b/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java @@ -19,7 +19,9 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -282,13 +284,44 @@ * 灏嗗姞宸ヤ骇鐢熺殑浜у搧璁板綍鍒板緟鍏ュ簱琛� */ private void insertPendingInventory(List<Production> list) { + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedDate = currentDate.format(formatter); + // 甯搁噺瀹氫箟锛氫繚鐣�2浣嶅皬鏁帮紝鍥涜垗浜斿叆妯″紡 + final int SCALE = 2; + final RoundingMode ROUNDING_MODE = RoundingMode.HALF_UP; + // 绋庣巼13%锛岀敤瀛楃涓叉瀯閫燘igDecimal閬垮厤绮惧害璇樊 + final BigDecimal TAX_RATE = new BigDecimal("1.13"); + for (Production p : list) { PendingInventory pending = new PendingInventory(); pending.setCoalId(p.getCoalId()); pending.setInventoryQuantity(p.getProductionQuantity()); - pending.setSupplierName("鐢熶骇鍔犲伐鍏ュ簱"); - pending.setTotalPriceIncludingTax(p.getTotalCost()); - pending.setPriceIncludingTax(p.getPurchasePrice()); + pending.setUnit("t"); + pending.setSupplierName(formattedDate + " - " + "鐢熶骇鍔犲伐鍏ュ簱"); + + // 1. 闈炵┖澶勭悊锛氶伩鍏峮ull瀵艰嚧鐨勮繍绠楀紓甯� + BigDecimal totalCost = p.getTotalCost() == null ? BigDecimal.ZERO : p.getTotalCost(); + BigDecimal productionQuantity = p.getProductionQuantity() == null ? BigDecimal.ZERO : p.getProductionQuantity(); + + // 2. 鍚◣鎬讳环 = 鍚◣鍗曚环 * 浜ч噺 鈫� 淇濈暀2浣嶅皬鏁� + BigDecimal totalPriceIncludingTax = totalCost.multiply(productionQuantity) + .setScale(SCALE, ROUNDING_MODE); + pending.setTotalPriceIncludingTax(totalPriceIncludingTax); + + // 3. 鍚◣鍗曚环 鈫� 鐩存帴淇濈暀2浣嶅皬鏁� + pending.setPriceIncludingTax(totalCost.setScale(SCALE, ROUNDING_MODE)); + + // 4. 涓嶅惈绋庡崟浠� = 鍚◣鍗曚环 / 1.13 鈫� 鍏堥珮绮惧害璁$畻锛屽啀淇濈暀2浣� + BigDecimal priceExcludingTax = totalCost.divide(TAX_RATE, 10, ROUNDING_MODE) // 涓棿淇濈暀10浣嶉槻璇樊 + .setScale(SCALE, ROUNDING_MODE); // 鏈�缁堜繚鐣�2浣� + pending.setPriceExcludingTax(priceExcludingTax); + + // 5. 涓嶅惈绋庢�讳环 = 涓嶅惈绋庡崟浠� * 浜ч噺 鈫� 淇濈暀2浣嶅皬鏁� + BigDecimal totalPriceExcludingTax = priceExcludingTax.multiply(productionQuantity) + .setScale(SCALE, ROUNDING_MODE); + pending.setTotalPriceExcludingTax(totalPriceExcludingTax); + pending.setRegistrantId(p.getProducerId()); pending.setRegistrationDate(LocalDate.now()); pendingInventoryMapper.insert(pending); diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java index d2e9256..145cf5b 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java +++ b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java @@ -19,6 +19,7 @@ import com.ruoyi.business.service.SalesRecordService; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.system.mapper.SysUserMapper; import lombok.RequiredArgsConstructor; @@ -67,6 +68,32 @@ public IPage<SalesRecordDto> selectSalesRecordList(Page<SalesRecord> page, SalesRecordDto salesRecordDto) { // 1. 鍒涘缓鏌ヨ鏉′欢锛屾寜鍒涘缓鏃堕棿鍊掑簭鎺掑簭 LambdaQueryWrapper<SalesRecord> queryWrapper = new LambdaQueryWrapper<>(); + + if (StringUtils.isNotBlank(salesRecordDto.getSearchAll())) { + String searchValue = salesRecordDto.getSearchAll(); + // 1. 鍏堝皾璇曚綔涓烘棩鏈熸煡璇� + try { + LocalDate saleDate = LocalDate.parse(searchValue); + queryWrapper.eq(SalesRecord::getSaleDate, saleDate); + } catch (DateTimeParseException e) { + // 2. 濡傛灉涓嶆槸鏃ユ湡锛屽垯浣滀负鐓ょ鍚嶇О鏌ヨ + LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>(); + coalQueryWrapper.like(CoalInfo::getCoal, searchValue); + List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper); + if (!coalInfos.isEmpty()) { + // 鎻愬彇鎵�鏈夊尮閰嶇殑鐓ょID + List<Long> coalIds = coalInfos.stream() + .map(CoalInfo::getId) + .collect(Collectors.toList()); + // 浣跨敤in鏌ヨ鍖归厤浠绘剰涓�涓叅绉岻D + queryWrapper.in(SalesRecord::getCoalId, coalIds); + } else { + // 3. 濡傛灉鎵句笉鍒扮叅绉嶏紝鍙互杩斿洖绌虹粨鏋� + queryWrapper.eq(SalesRecord::getCoalId, "-1"); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID + } + } + } + queryWrapper.orderByDesc(SalesRecord::getCreateTime); // 2. 鑾峰彇鍒嗛〉鐨勯攢鍞褰� @@ -509,13 +536,13 @@ ) )); - //鏋勫缓缁撴灉锛堜繚鎸佺叅绉嶉『搴忥紝閿�閲忛粯璁や负0锛� - List<Map<String, Object>> resultMouth = new ArrayList<>(); + // 2. 鍒涘缓 resultMouth锛屽瓨鍌ㄧ叅绉嶅強鍏堕攢閲忥紙Map 缁撴瀯锛� + Map<String, BigDecimal> resultMouthMap = new LinkedHashMap<>(); for (CoalInfo coal : allCoalTypes) { - Map<String, Object> item = new LinkedHashMap<>(); - item.put("coal", coal.getCoal()); // 鐓ょ鍚嶇О - item.put("saleQuantity", salesByCoalId.getOrDefault(coal.getId(), BigDecimal.valueOf(0))); // 閿�閲� - resultMouth.add(item); + resultMouthMap.put( + coal.getCoal(), // 鐓ょ鍚嶇О锛堝 "鏃犵儫鐓�"锛� + salesByCoalId.getOrDefault(coal.getId(), BigDecimal.valueOf(0)) // 閿�閲� + ); } result.put("revenueAmount", revenueAmount.setScale(2, RoundingMode.HALF_UP)); @@ -526,7 +553,7 @@ result.put("trendQuantity", trendQuantity); result.put("revenueDistribution", revenueDistribution); result.put("salesResults", results); - result.put("resultMouth", resultMouth); + result.put("resultMouth", resultMouthMap); return result; } diff --git a/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql b/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql index 4f0fe0e..f26b885 100644 --- a/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql +++ b/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql @@ -5,7 +5,7 @@ sale_date DATE NOT NULL, -- 閿�鍞棩鏈� customer_id BIGINT, -- 瀹㈡埛id customer VARCHAR(255) NOT NULL, -- 瀹㈡埛 - coal_id VARCHAR(255) NOT NULL, -- 鐓ょ id + coal_id BIGINT NOT NULL, -- 鐓ょ id price_including_tax DECIMAL(10, 2) NOT NULL, -- 鍗曚环锛堝惈绋庯級 inventory_quantity DECIMAL(10, 0) NOT NULL, -- 搴撳瓨鏁伴噺 unit VARCHAR(100) NOT NULL, -- 鍗曚綅 @@ -18,8 +18,8 @@ gross_profit DECIMAL(10, 2), -- 姣涘埄娑� net_profit DECIMAL(10, 2), -- 鍑�鍒╂鼎 registrant_id BIGINT, -- 鐧昏浜篿d - registrant VARCHAR(255) NOT NULL, -- 鐧昏浜� - registration_date DATE NOT NULL, -- 鐧昏鏃ユ湡 + registrant VARCHAR(255) , -- 鐧昏浜� + registration_date DATE , -- 鐧昏鏃ユ湡 create_time TIMESTAMP WITHOUT TIME ZONE, -- 涓婁紶鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂� update_time TIMESTAMP WITHOUT TIME ZONE, -- 鏈�鍚庢洿鏂版椂闂达紝榛樿褰撳墠鏃堕棿 -- Gitblit v1.9.3