main-business/src/main/java/com/ruoyi/business/controller/FileController.java
ÎļþÒÑɾ³ý main-business/src/main/java/com/ruoyi/business/controller/SalesRecordController.java
@@ -29,8 +29,8 @@ * éå®è®°å½è¡¨æ¥è¯¢ */ @GetMapping("/list") public R<IPage<SalesRecord>> list(Page page, SalesRecordDto salesRecordDto) { IPage<SalesRecord> list = salesRecordService.selectSalesRecordList(page,salesRecordDto); public R<IPage<SalesRecordDto>> list(Page<SalesRecord> page, SalesRecordDto salesRecordDto) { IPage<SalesRecordDto> list = salesRecordService.selectSalesRecordList(page,salesRecordDto); return R.ok(list); } main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java
@@ -13,4 +13,9 @@ private List<Long> ids; /** * ç ¤ç§ */ private String coal; } main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
@@ -38,4 +38,11 @@ * åæ®µå */ private Integer type; /** * ç ¤ç§ */ private String coal; private String registrant; } main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
@@ -5,4 +5,6 @@ @Data public class SalesRecordDto extends SalesRecord { private String coal; } main-business/src/main/java/com/ruoyi/business/entity/File.java
ÎļþÒÑɾ³ý main-business/src/main/java/com/ruoyi/business/entity/PendingInventory.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.MyBaseEntity; import lombok.Data; @@ -81,10 +82,11 @@ * ç»è®°äºº */ @TableField(value = "registrant_id") private String registrantId; private Long registrantId; /** * ç»è®°æ¥æ */ @TableField(value = "registration_date") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate registrationDate; } main-business/src/main/java/com/ruoyi/business/entity/Production.java
@@ -76,7 +76,7 @@ * ç产人ID */ @TableField(value = "producer_id") private String producerId; private Long producerId; /** * çäº§æ¥æ */ main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java
@@ -48,11 +48,6 @@ @TableField(value = "coal_id") private Long coalId; /** * ç ¤ç§ */ @TableField(value = "coal") private String coal; /** * åä»·ï¼å«ç¨ï¼ */ @TableField(value = "price_including_tax") main-business/src/main/java/com/ruoyi/business/mapper/FileMapper.java
ÎļþÒÑɾ³ý main-business/src/main/java/com/ruoyi/business/service/FileService.java
ÎļþÒÑɾ³ý main-business/src/main/java/com/ruoyi/business/service/SalesRecordService.java
@@ -2,9 +2,9 @@ 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.business.dto.SalesRecordDto; import com.ruoyi.business.entity.SalesRecord; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> @@ -16,7 +16,7 @@ */ public interface SalesRecordService extends IService<SalesRecord> { IPage<SalesRecord> selectSalesRecordList(Page page, SalesRecordDto salesRecordDto); IPage<SalesRecordDto> selectSalesRecordList(Page<SalesRecord> page, SalesRecordDto salesRecordDto); int addOrEditSalesRecord(SalesRecordDto salesRecordDto); main-business/src/main/java/com/ruoyi/business/service/impl/ArchiveServiceImpl.java
@@ -57,6 +57,9 @@ // 1. å页æ¥è¯¢ä¸»æ°æ® LambdaQueryWrapper<Archive> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByDesc(Archive::getCreateTime); if (archiveDto.getTreeId() != null) { queryWrapper.eq(Archive::getTreeId, archiveDto.getTreeId()); } IPage<Archive> archivePage = archiveMapper.selectPage(page, queryWrapper); // 2. æ æ°æ®æåè¿å @@ -137,6 +140,7 @@ // 7. æå»ºè¿åå页对象 IPage<ArchiveDto> resultPage = new Page<>(); BeanUtils.copyProperties(archivePage, resultPage); resultPage.setRecords(dtoList); return resultPage; } main-business/src/main/java/com/ruoyi/business/service/impl/FileServiceImpl.java
ÎļþÒÑɾ³ý main-business/src/main/java/com/ruoyi/business/service/impl/InspectionTaskServiceImpl.java
@@ -120,6 +120,7 @@ // 7. æå»ºè¿åå页对象 IPage<InspectionTaskDto> resultPage = new Page<>(); BeanUtils.copyProperties(entityPage, resultPage); resultPage.setRecords(dtoList); return resultPage; } main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.entity.CoalField; import com.ruoyi.basic.entity.CoalInfo; import com.ruoyi.basic.entity.CoalValue; import com.ruoyi.basic.mapper.CoalFieldMapper; import com.ruoyi.basic.mapper.CoalInfoMapper; import com.ruoyi.basic.mapper.CoalValueMapper; import com.ruoyi.business.dto.OfficialInventoryDto; import com.ruoyi.business.entity.OfficialInventory; @@ -23,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** @@ -42,6 +45,8 @@ private final CoalValueMapper coalValueMapper; private final CoalFieldMapper coalFieldMapper; private final CoalInfoMapper coalInfoMapper; @Override @@ -63,6 +68,21 @@ .map(CoalField::getFields) .distinct() .collect(Collectors.toList()); //æ¥è¯¢ç ¤ç§ids List<Long> coalIds = entityPage.getRecords().stream() .map(OfficialInventory::getCoalId) .distinct() .collect(Collectors.toList()); // æ¹éæ¥è¯¢CoalInfo Map<Long, CoalInfo> coalInfoMap; if (!coalIds.isEmpty()) { List<CoalInfo> coalInfos = coalInfoMapper.selectList(new LambdaQueryWrapper<CoalInfo>().in(CoalInfo::getId, coalIds)); coalInfoMap = coalInfos.stream().collect(Collectors.toMap(CoalInfo::getId, Function.identity())); } else { coalInfoMap = new HashMap<>(); } // é忝æ¡è®°å½ï¼è¿è¡è½¬æ¢å¹¶å¡«å fields for (OfficialInventory entity : entityPage.getRecords()) { @@ -97,6 +117,12 @@ fields.add(fieldMap); } // 设置Coalä¿¡æ¯ CoalInfo coalInfo = coalInfoMap.get(entity.getCoalId()); if (coalInfo != null) { dto.setCoal(coalInfo.getCoal()); } // è®¾ç½®å° DTO ä¸ dto.setFields(fields); dtoList.add(dto); @@ -120,6 +146,8 @@ .map(OI -> { OfficialInventoryVo vo = new OfficialInventoryVo(); BeanUtils.copyProperties(OI, vo); CoalInfo coalInfo = coalInfoMapper.selectById(OI.getCoalId()); vo.setCoal(coalInfo.getCoal()); return vo; }) .collect(Collectors.toList()); main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.entity.CoalField; import com.ruoyi.basic.entity.CoalInfo; import com.ruoyi.basic.entity.CoalValue; import com.ruoyi.basic.mapper.CoalFieldMapper; import com.ruoyi.basic.mapper.CoalInfoMapper; import com.ruoyi.basic.mapper.CoalValueMapper; import com.ruoyi.business.dto.PendingInventoryDto; import com.ruoyi.business.entity.OfficialInventory; @@ -18,14 +20,17 @@ import com.ruoyi.business.service.InputInventoryRecordService; import com.ruoyi.business.service.InventorySummaryService; 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.bean.BeanUtils; import com.ruoyi.system.mapper.SysUserMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** @@ -47,6 +52,10 @@ private final CoalValueMapper coalValueMapper; private final CoalFieldMapper coalFieldMapper; private final CoalInfoMapper coalInfoMapper; private final SysUserMapper sysUserMapper; private final InputInventoryRecordService inputInventoryRecordService; @@ -71,20 +80,63 @@ .map(PendingInventory::getId) .collect(Collectors.toList()); // 5. æ¹éæ¥è¯¢å ³èçæ£å¼åºåä¿¡æ¯ // 5. æ¹éæ¥è¯¢å ³èçç ¤çä¿¡æ¯åæ£å¼åºåä¿¡æ¯ List<Long> coalIds = pendingInventoryPage.getRecords().stream() .map(PendingInventory::getCoalId) .distinct() .collect(Collectors.toList()); // æ¹éæ¥è¯¢CoalInfo Map<Long, CoalInfo> coalInfoMap; if (!coalIds.isEmpty()) { List<CoalInfo> coalInfos = coalInfoMapper.selectList(new LambdaQueryWrapper<CoalInfo>().in(CoalInfo::getId, coalIds)); coalInfoMap = coalInfos.stream().collect(Collectors.toMap(CoalInfo::getId, Function.identity())); } else { coalInfoMap = new HashMap<>(); } // 5. æ¹éæ¥è¯¢ç»è®°äººid List<Long> registrantIds = pendingInventoryPage.getRecords().stream() .map(PendingInventory::getRegistrantId) .distinct() .toList(); // æ¹éæ¥è¯¢ç»è®°äºº Map<Long, SysUser> sysUserMap; if (!registrantIds.isEmpty()) { List<SysUser> sysUsers = sysUserMapper.selectList(registrantIds); sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); } else { sysUserMap = new HashMap<>(); } // æ¹éæ¥è¯¢æ£å¼åºåä¿¡æ¯ Map<Long, Long> pendingToOfficialMap = getOfficialInventoryMap(pendingIds); // 6. 使ç¨MyBatis-Plusçconvertæ¹æ³è½¬æ¢DTO // 6. 转æ¢DTO并设置ç¸å ³å段 return pendingInventoryPage.convert(record -> { PendingInventoryDto dto = new PendingInventoryDto(); BeanUtils.copyProperties(record, dto); // 设置Coalä¿¡æ¯ CoalInfo coalInfo = coalInfoMap.get(record.getCoalId()); if (coalInfo != null) { dto.setCoal(coalInfo.getCoal()); } // 设置ç»è®°äºº SysUser sysUser = sysUserMap.get(record.getRegistrantId()); if (sysUser != null) { dto.setRegistrant(sysUser.getNickName()); } // ä»é¢å è½½çMapä¸è·åofficialId dto.setOfficialId(pendingToOfficialMap.getOrDefault(record.getId(), null)); return dto; }); } // æ¹éè·åå¾ å¤çåºå䏿£å¼åºåçæ å°å ³ç³» private Map<Long, Long> getOfficialInventoryMap(List<Long> pendingIds) { if (CollectionUtils.isEmpty(pendingIds)) { main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
@@ -5,7 +5,6 @@ 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.ruoyi.basic.entity.CoalInfo; import com.ruoyi.basic.mapper.CoalInfoMapper; import com.ruoyi.business.dto.ProductionMasterDto; import com.ruoyi.business.entity.*; @@ -18,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -77,7 +77,6 @@ IPage<ProductionMasterDto> dtoPage = new Page<>(); BeanUtils.copyProperties(entityPage, dtoPage, "records"); dtoPage.setRecords(dtoList); return dtoPage; } @@ -212,8 +211,6 @@ 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); @@ -264,7 +261,8 @@ pending.setSupplierName("ç产å å·¥å ¥åº"); pending.setTotalPriceIncludingTax(p.getTotalCost()); pending.setPriceIncludingTax(p.getPurchasePrice()); pending.setPriceIncludingTax(p.getPurchasePrice()); pending.setRegistrantId(p.getProducerId()); pending.setRegistrationDate(LocalDate.now()); pendingInventoryMapper.insert(pending); } } main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.entity.CoalInfo; import com.ruoyi.basic.entity.Customer; import com.ruoyi.basic.mapper.CoalInfoMapper; import com.ruoyi.basic.mapper.CustomerMapper; import com.ruoyi.business.dto.SalesRecordDto; import com.ruoyi.business.entity.OfficialInventory; @@ -22,6 +24,11 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** * <p> @@ -43,12 +50,60 @@ private final OfficialInventoryMapper officialInventoryMapper; private final CoalInfoMapper coalInfoMapper; @Override public IPage<SalesRecord> selectSalesRecordList(Page page, SalesRecordDto salesRecordDto) { public IPage<SalesRecordDto> selectSalesRecordList(Page<SalesRecord> page, SalesRecordDto salesRecordDto) { // 1. å建æ¥è¯¢æ¡ä»¶ï¼æå建æ¶é´ååºæåº LambdaQueryWrapper<SalesRecord> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByDesc(SalesRecord::getCreateTime); return salesRecordMapper.selectPage(page, queryWrapper); // 2. è·åå页çéå®è®°å½ IPage<SalesRecord> salesRecordPage = salesRecordMapper.selectPage(page, queryWrapper); // 3. æ¹éæ¥è¯¢ææCoalInfo List<Long> coalIds = salesRecordPage.getRecords().stream() .map(SalesRecord::getCoalId) // è·åææSalesRecordçcoalId .collect(Collectors.toList()); Map<Long, CoalInfo> coalInfoMap; // 妿æç ¤çIDï¼æ§è¡æ¹éæ¥è¯¢ if (!coalIds.isEmpty()) { // 使ç¨selectListè¿è¡æ¹éæ¥è¯¢ LambdaQueryWrapper<CoalInfo> coalInfoQueryWrapper = new LambdaQueryWrapper<>(); coalInfoQueryWrapper.in(CoalInfo::getId, coalIds); List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalInfoQueryWrapper); // å°æ¥è¯¢ç»ææ¾å ¥Mapä¸ï¼ç ¤çID为é®ï¼CoalInfoä¸ºå¼ coalInfoMap = coalInfos.stream() .collect(Collectors.toMap(CoalInfo::getId, Function.identity())); } else { coalInfoMap = new HashMap<>(); } // 4. å建è¿åç»æé¡µï¼ä½¿ç¨BeanUtilsè¿è¡å±æ§å¤å¶ Page<SalesRecordDto> resultPage = new Page<>(); BeanUtils.copyProperties(salesRecordPage, resultPage); // å¤å¶åé¡µä¿¡æ¯ // 5. 转æ¢SalesRecord为SalesRecordDtoï¼å¹¶è®¾ç½®æ¯æ¡éå®è®°å½çç ¤çä¿¡æ¯ List<SalesRecordDto> dtoList = salesRecordPage.getRecords().stream().map(salesRecord -> { SalesRecordDto dto = new SalesRecordDto(); BeanUtils.copyProperties(salesRecord, dto); // å°SalesRecordç屿§å¤å¶å°SalesRecordDtoä¸ // 设置Coalä¿¡æ¯ CoalInfo coalInfo = coalInfoMap.get(salesRecord.getCoalId()); if (coalInfo != null) { dto.setCoal(coalInfo.getCoal()); } return dto; }).collect(Collectors.toList()); resultPage.setRecords(dtoList); // 设置转æ¢åçDTOå表 return resultPage; } @Override @Transactional(rollbackFor = Exception.class) @@ -61,7 +116,7 @@ if (officialInventory == null) { throw new BaseException("æ£å¼åºç ¤ç§ä¿¡æ¯ä¸åå¨"); } if (salesRecordDto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0){ if (salesRecordDto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0) { throw new BaseException("é宿°éä¸è½å¤§äºåºåæ°é"); } officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(salesRecordDto.getSaleQuantity())); @@ -69,7 +124,7 @@ officialInventoryMapper.updateById(officialInventory); // æå»ºéå®è®°å½å®ä½ SalesRecord salesRecord = buildSalesRecord(salesRecordDto,officialInventory.getCoalId()); SalesRecord salesRecord = buildSalesRecord(salesRecordDto, officialInventory.getCoalId()); // å¤çæ°å¢/æ´æ°é»è¾ if (salesRecordDto.getId() == null) { @@ -94,7 +149,7 @@ } } private SalesRecord buildSalesRecord(SalesRecordDto dto,Long coalId) { private SalesRecord buildSalesRecord(SalesRecordDto dto, Long coalId) { SalesRecord record = new SalesRecord(); BeanUtils.copyProperties(dto, record); main-business/src/main/java/com/ruoyi/business/service/impl/TreeServiceImpl.java
@@ -33,6 +33,7 @@ public List<TreeVo> selectTreeList(TreeDto treeDto) { // æ¥è¯¢æ ¹èç¹ï¼parentId 为 nullï¼ LambdaQueryWrapper<Tree> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByAsc(Tree::getCreateTime); queryWrapper.isNull(Tree::getParentId); // 妿æäº§ååç§°æ¡ä»¶ï¼æ·»å å°æ¥è¯¢ä¸ main-business/src/main/java/com/ruoyi/business/vo/OfficialInventoryVo.java
@@ -8,6 +8,7 @@ public class OfficialInventoryVo { private Long id; // 主é®ID private Long coalId; // ç ¤ç§id private String coal; // ç ¤ç§ private String unit; // åä½ private BigDecimal inventoryQuantity; // åºåæ°é main-business/src/main/resources/db/migration/postgresql/V20250604101800__create_table_production.sql
@@ -10,7 +10,7 @@ equipment_depreciation DECIMAL(10, 2) NOT NULL, -- è®¾å¤ææ§ purchase_price DECIMAL(10, 2) NOT NULL, -- éè´åä»· total_cost DECIMAL(10, 2) NOT NULL, -- æ»ææ¬ producer_id VARCHAR(50), -- ç产人id producer_id BIGINT, -- ç产人id producer VARCHAR(50), -- ç产人 production_date DATE, -- çäº§æ¥æ main-business/src/main/resources/db/migration/postgresql/V20250604104500__create_table_pending_inventory.sql
@@ -12,7 +12,7 @@ registration_time TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, -- ç»è®°æ¶é´ price_excluding_tax VARCHAR(255), -- åä»·ï¼ä¸å«ç¨ï¼ total_price_excluding_tax VARCHAR(255), -- æ»ä»·ï¼ä¸å«ç¨ï¼ registrant_id VARCHAR(32), -- ç»è®°äººID registrant_id BIGINT, -- ç»è®°äººID registration_date DATE, -- ç»è®°æ¥æ supplier_id BIGINT, -- ä¾è´§åID coal_id BIGINT, -- ç ¤ç§ID main-business/src/main/resources/db/migration/postgresql/V20250610161314__create_table_file.sql
ÎļþÒÑɾ³ý main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql
@@ -6,7 +6,6 @@ customer_id BIGINT, -- 客æ·id customer VARCHAR(255) NOT NULL, -- å®¢æ· coal_id VARCHAR(255) NOT NULL, -- ç ¤ç§ id coal VARCHAR(255) NOT NULL, -- ç ¤ç§ price_including_tax DECIMAL(10, 2) NOT NULL, -- åä»·ï¼å«ç¨ï¼ inventory_quantity DECIMAL(10, 0) NOT NULL, -- åºåæ°é unit VARCHAR(100) NOT NULL, -- åä½ @@ -37,7 +36,6 @@ COMMENT ON COLUMN sales_record.sale_date IS 'é宿¥æ'; COMMENT ON COLUMN sales_record.customer IS '客æ·'; COMMENT ON COLUMN sales_record.customer_id IS '客æ·id'; COMMENT ON COLUMN sales_record.coal IS 'ç ¤ç§'; COMMENT ON COLUMN sales_record.coal_id IS 'ç ¤ç§id'; COMMENT ON COLUMN sales_record.unit IS 'åä½'; COMMENT ON COLUMN sales_record.price_including_tax IS 'åä»·ï¼å«ç¨ï¼'; main-business/src/main/resources/mapper/FileMapper.xml
ÎļþÒÑɾ³ý ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -129,4 +129,6 @@ * æ¥è¯¢ææç¨æ· */ List<SysUser> selectUserListAll(); List<SysUser> selectList(List<Long> registrantIds); } ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -144,8 +144,22 @@ <select id="selectUserListAll" resultType="com.ruoyi.common.core.domain.entity.SysUser"> select user_id, nick_name from sys_user where del_flag = '0' </select> <select id="selectList" resultType="com.ruoyi.common.core.domain.entity.SysUser"> SELECT user_id, nick_name FROM sys_user <where> <if test="list != null and list.size() > 0"> user_id IN <foreach item="id" collection="list" open="(" separator="," close=")"> #{id} </foreach> </if> <if test="list == null or list.size() == 0"> 1=0 <!-- 空å表æ¶è¿åç©ºç»æ --> </if> </where> </select> <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId"> <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId"> insert into sys_user( <if test="userId != null and userId != 0">user_id,</if> <if test="deptId != null and deptId != 0">dept_id,</if>