From 94509204d25f7c0ad213ae2322be2bd5bfd17424 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 14 七月 2025 16:30:28 +0800
Subject: [PATCH] 1.初始化配煤计算器数据 2。配煤到待入库
---
basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java | 3
main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java | 124 ++++++++++++++++
basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java | 10 -
main-business/src/main/java/com/ruoyi/business/controller/OfficialInventoryController.java | 7 +
basic-server/src/main/java/com/ruoyi/basic/mapper/CoalPlanMapper.java | 2
main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java | 2
basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java | 2
main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java | 41 +++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java | 74 ++++++++--
basic-server/src/main/java/com/ruoyi/basic/service/CoalPlanService.java | 2
main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java | 5
main-business/src/main/java/com/ruoyi/business/service/OfficialInventoryService.java | 2
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java | 41 +++++
ruoyi-common/src/main/java/com/ruoyi/common/handler/MyMetaObjectHandler.java | 48 +++++-
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalPlanServiceImpl.java | 10 +
basic-server/src/main/resources/mapper/CoalPlanMapper.xml | 11 +
basic-server/src/main/resources/mapper/CoalFieldMapper.xml | 15 ++
17 files changed, 353 insertions(+), 46 deletions(-)
diff --git a/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java b/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java
index 3eae657..6824305 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java
@@ -6,15 +6,5 @@
@Data
public class CoalFieldDto extends CoalField {
- private String fieldName;
-
- public CoalFieldDto(String name) {
- this.fieldName = name;
- }
-
- public static CoalFieldDto from(String name) {
- return new CoalFieldDto(name);
- }
-
private String searchAll;
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java
index 86f532d..53a7941 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalFieldMapper.java
@@ -4,6 +4,7 @@
import com.ruoyi.basic.entity.CoalField;
import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
import java.util.Set;
/**
@@ -18,4 +19,6 @@
public interface CoalFieldMapper extends BaseMapper<CoalField> {
Set<String> getFieldNamesByNames(Set<String> fieldNames);
+
+ List<CoalField> getFieldsByNames(Set<String> filteredNames);
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalPlanMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalPlanMapper.java
index 472e117..ccf281a 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalPlanMapper.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/mapper/CoalPlanMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.basic.entity.CoalPlan;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
/**
* <p>
@@ -15,4 +16,5 @@
@Mapper
public interface CoalPlanMapper extends BaseMapper<CoalPlan> {
+ int existsFieldIds(@Param("fieldIds") String fieldIds);
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java b/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java
index 1980cec..672076f 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/CoalFieldService.java
@@ -28,4 +28,6 @@
List<CoalField> selectAllList(CoalFieldDto coalFieldDto);
Set<String> getFieldNamesByNames(Set<String> collect);
+
+ List<CoalFieldDto> getFieldsByNames(Set<String> fieldNames);
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/CoalPlanService.java b/basic-server/src/main/java/com/ruoyi/basic/service/CoalPlanService.java
index a52f24b..883f9eb 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/CoalPlanService.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/CoalPlanService.java
@@ -28,4 +28,6 @@
List<CoalPlan> selectAllList();
List<CoalFieldVo> selectCoalPlanById(Long id);
+
+ boolean checkPlanExists(String fieldIds);
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java
index 73d18d2..e476244 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java
@@ -9,16 +9,19 @@
import com.ruoyi.basic.entity.CoalField;
import com.ruoyi.basic.mapper.CoalFieldMapper;
import com.ruoyi.basic.service.CoalFieldService;
+import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.bean.BeanUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* <p>
@@ -82,6 +85,44 @@
}
@Override
+ public List<CoalFieldDto> getFieldsByNames(Set<String> fieldNames) {
+ // 1. 鍙傛暟鏍¢獙
+ if (fieldNames == null || fieldNames.isEmpty()) {
+ throw new IllegalArgumentException("瀛楁鍚嶉泦鍚堜笉鑳戒负绌�");
+ }
+
+ // 2. 杩囨护绌哄��
+ Set<String> filteredNames = fieldNames.stream()
+ .filter(name -> name != null && !name.trim().isEmpty())
+ .collect(Collectors.toSet());
+
+ if (filteredNames.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ // 3. 鏌ヨ鏁版嵁搴�
+ try {
+ List<CoalField> entities = coalFieldMapper.getFieldsByNames(filteredNames);
+
+ // 4. 瀹炰綋杞珼TO
+ return entities.stream()
+ .map(this::convertToDto)
+ .collect(Collectors.toList());
+
+ } catch (Exception e) {
+ throw new BaseException("鏌ヨ鐓よ川瀛楁淇℃伅澶辫触锛岃绋嶅悗閲嶈瘯");
+ }
+ }
+
+ private CoalFieldDto convertToDto(CoalField entity) {
+ CoalFieldDto dto = new CoalFieldDto();
+ dto.setId(entity.getId());
+ dto.setFields(entity.getFields());
+ dto.setFieldName(entity.getFieldName());
+ return dto;
+ }
+
+ @Override
public Set<String> getFieldNamesByNames(Set<String> fieldNames) {
return coalFieldMapper.getFieldNamesByNames(fieldNames);
}
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalPlanServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalPlanServiceImpl.java
index 5aa8eaa..3d6b7eb 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalPlanServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalPlanServiceImpl.java
@@ -78,6 +78,16 @@
}
@Override
+ public boolean checkPlanExists(String fieldIds) {
+ if (StringUtils.isBlank(fieldIds)) {
+ return false;
+ }
+
+ // 鏌ヨ鏁版嵁搴�
+ return coalPlanMapper.existsFieldIds(fieldIds) > 0;
+ }
+
+ @Override
public List<CoalFieldVo> selectCoalPlanById(Long id) {
CoalPlan coalPlan = coalPlanMapper.selectById(id);
LambdaQueryWrapper<CoalField> coalFieldLambdaQueryWrapper = new LambdaQueryWrapper<>();
diff --git a/basic-server/src/main/resources/mapper/CoalFieldMapper.xml b/basic-server/src/main/resources/mapper/CoalFieldMapper.xml
index d945f3f..6be4060 100644
--- a/basic-server/src/main/resources/mapper/CoalFieldMapper.xml
+++ b/basic-server/src/main/resources/mapper/CoalFieldMapper.xml
@@ -27,7 +27,20 @@
<select id="getFieldNamesByNames" resultType="java.lang.String">
SELECT field_name FROM coal_field WHERE field_name IN
<foreach collection="fieldNames" item="name" open="(" separator="," close=")">
- #{fieldNames}
+ #{name}
+ </foreach>
+ </select>
+ <select id="getFieldsByNames" resultType="com.ruoyi.basic.entity.CoalField">
+ SELECT
+ id,
+ field_name AS fieldName,
+ fields AS fields
+ FROM
+ coal_field
+ WHERE
+ field_name IN
+ <foreach collection="filteredNames" item="name" open="(" separator="," close=")">
+ #{name}
</foreach>
</select>
diff --git a/basic-server/src/main/resources/mapper/CoalPlanMapper.xml b/basic-server/src/main/resources/mapper/CoalPlanMapper.xml
index 1619359..89f9048 100644
--- a/basic-server/src/main/resources/mapper/CoalPlanMapper.xml
+++ b/basic-server/src/main/resources/mapper/CoalPlanMapper.xml
@@ -11,8 +11,9 @@
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="plan" property="plan" />
- <result column="coal_field_id" property="coalFieldId" />
- <result column="field_names" property="fieldNames" />
+ <result column="coal_fields" property="coalFields" />
+ <result column="field_ids" property="fieldIds" />
+ <result column="scheme_desc" property="schemeDesc" />
</resultMap>
<!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
@@ -24,5 +25,11 @@
update_time,
id, plan, coal_field_id, field_names
</sql>
+ <select id="existsFieldIds" resultType="java.lang.Integer">
+ SELECT COUNT(1)
+ FROM coal_plan
+ WHERE field_ids = #{fieldIds}
+ AND deleted = 0
+ </select>
</mapper>
\ No newline at end of file
diff --git a/main-business/src/main/java/com/ruoyi/business/controller/OfficialInventoryController.java b/main-business/src/main/java/com/ruoyi/business/controller/OfficialInventoryController.java
index 4dca675..ab16d4f 100644
--- a/main-business/src/main/java/com/ruoyi/business/controller/OfficialInventoryController.java
+++ b/main-business/src/main/java/com/ruoyi/business/controller/OfficialInventoryController.java
@@ -69,4 +69,11 @@
return R.ok(officialInventoryService.mergeAll(officialInventoryDto));
}
+ /**
+ * 閰嶇叅璁$畻鍣ㄩ�夋嫨list
+ */
+ @GetMapping("/coalBlendingList")
+ public R<List<OfficialInventoryDto>> coalBlendingList() {
+ return R.ok(officialInventoryService.coalBlendingList());
+ }
}
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java b/main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java
index 79b234f..d381090 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java
@@ -1,5 +1,6 @@
package com.ruoyi.business.dto;
+import com.ruoyi.basic.entity.CoalValue;
import com.ruoyi.business.entity.OfficialInventory;
import lombok.Data;
@@ -17,4 +18,8 @@
private String supplierName; //渚涘簲鍟�
+ private String supplierCoal; //渚涘簲鍟� + 鐓ょ
+
+ private List<CoalValue> coalValues; //濯掕川鏂规瀛楁鍊�
+
}
diff --git a/main-business/src/main/java/com/ruoyi/business/service/OfficialInventoryService.java b/main-business/src/main/java/com/ruoyi/business/service/OfficialInventoryService.java
index 98d7270..5036b83 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/OfficialInventoryService.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/OfficialInventoryService.java
@@ -32,4 +32,6 @@
List<OfficialInventory> selectOfficialAll();
Map<String, BigDecimal> selectOfficialAllInfo();
+
+ List<OfficialInventoryDto> coalBlendingList();
}
diff --git a/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java b/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java
index 6a93210..1d761b3 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java
@@ -24,5 +24,5 @@
int addOrEditCoalValue(PendingInventoryDto pendingInventoryDto);
- int addPending(PendingInventoryDto pendingInventoryDto);
+ boolean addPending(PendingInventoryDto pendingInventoryDto);
}
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
index 131b109..ab87226 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
@@ -333,6 +333,47 @@
}
@Override
+ public List<OfficialInventoryDto> coalBlendingList() {
+ // 1. 鏌ヨ鍩虹搴撳瓨鏁版嵁
+ List<OfficialInventory> officialInventories = officialInventoryMapper.selectList(null);
+ // 2. 鏀堕泦鎵�鏈夐渶瑕佹煡璇㈢殑ID
+ Set<Long> coalIds = new HashSet<>();
+ Set<Long> supplierIds = new HashSet<>();
+ Set<Long> planIds = new HashSet<>();
+
+ officialInventories.forEach(inventory -> {
+ coalIds.add(inventory.getCoalId());
+ supplierIds.add(inventory.getSupplierId());
+ planIds.add(inventory.getCoalPlanId());
+ });
+ // 3. 鎵归噺鏌ヨ鍏宠仈鏁版嵁
+ Map<Long, CoalInfo> coalInfoMap = coalInfoMapper.selectByIds(coalIds).stream()
+ .collect(Collectors.toMap(CoalInfo::getId, Function.identity()));
+
+ Map<Long, Supply> supplyMap = supplyMapper.selectByIds(supplierIds).stream()
+ .collect(Collectors.toMap(Supply::getId, Function.identity()));
+
+ List<CoalValue> coalValues = coalValueMapper.selectList(
+ new LambdaQueryWrapper<CoalValue>().in(CoalValue::getPlanId, planIds));
+ // 4. 缁勮DTO
+ return officialInventories.stream()
+ .map(inventory -> {
+ OfficialInventoryDto dto = new OfficialInventoryDto();
+ BeanUtils.copyProperties(inventory, dto);
+ // 璁剧疆鐓ょ淇℃伅
+ CoalInfo coalInfo = coalInfoMap.get(inventory.getCoalId());
+ Supply supply = supplyMap.get(inventory.getSupplierId());
+ if (coalInfo != null && supply != null) {
+ dto.setSupplierCoal(supply.getSupplierName() + " - " + coalInfo.getCoal());
+ }
+ // 璁剧疆鐓よ川鏁版嵁
+ dto.setCoalValues(coalValues);
+ return dto;
+ })
+ .collect(Collectors.toList());
+ }
+
+ @Override
public Map<String, BigDecimal> selectOfficialAllInfo() {
// 1. 鏌ヨ official_inventory 琛ㄦ暟鎹�
List<OfficialInventory> officialInventories = officialInventoryMapper.selectList(null);
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 275e084..cacd7f6 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
@@ -6,9 +6,11 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mchange.v2.lang.SystemUtils;
import com.ruoyi.basic.dto.CoalFieldDto;
import com.ruoyi.basic.entity.CoalField;
import com.ruoyi.basic.entity.CoalInfo;
+import com.ruoyi.basic.entity.CoalPlan;
import com.ruoyi.basic.entity.CoalValue;
import com.ruoyi.basic.mapper.CoalFieldMapper;
import com.ruoyi.basic.mapper.CoalInfoMapper;
@@ -16,6 +18,7 @@
import com.ruoyi.basic.mapper.CoalValueMapper;
import com.ruoyi.basic.service.CoalFieldService;
import com.ruoyi.basic.service.CoalPlanService;
+import com.ruoyi.basic.service.CoalValueService;
import com.ruoyi.business.dto.PendingInventoryDto;
import com.ruoyi.business.entity.OfficialInventory;
import com.ruoyi.business.entity.PendingInventory;
@@ -29,6 +32,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.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.system.mapper.SysUserMapper;
@@ -38,11 +42,13 @@
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeParseException;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
@@ -72,10 +78,8 @@
private final InputInventoryRecordService inputInventoryRecordService;
private final InventorySummaryService inventorySummaryService;
-
- private final CoalFieldService coalFieldService;
-
- private final CoalPlanService coalPlanService;
+ private final CoalPlanMapper coalPlanMapper;
+ private final CoalValueService coalValueService;
@Override
public IPage<PendingInventoryDto> selectPendingInventoryList(Page page, PendingInventoryDto pendingInventoryDto) {
@@ -297,7 +301,115 @@
@Override
@Transactional
- public int addPending(PendingInventoryDto pendingInventoryDto) {
- return 1;
+ public boolean addPending(PendingInventoryDto pendingInventoryDto) {
+ try {
+ CoalPlan coalPlan = coalPlanMapper.selectOne(new LambdaQueryWrapper<CoalPlan>().eq(CoalPlan::getPlan, "閰嶇叅璁$畻鍣ㄦ柟妗�"));
+ if (coalPlan == null) {
+ return false;
+ }
+
+ // 娣诲姞鍒板緟鍏ュ簱
+ Long userId = SecurityUtils.getUserId();
+ PendingInventory pendingInventory = new PendingInventory();
+ pendingInventory.setUnit("t");
+ pendingInventory.setRegistrantId(userId);
+ pendingInventory.setRegistrationDate(LocalDate.now());
+
+ for (Map<String, Object> map : pendingInventoryDto.getFieldsResultList()) {
+ pendingInventory.setSupplierName("閰嶇叅璁$畻鍣ㄦ柟妗堝叆搴�");
+
+ // 澶勭悊鐓ょ偔ID
+ if (map.get("coalId") == null) {
+ CoalInfo coalInfo = new CoalInfo();
+ coalInfo.setCoal((String) map.get("createCoal"));
+ coalInfo.setMaintainerId(userId);
+ coalInfo.setMaintenanceDate(LocalDate.now());
+ if (coalInfoMapper.insert(coalInfo) <= 0) {
+ return false;
+ }
+ pendingInventory.setCoalId(coalInfo.getId());
+ } else {
+ pendingInventory.setCoalId((Long) map.get("coalId"));
+ }
+
+ // 璁剧疆浠锋牸鍜屾暟閲�
+ BigDecimal cost = BigDecimal.valueOf((Double) map.get("cost"));
+ BigDecimal tonnage = BigDecimal.valueOf((Double) map.get("totalTonnage"));
+
+ pendingInventory.setPriceIncludingTax(cost);
+ pendingInventory.setInventoryQuantity(tonnage);
+ pendingInventory.setTotalPriceIncludingTax(cost.multiply(tonnage));
+
+ BigDecimal costExcludingTax = cost.divide(BigDecimal.valueOf(1.13), 2, RoundingMode.HALF_UP);
+ pendingInventory.setPriceExcludingTax(costExcludingTax);
+ pendingInventory.setTotalPriceExcludingTax(costExcludingTax.multiply(tonnage));
+ pendingInventory.setCoalPlanId(coalPlan.getId());
+
+ // 鐓よ川瀛楁鍊�
+ String coalFields = coalPlan.getCoalFields();
+ List<String> coalFieldList = Arrays.asList(coalFields.split(","));
+
+ for (String field : coalFieldList) {
+ CoalField coalField = coalFieldMapper.selectOne(
+ new LambdaQueryWrapper<CoalField>().eq(CoalField::getFields, field));
+ if (coalField == null) {
+ continue;
+ }
+
+ CoalValue coalValue = new CoalValue();
+ coalValue.setPlanId(coalPlan.getId());
+ coalValue.setFields(field);
+ coalValue.setFieldName(coalField.getFieldName());
+ coalValue.setType("1");
+
+ switch (coalField.getFieldName()) {
+ case "鍙戠儹閲�":
+ coalValue.setCoalValue((String) map.get("cv"));
+ break;
+ case "纭垎":
+ coalValue.setCoalValue((String) map.get("sulfur"));
+ break;
+ case "鐏板垎":
+ coalValue.setCoalValue((String) map.get("ash"));
+ break;
+ case "姘村垎":
+ coalValue.setCoalValue((String) map.get("moisture"));
+ break;
+ }
+
+ // 淇濆瓨鐓よ川鍊�
+ if (coalValueMapper.insert(coalValue) <= 0) {
+ return false;
+ }
+ }
+ }
+
+ // 鎻掑叆寰呭叆搴撹褰�
+ if (pendingInventoryMapper.insert(pendingInventory) <= 0) {
+ return false;
+ }
+
+ // 鏇存柊姝e紡搴�
+ for (Map<String, Object> coalResult : pendingInventoryDto.getCoalResultList()) {
+ Long officialId = (Long) coalResult.get("officialId");
+ BigDecimal quantity = (BigDecimal) coalResult.get("quantity");
+ OfficialInventory officialInventory = officialInventoryMapper.selectById(officialId);
+
+ if (officialInventory == null || officialInventory.getInventoryQuantity().compareTo(quantity) < 0) {
+ throw new BaseException("搴撳瓨鏁伴噺涓嶈冻锛屾坊鍔犺嚦寰呭叆搴撳け璐�");
+ }
+
+ officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(quantity));
+ if (officialInventoryMapper.updateById(officialInventory) <= 0) {
+ return false;
+ }
+ }
+
+ return true;
+ } catch (Exception e) {
+ // 璁板綍鏃ュ織
+ log.error("娣诲姞寰呭叆搴撳け璐�", e);
+ throw new BaseException("娣诲姞寰呭叆搴撳け璐�: " + e.getMessage());
+ }
}
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java
index 321646e..771817d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/init/MyStartupRunner.java
@@ -2,14 +2,14 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.basic.dto.CoalFieldDto;
+import com.ruoyi.basic.dto.CoalPlanDto;
import com.ruoyi.basic.entity.City;
-import com.ruoyi.basic.entity.CoalField;
import com.ruoyi.basic.entity.District;
import com.ruoyi.basic.entity.Province;
import com.ruoyi.basic.mapper.*;
import com.ruoyi.basic.service.CoalFieldService;
import com.ruoyi.basic.service.CoalPlanService;
-import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.web.controller.init.dto.AreaDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,9 +18,9 @@
import org.springframework.stereotype.Component;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.Set;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -48,7 +48,7 @@
public void run(String... args) throws Exception {
// 鍒濆鍖栫渷甯傚尯
initRegion();
- // 鍒濆鏂板閰嶇叅璁$畻鍣ㄤ腑鐨勫瓧娈靛拰鏂规
+ // 鍒濆鏂板閰嶇叅璁$畻鍣ㄤ腑鐨勭叅绉嶅瓧娈靛拰鏂规
initCoalFields();
}
@@ -120,19 +120,63 @@
}
private void initCoalFields() {
+ try {
+ // 1. 鍒濆鍖栧瓧娈甸�昏緫
+ Supplier<CoalFieldDto> dtoSupplier = CoalFieldDto::new; // 鍋囪瀛樺湪鏃犲弬鏋勯�犲嚱鏁�
- List<CoalFieldDto> fields = Stream.of("鍙戠儹閲�", "纭垎", "鐏板垎", "姘村垎")
- .map(CoalFieldDto::from)
- .toList();
- // 鎵归噺鑾峰彇宸插瓨鍦ㄧ殑 fieldNames
- Set<String> existingFieldNames = coalFieldService.getFieldNamesByNames(
- fields.stream().map(CoalFieldDto::getFieldName).collect(Collectors.toSet())
- );
+ List<CoalFieldDto> fields = Stream.of("鍙戠儹閲�", "纭垎", "鐏板垎", "姘村垎")
+ .map(fieldName -> {
+ CoalFieldDto dto = dtoSupplier.get();
+ dto.setFieldName(fieldName); // 鍋囪瀛樺湪 setFieldName 鏂规硶
+ dto.setFieldDescription("閰嶇叅璁$畻鍣ㄥ獟璐ㄥ瓧娈�");
+ return dto;
+ })
+ .toList();
- fields.forEach(field -> {
- if (!existingFieldNames.contains(field.getFieldName())) {
- coalFieldService.addOrEditCoalField(field);
+ // 2. 淇濆瓨瀛楁锛堝鏋滀笉瀛樺湪锛�
+ Set<String> existingNames = coalFieldService.getFieldNamesByNames(
+ fields.stream().map(CoalFieldDto::getFieldName).collect(Collectors.toSet())
+ );
+
+ fields.forEach(field -> {
+ if (!existingNames.contains(field.getFieldName())) {
+ coalFieldService.addOrEditCoalField(field);
+ }
+ });
+
+ // 3. 鏌ヨ鎵�鏈夊瓧娈礗D
+ List<CoalFieldDto> allFields = coalFieldService.getFieldsByNames(
+ fields.stream().map(CoalFieldDto::getFieldName).collect(Collectors.toSet())
+ );
+
+ // 4. 鍒涘缓鏂规
+
+ String planName = "閰嶇叅璁$畻鍣ㄦ柟妗�";
+ boolean planExists = coalPlanService.checkPlanExists(allFields.stream()
+ .map(f -> f.getId().toString())
+ .collect(Collectors.joining(",")));
+
+ if (!planExists) {
+ // 鍒涘缓鏂版柟妗�
+ CoalPlanDto planDto = new CoalPlanDto();
+ planDto.setPlan(planName);
+ planDto.setCoalFields(allFields.stream()
+ .map(CoalFieldDto::getFields)
+ .collect(Collectors.joining(",")));
+ planDto.setFieldIds(allFields.stream()
+ .map(f -> f.getId().toString())
+ .collect(Collectors.joining(",")));
+ planDto.setSchemeDesc("绯荤粺鐢熸垚閰嶇叅璁$畻鍣ㄦ墍闇�瀛楁鏂规");
+
+ coalPlanService.addOrEditCoalPlan(planDto);
+ log.info("鎴愬姛鍒涘缓閰嶇叅璁$畻鍣ㄦ柟妗�");
+ } else {
+ log.info("閰嶇叅璁$畻鍣ㄦ柟妗堝凡瀛樺湪锛岃烦杩囧垱寤�");
}
- });
+ } catch (Exception e) {
+ // 璁板綍绯荤粺寮傚父鏃ュ織锛屽苟杞崲涓轰笟鍔″紓甯告姏鍑猴紙瑙﹀彂鍥炴粴锛�
+ log.error("閰嶇叅璁$畻鍣ㄥ垵濮嬪寲澶辫触", e);
+ throw new BaseException("鍒濆鍖栭厤鐓ゆ柟妗堝け璐ワ紝璇风◢鍚庨噸璇�");
+ }
}
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/handler/MyMetaObjectHandler.java b/ruoyi-common/src/main/java/com/ruoyi/common/handler/MyMetaObjectHandler.java
index 1ec12de..da15fc7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/handler/MyMetaObjectHandler.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/handler/MyMetaObjectHandler.java
@@ -10,27 +10,53 @@
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
+ private static final String SYSTEM_USER = "system";
+
@Override
public void insertFill(MetaObject meta) {
LocalDateTime now = LocalDateTime.now();
- Long uid = SecurityUtils.getLoginUser().getUserId();
- if (uid != null) {
- strictInsertFill(meta, "createBy", String.class, uid.toString());
- strictInsertFill(meta, "updateBy", String.class, uid.toString());
+ String userId = getUserId();
+
+ if (hasField(meta, "createBy")) {
+ strictInsertFill(meta, "createBy", String.class, userId);
}
- strictInsertFill(meta, "createTime", LocalDateTime.class, now);
- strictInsertFill(meta, "updateTime", LocalDateTime.class, now);
+ if (hasField(meta, "updateBy")) {
+ strictInsertFill(meta, "updateBy", String.class, userId);
+ }
+ if (hasField(meta, "createTime")) {
+ strictInsertFill(meta, "createTime", LocalDateTime.class, now);
+ }
+ if (hasField(meta, "updateTime")) {
+ strictInsertFill(meta, "updateTime", LocalDateTime.class, now);
+ }
}
@Override
public void updateFill(MetaObject meta) {
LocalDateTime now = LocalDateTime.now();
- Long uid = SecurityUtils.getLoginUser().getUserId();
- if (uid != null) {
- strictUpdateFill(meta, "updateBy", String.class, uid.toString());
+ String userId = getUserId();
+
+ if (hasField(meta, "updateBy")) {
+ strictUpdateFill(meta, "updateBy", String.class, userId);
}
- // 寮哄埗瑕嗙洊 updateTime
- setFieldValByName("updateTime", now, meta);
+ if (hasField(meta, "updateTime")) {
+ setFieldValByName("updateTime", now, meta);
+ }
}
+ private String getUserId() {
+ try {
+ Long uid = SecurityUtils.getLoginUser().getUserId();
+ return uid != null ? uid.toString() : SYSTEM_USER;
+ } catch (Exception e) {
+ return SYSTEM_USER;
+ }
+ }
+
+ private boolean hasField(MetaObject meta, String fieldName) {
+ if (meta == null || fieldName == null) {
+ return false;
+ }
+ return meta.hasGetter(fieldName) || meta.hasSetter(fieldName);
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3