From 5eec9b5a9d8bf9e49663d5a51cab7490fef5b204 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期二, 26 八月 2025 15:22:03 +0800 Subject: [PATCH] yys 生产管控(完成基本功能) --- main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java | 104 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 80 insertions(+), 24 deletions(-) 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 4d3b647..25dae27 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 @@ -12,12 +12,16 @@ import com.ruoyi.business.mapper.*; import com.ruoyi.business.service.ProductionMasterService; import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; 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; @@ -49,6 +53,32 @@ public IPage<ProductionMasterDto> selectPMList(Page page, ProductionMasterDto productionMasterDto) { // 1. 鏋勫缓涓昏〃鏌ヨ鏉′欢 LambdaQueryWrapper<ProductionMaster> masterQueryWrapper = new LambdaQueryWrapper<>(); + String keyword = productionMasterDto.getSearchAll(); + if (StringUtils.isNotBlank(keyword)) { + // 鏌ヨ鐓ょ鍚嶇О涓ā绯婂尮閰嶇殑coalId鍒楄〃 + List<Long> matchedCoalIds = coalInfoMapper.selectList( + new LambdaQueryWrapper<CoalInfo>().like(CoalInfo::getCoal, keyword) + ).stream() + .map(CoalInfo::getId) + .toList(); + + // 缁勮鏌ヨ鏉′欢锛氱叅绉岻D鍦ㄥ尮閰嶇殑鍒楄〃涓� + // 濡傛灉 matchedCoalIds 涓虹┖锛岀洿鎺ヨ繑鍥� 0 鏉℃暟鎹紙鏋勯�犱竴涓笉鍙兘鎴愮珛鐨勬潯浠讹級 + if (matchedCoalIds.isEmpty()) { + masterQueryWrapper.apply("1 = 0"); // 寮哄埗杩斿洖绌虹粨鏋� + } + // 濡傛灉鏈夊尮閰嶇殑 coalId锛屽垯鎸� coalId 鏌ヨ + else { + String ids = matchedCoalIds.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + + masterQueryWrapper.apply( + "{0} = ANY(string_to_array(coal_id, ','))", + ids + ); + } + } // 2. 鎵ц涓昏〃鍒嗛〉鏌ヨ IPage<ProductionMaster> entityPage = productionMasterMapper.selectPage(page, masterQueryWrapper); @@ -77,7 +107,6 @@ IPage<ProductionMasterDto> dtoPage = new Page<>(); BeanUtils.copyProperties(entityPage, dtoPage, "records"); dtoPage.setRecords(dtoList); - return dtoPage; } @@ -144,7 +173,7 @@ batchInsertInventories(masterId, dto.getProductionInventoryList()); // 鎻掑叆寰呭叆搴撴暟鎹� - insertPendingInventory(dto.getProductionList()); +// insertPendingInventory(dto.getProductionList()); return 1; } @@ -212,15 +241,12 @@ coalIds.add(p.getCoalId()); } - List<CoalInfo> coalInfos = coalInfoMapper.selectList(new LambdaQueryWrapper<CoalInfo>().in(CoalInfo::getId, coalIds)); - ProductionMaster master = new ProductionMaster(); master.setProductionQuantity(totalQuantity); master.setTotalCost(totalCost); master.setLaborCost(totalLabor); master.setEnergyConsumptionCost(totalEnergy); master.setEquipmentDepreciation(totalDepreciation); - master.setCoal(coalInfos.stream().map(CoalInfo::getCoal).collect(Collectors.joining(","))); master.setCoalId(coalIds.stream().map(String::valueOf).collect(Collectors.joining(","))); return master; @@ -237,6 +263,7 @@ BeanUtils.copyProperties(p, copy); copy.setId(null); copy.setProductionMasterId(masterId); + copy.setStatus(1); productionMapper.insert(copy); } } @@ -257,15 +284,44 @@ /** * 灏嗗姞宸ヤ骇鐢熺殑浜у搧璁板綍鍒板緟鍏ュ簱琛� */ - private void insertPendingInventory(List<Production> list) { + public void insertPendingInventory(List<Production> list) { + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedDate = currentDate.format(formatter); + final int SCALE = 2; + final RoundingMode ROUNDING_MODE = RoundingMode.HALF_UP; + 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.setPriceIncludingTax(p.getPurchasePrice()); + pending.setUnit("鍚�"); + pending.setSupplierName(formattedDate + " - " + "鐢熶骇鍔犲伐鍏ュ簱"); + + // 闈炵┖澶勭悊 + BigDecimal totalCost = p.getTotalCost() == null ? BigDecimal.ZERO : p.getTotalCost(); + BigDecimal productionQuantity = p.getProductionQuantity() == null ? BigDecimal.ZERO : p.getProductionQuantity(); + + // 鍚◣鎬讳环 + BigDecimal totalPriceIncludingTax = totalCost.multiply(productionQuantity) + .setScale(SCALE, ROUNDING_MODE); + pending.setTotalPriceIncludingTax(totalPriceIncludingTax); + + // 鍚◣鍗曚环 + pending.setPriceIncludingTax(totalCost.setScale(SCALE, ROUNDING_MODE)); + + // 涓嶅惈绋庡崟浠凤紙鐩存帴淇濈暀2浣嶅皬鏁帮級 + BigDecimal priceExcludingTax = totalCost.divide(TAX_RATE, SCALE, ROUNDING_MODE); + pending.setPriceExcludingTax(priceExcludingTax); + + // 涓嶅惈绋庢�讳环 + BigDecimal totalPriceExcludingTax = priceExcludingTax.multiply(productionQuantity) + .setScale(SCALE, ROUNDING_MODE); + pending.setTotalPriceExcludingTax(totalPriceExcludingTax); + + pending.setRegistrantId(p.getProducerId()); + pending.setRegistrationDate(LocalDate.now()); pendingInventoryMapper.insert(pending); } } @@ -347,20 +403,20 @@ } // 鎵归噺鏇存柊瀹樻柟搴撳瓨 - for (Map.Entry<Long, BigDecimal> entry : inventoryAdjustMap.entrySet()) { - OfficialInventory official = officialInventoryMapper.selectById(entry.getKey()); - if (official == null) { - throw new BaseException("瀹樻柟搴撳瓨涓嶅瓨鍦紝ID: " + entry.getKey()); - } - - // 浣跨敤绾跨▼瀹夊叏鐨凚igDecimal鎿嶄綔 - official.setInventoryQuantity( - Optional.ofNullable(official.getInventoryQuantity()) - .orElse(BigDecimal.ZERO) - .add(entry.getValue()) - ); - officialInventoryMapper.updateById(official); - } +// for (Map.Entry<Long, BigDecimal> entry : inventoryAdjustMap.entrySet()) { +// OfficialInventory official = officialInventoryMapper.selectById(entry.getKey()); +// if (official == null) { +// throw new BaseException("瀹樻柟搴撳瓨涓嶅瓨鍦紝ID: " + entry.getKey()); +// } +// +// // 浣跨敤绾跨▼瀹夊叏鐨凚igDecimal鎿嶄綔 +// official.setInventoryQuantity( +// Optional.ofNullable(official.getInventoryQuantity()) +// .orElse(BigDecimal.ZERO) +// .add(entry.getValue()) +// ); +// officialInventoryMapper.updateById(official); +// } // 鎵归噺鍒犻櫎鐢熶骇搴撳瓨 if (!productionIdsToDelete.isEmpty()) { -- Gitblit v1.9.3