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