liding
21 小时以前 c0efb2e8358f4e7ee0774c340afd453c3d0c2471
1.待入库煤质维护入正式库 2.电子档案tree
已修改28个文件
已删除8个文件
已添加7个文件
840 ■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/controller/CoalPlanController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/CoalQualityController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/CoalValueController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/CoalInfoDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/CoalPlanDto.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/CoalQualityDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/entity/CoalField.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/entity/CoalPlan.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/entity/CoalQuality.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/entity/CoalValue.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/mapper/CoalQualityMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/CoalPlanService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/CoalQualityService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/CoalValueService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalInfoServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalPlanServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalQualityServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalValueServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/vo/CoalFieldVo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/resources/db/migration/postgresql/V20250603151801__create_table_coal_quality.sql 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/resources/mapper/CoalQualityMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/controller/OfficialInventoryController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/controller/PendingInventoryController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/dto/ArchiveDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/dto/TreeDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/entity/OfficialInventory.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/entity/PendingInventory.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/OfficialInventoryService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/vo/TreeVo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/resources/db/migration/postgresql/V20250604104500__create_table_pending_inventory.sql 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/resources/db/migration/postgresql/V20250610161312__create_table_tree.sql 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/resources/db/migration/postgresql/V20250610161313__create_table_archive.sql 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/resources/db/migration/postgresql/V20250610161314__create_table_file.sql 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/MyBaseEntity.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/CoalPlanController.java
@@ -5,6 +5,7 @@
import com.ruoyi.basic.dto.CoalPlanDto;
import com.ruoyi.basic.entity.CoalPlan;
import com.ruoyi.basic.service.CoalPlanService;
import com.ruoyi.basic.vo.CoalFieldVo;
import com.ruoyi.common.core.domain.R;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@@ -45,6 +46,14 @@
    }
    /**
     * æ ¹æ®id查询煤质方案查询 è¿”回
     */
    @GetMapping("/coalPlanById")
    public R<List<CoalFieldVo>> coalPlanById(CoalPlanDto coalPlanDto) {
        return R.ok(coalPlanService.selectCoalPlanById(coalPlanDto.getId()));
    }
    /**
     * ç…¤è´¨æ–¹æ¡ˆæ–°å¢žä¿®æ”¹
     */
    @PostMapping("/addOrEditCoalPlan")
basic-server/src/main/java/com/ruoyi/basic/controller/CoalQualityController.java
ÎļþÒÑɾ³ý
basic-server/src/main/java/com/ruoyi/basic/controller/CoalValueController.java
@@ -34,21 +34,4 @@
        return R.ok(list);
    }
    /**
     * ç…¤è´¨æ–¹æ¡ˆå€¼æ–°å¢žä¿®æ”¹
     */
    @PostMapping("/addOrEditCoalValue")
    public R addOrEditCoalValue(@RequestBody CoalValueDto coalValueDto) {
        return R.ok(coalValueService.addOrEditCoalValue(coalValueDto));
    }
    /**
     * ç…¤è´¨æ–¹æ¡ˆå­—段删除
     */
    @DeleteMapping("/delCoalValue")
    public R remove(@RequestBody Long[] ids) {
        return R.ok(coalValueService.delCoalValueByIds(ids));
    }
}
basic-server/src/main/java/com/ruoyi/basic/dto/CoalFieldDto.java
@@ -5,4 +5,6 @@
@Data
public class CoalFieldDto extends CoalField {
    private String searchAll;
}
basic-server/src/main/java/com/ruoyi/basic/dto/CoalInfoDto.java
@@ -5,4 +5,6 @@
@Data
public class CoalInfoDto extends CoalInfo {
    private String searchAll;
}
basic-server/src/main/java/com/ruoyi/basic/dto/CoalPlanDto.java
@@ -3,6 +3,12 @@
import com.ruoyi.basic.entity.CoalPlan;
import lombok.Data;
import java.util.List;
@Data
public class CoalPlanDto extends CoalPlan {
    private List<String> fields;
    private String searchAll;
}
basic-server/src/main/java/com/ruoyi/basic/dto/CoalQualityDto.java
ÎļþÒÑɾ³ý
basic-server/src/main/java/com/ruoyi/basic/entity/CoalField.java
@@ -33,11 +33,6 @@
    private String fieldName;
    /**
     * å­—段名数字
     */
    @TableField(value = "field_name")
    private String fieldNumber;
    /**
     * å­—段描述
     */
    @TableField(value = "field_description")
basic-server/src/main/java/com/ruoyi/basic/entity/CoalPlan.java
@@ -27,6 +27,12 @@
    @TableField(value = "plan")
    private String plan;
    /**
     * ç…¤è´¨æ–¹æ¡ˆå­—段id
     */
    @TableField(value = "field_ids")
    private String fieldIds;
    /**
     * ç…¤è´¨æ–¹æ¡ˆå­—段
     */
    @TableField(value = "coal_fields")
basic-server/src/main/java/com/ruoyi/basic/entity/CoalQuality.java
ÎļþÒÑɾ³ý
basic-server/src/main/java/com/ruoyi/basic/entity/CoalValue.java
@@ -1,8 +1,13 @@
package com.ruoyi.basic.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.NumberDeserializers;
import com.ruoyi.common.core.domain.MyBaseEntity;
import lombok.Data;
/**
 * ç…¤è´¨æ–¹æ¡ˆå­—段值 å®žä½“ç±»
@@ -12,7 +17,8 @@
 */
@Data
@TableName("coal_value")
public class CoalValue extends MyBaseEntity {
public class
CoalValue extends MyBaseEntity {
    private static final long serialVersionUID = 1L;
@@ -20,6 +26,7 @@
     * ä¸»é”®ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    @JsonDeserialize(using = NumberDeserializers.LongDeserializer.class)
    private Long id;
    /**
basic-server/src/main/java/com/ruoyi/basic/mapper/CoalQualityMapper.java
ÎļþÒÑɾ³ý
basic-server/src/main/java/com/ruoyi/basic/service/CoalPlanService.java
@@ -5,6 +5,7 @@
import com.ruoyi.basic.dto.CoalPlanDto;
import com.ruoyi.basic.entity.CoalPlan;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.basic.vo.CoalFieldVo;
import java.util.List;
@@ -25,4 +26,6 @@
    int delCoalPlanByIds(Long[] ids);
    List<CoalPlan> selectAllList();
    List<CoalFieldVo> selectCoalPlanById(Long id);
}
basic-server/src/main/java/com/ruoyi/basic/service/CoalQualityService.java
ÎļþÒÑɾ³ý
basic-server/src/main/java/com/ruoyi/basic/service/CoalValueService.java
@@ -18,7 +18,4 @@
    IPage<CoalValue> selectCoalFieldList(Page page, CoalValueDto coalValueDto);
    int addOrEditCoalValue(CoalValueDto coalValueDto);
    int delCoalValueByIds(Long[] ids);
}
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalFieldServiceImpl.java
@@ -39,8 +39,8 @@
    @Override
    public IPage<CoalField> selectCoalFieldList(Page page, CoalFieldDto coalFieldDto) {
        LambdaQueryWrapper<CoalField> queryWrapper = new LambdaQueryWrapper<>();
        if (StringUtils.hasText(coalFieldDto.getFieldName())) {
            queryWrapper.like(CoalField::getFieldName, coalFieldDto.getFieldName());
        if (StringUtils.hasText(coalFieldDto.getSearchAll())) {
            queryWrapper.like(CoalField::getFieldName, coalFieldDto.getSearchAll());
        }
        queryWrapper.orderByDesc(CoalField::getCreateTime);
        return coalFieldMapper.selectPage(page, queryWrapper);
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalInfoServiceImpl.java
@@ -35,8 +35,8 @@
    @Override
    public IPage<CoalInfo> selectCoalInfoList(Page page, CoalInfoDto coalInfoDto) {
        LambdaQueryWrapper<CoalInfo> queryWrapper = new LambdaQueryWrapper<>();
        if (StringUtils.hasText(coalInfoDto.getCoal())) {
            queryWrapper.like(CoalInfo::getCoal,coalInfoDto.getCoal());
        if (StringUtils.hasText(coalInfoDto.getSearchAll())) {
            queryWrapper.like(CoalInfo::getCoal,coalInfoDto.getSearchAll());
        }
        queryWrapper.orderByDesc(CoalInfo::getCreateTime);
        return coalInfoMapper.selectPage(page, queryWrapper);
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalPlanServiceImpl.java
@@ -6,15 +6,21 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.dto.CoalPlanDto;
import com.ruoyi.basic.entity.CoalField;
import com.ruoyi.basic.entity.CoalPlan;
import com.ruoyi.basic.mapper.CoalFieldMapper;
import com.ruoyi.basic.mapper.CoalPlanMapper;
import com.ruoyi.basic.service.CoalPlanService;
import com.ruoyi.basic.vo.CoalFieldVo;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * <p>
@@ -30,10 +36,15 @@
    private final CoalPlanMapper coalPlanMapper;
    private final CoalFieldMapper coalFieldMapper;
    @Override
    public IPage<CoalPlan> selectCoalFieldList(Page page, CoalPlanDto coalPlanDto) {
        LambdaQueryWrapper<CoalPlan> queryWrapper = new LambdaQueryWrapper<>();
        return coalPlanMapper.selectPage(page,queryWrapper);
        if (StringUtils.hasText(coalPlanDto.getSearchAll())){
            queryWrapper.like(CoalPlan::getPlan,coalPlanDto.getSearchAll());
        }
        return coalPlanMapper.selectPage(page, queryWrapper);
    }
    @Override
@@ -65,4 +76,22 @@
    public List<CoalPlan> selectAllList() {
        return coalPlanMapper.selectList(null);
    }
    @Override
    public List<CoalFieldVo> selectCoalPlanById(Long id) {
        CoalPlan coalPlan = coalPlanMapper.selectById(id);
        LambdaQueryWrapper<CoalField> coalFieldLambdaQueryWrapper = new LambdaQueryWrapper<>();
        List<Long> ids = Arrays.stream(coalPlan.getFieldIds().split(",")).map(String::trim).map(Long::parseLong).collect(Collectors.toList());
        coalFieldLambdaQueryWrapper.in(CoalField::getId, ids);
        List<CoalField> coalFields = coalFieldMapper.selectList(coalFieldLambdaQueryWrapper);
        return coalFields.stream()
                .map(coalField -> {
                    CoalFieldVo dto = new CoalFieldVo();
                    dto.setId(coalField.getId());
                    dto.setFields(coalField.getFields());
                    dto.setFieldName(coalField.getFieldName());
                    return dto;
                })
                .collect(Collectors.toList());
    }
}
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalQualityServiceImpl.java
ÎļþÒÑɾ³ý
basic-server/src/main/java/com/ruoyi/basic/service/impl/CoalValueServiceImpl.java
@@ -5,18 +5,11 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.dto.CoalValueDto;
import com.ruoyi.basic.entity.CoalField;
import com.ruoyi.basic.entity.CoalValue;
import com.ruoyi.basic.mapper.CoalFieldMapper;
import com.ruoyi.basic.mapper.CoalValueMapper;
import com.ruoyi.basic.service.CoalValueService;
import com.ruoyi.common.utils.bean.BeanUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
@@ -32,43 +25,9 @@
    private final CoalValueMapper coalValueMapper;
    private final CoalFieldMapper coalFieldMapper;
    @Override
    public IPage<CoalValue> selectCoalFieldList(Page page, CoalValueDto coalValueDto) {
        LambdaQueryWrapper<CoalValue> queryWrapper = new LambdaQueryWrapper<>();
        return coalValueMapper.selectPage(page, queryWrapper);
    }
    @Override
    public int addOrEditCoalValue(CoalValueDto coalValueDto) {
        CoalValue coalValue = new CoalValue();
        BeanUtils.copyProperties(coalValueDto, coalValue);
        coalValue.setPlanId(coalValueDto.getPlanId());
        int i = 0;
        if (Objects.isNull(coalValueDto.getId())) {
            List<Map<String, String>> fieldValue = coalValueDto.getFieldValue();
            for (Map<String, String> field : fieldValue) {
                for (Map.Entry<String, String> entry : field.entrySet()) {
                    String key = entry.getKey();   // èŽ·å– key,这里会得到 "field01"
                    String value = entry.getValue(); // èŽ·å– value,这里会得到 "99"
                    LambdaQueryWrapper<CoalField> queryWrapper = new LambdaQueryWrapper<>();
                    CoalField coalField = coalFieldMapper.selectOne(queryWrapper.eq(CoalField::getFields, key));
                    coalValue.setCoalValue(value);
                    coalValue.setFields(coalField.getFields());
                    coalValue.setFieldName(coalField.getFieldName());
                    coalValue.setId(null);
                    i = coalValueMapper.insert(coalValue);
                }
            }
            return i;
        } else {
            return coalValueMapper.updateById(coalValue);
        }
    }
    @Override
    public int delCoalValueByIds(Long[] ids) {
        return 0;
    }
}
basic-server/src/main/java/com/ruoyi/basic/vo/CoalFieldVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.ruoyi.basic.vo;
import lombok.Data;
@Data
public class CoalFieldVo {
    private Long id;
    private String fields;
    private String fieldName;
}
basic-server/src/main/resources/db/migration/postgresql/V20250603151801__create_table_coal_quality.sql
ÎļþÒÑɾ³ý
basic-server/src/main/resources/mapper/CoalQualityMapper.xml
ÎļþÒÑɾ³ý
main-business/src/main/java/com/ruoyi/business/controller/OfficialInventoryController.java
@@ -3,7 +3,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.business.dto.OfficialInventoryDto;
import com.ruoyi.business.entity.OfficialInventory;
import com.ruoyi.business.service.OfficialInventoryService;
import com.ruoyi.common.core.domain.R;
import lombok.AllArgsConstructor;
@@ -31,8 +30,8 @@
     * æ­£å¼åº“库表查询
     */
    @GetMapping("/list")
    public R<IPage<OfficialInventory>> list(Page page, OfficialInventoryDto officialInventoryDto) {
        IPage<OfficialInventory> list = officialInventoryService.selectOfficialInventoryList(page,officialInventoryDto);
    public R<IPage<OfficialInventoryDto>> list(Page page, OfficialInventoryDto officialInventoryDto) {
        IPage<OfficialInventoryDto> list = officialInventoryService.selectOfficialInventoryList(page,officialInventoryDto);
        return R.ok(list);
    }
main-business/src/main/java/com/ruoyi/business/controller/PendingInventoryController.java
@@ -23,25 +23,34 @@
@RequestMapping("/pendingInventory")
public class PendingInventoryController {
        private PendingInventoryService pendingInventoryService;
    private PendingInventoryService pendingInventoryService;
    /**
     * å¾…入库表查询
     */
    @GetMapping("/list")
    public R<IPage<PendingInventory>> list(Page page, PendingInventoryDto pendingInventoryDto) {
        IPage<PendingInventory> list = pendingInventoryService.selectPendingInventoryList(page,pendingInventoryDto);
        IPage<PendingInventory> list = pendingInventoryService.selectPendingInventoryList(page, pendingInventoryDto);
        return R.ok(list);
    }
    /**
     * æ–°å¢žä¿®æ”¹
     * å¾…入库新增修改
     */
    @PostMapping("/addOrEditPending")
    public R addOrEditPending(@RequestBody PendingInventoryDto pendingInventoryDto) {
        return R.ok(pendingInventoryService.addOrEditPending(pendingInventoryDto));
    }
    /**
     * å¾…入库煤质方案值修改保存
     */
    @PostMapping("/addOrEditCoalValue")
    public R addOrEditCoalValue(@RequestBody PendingInventoryDto pendingInventoryDto) {
        return R.ok(pendingInventoryService.addOrEditCoalValue(pendingInventoryDto));
    }
    /**
     * åˆ é™¤
     */
main-business/src/main/java/com/ruoyi/business/dto/ArchiveDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.ruoyi.business.dto;
import com.ruoyi.business.entity.Archive;
import lombok.Data;
@Data
public class ArchiveDto extends Archive {
    private Long treeId;
}
main-business/src/main/java/com/ruoyi/business/dto/OfficialInventoryDto.java
@@ -3,6 +3,11 @@
import com.ruoyi.business.entity.OfficialInventory;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class OfficialInventoryDto extends OfficialInventory {
    private List<Map<String, String>> fields;
}
main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
@@ -1,8 +1,30 @@
package com.ruoyi.business.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ruoyi.business.entity.PendingInventory;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class PendingInventoryDto extends PendingInventory {
    @JsonProperty("pId")
    private Long pId;
    private List<Map<String, String>> fieldValue;
    /**
     * å­—段值
     */
    private String coalValue;
    /**
     * å­—段
     */
    private String fields;
    /**
     * å­—段名
     */
    private String fieldName;
}
main-business/src/main/java/com/ruoyi/business/dto/TreeDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.ruoyi.business.dto;
import com.ruoyi.business.entity.Tree;
import lombok.Data;
@Data
public class TreeDto extends Tree {
}
main-business/src/main/java/com/ruoyi/business/entity/OfficialInventory.java
@@ -26,7 +26,12 @@
     * ä¸»é”®ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private Long id;
    /**
     * å¾…入库id
     */
    @TableField(value = "pending_id")
    private Long pendingId;
    /**
     * ä¾›è´§å•†åç§°
     */
@@ -35,8 +40,8 @@
    /**
     * ç…¤ç§
     */
    @TableField(value = "coal_type")
    private String coalType;
    @TableField(value = "coal")
    private String coal;
    /**
     * å•位
     */
main-business/src/main/java/com/ruoyi/business/entity/PendingInventory.java
@@ -20,13 +20,11 @@
@TableName("pending_inventory")
public class PendingInventory extends MyBaseEntity {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸»é”®ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private Long id;
    /**
     * ä¾›è´§å•†åç§°
     */
main-business/src/main/java/com/ruoyi/business/service/OfficialInventoryService.java
@@ -16,5 +16,5 @@
 */
public interface OfficialInventoryService extends IService<OfficialInventory> {
    IPage<OfficialInventory> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto);
    IPage<OfficialInventoryDto> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto);
}
main-business/src/main/java/com/ruoyi/business/service/PendingInventoryService.java
@@ -21,4 +21,6 @@
    int addOrEditPending(PendingInventoryDto pendingInventoryDto);
    int delByIds(Long[] ids);
    int addOrEditCoalValue(PendingInventoryDto pendingInventoryDto);
}
main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
@@ -3,13 +3,25 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.CoalField;
import com.ruoyi.basic.entity.CoalValue;
import com.ruoyi.basic.mapper.CoalFieldMapper;
import com.ruoyi.basic.mapper.CoalValueMapper;
import com.ruoyi.business.dto.OfficialInventoryDto;
import com.ruoyi.business.entity.OfficialInventory;
import com.ruoyi.business.mapper.OfficialInventoryMapper;
import com.ruoyi.business.mapper.PendingInventoryMapper;
import com.ruoyi.business.service.OfficialInventoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.ruoyi.common.utils.bean.BeanUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
@@ -25,9 +37,66 @@
    private final OfficialInventoryMapper officialInventoryMapper;
    private final CoalValueMapper coalValueMapper;
    private final CoalFieldMapper coalFieldMapper;
    private final PendingInventoryMapper pendingInventoryMapper;
    @Override
    public IPage<OfficialInventory> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto) {
    public IPage<OfficialInventoryDto> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto) {
        //  å…ˆæŸ¥å‡ºåŽŸå§‹æ•°æ®ï¼ˆOfficialInventory)
        LambdaQueryWrapper<OfficialInventory> queryWrapper = new LambdaQueryWrapper<>();
        return officialInventoryMapper.selectPage(page, queryWrapper);
        IPage<OfficialInventory> entityPage = officialInventoryMapper.selectPage(page, queryWrapper);
        //  åˆ›å»ºä¸€ä¸ªæ–°çš„ Dto åˆ†é¡µç»“æžœ
        IPage<OfficialInventoryDto> dtoPage = new Page<>();
        BeanUtils.copyProperties(entityPage, dtoPage);
        List<OfficialInventoryDto> dtoList = new ArrayList<>();
        //  æŸ¥è¯¢æ‰€æœ‰å¯ç”¨å­—段(CoalField)
        List<CoalField> coalFields = coalFieldMapper.selectList(null);
        List<String> allFieldNames = coalFields.stream()
                .map(CoalField::getFields)
                .distinct()
                .collect(Collectors.toList());
        //  éåŽ†æ¯æ¡è®°å½•ï¼Œè¿›è¡Œè½¬æ¢å¹¶å¡«å…… fields
        for (OfficialInventory entity : entityPage.getRecords()) {
            OfficialInventoryDto dto = new OfficialInventoryDto();
            BeanUtils.copyProperties(entity, dto);
            Long pendingId = entity.getPendingId();
            //  æŸ¥è¯¢è¯¥ pendingId å¯¹åº”çš„ CoalValue æ•°æ®
            List<CoalValue> coalValues = coalValueMapper.selectList(
                    new LambdaQueryWrapper<CoalValue>().eq(CoalValue::getPlanId, pendingId)
            );
            //  æž„建 Map<fieldName, value>
            Map<String, String> fieldValueMap = coalValues.stream()
                    .collect(Collectors.toMap(
                            CoalValue::getFields,
                            CoalValue::getCoalValue,
                            (existing, replacement) -> existing // é‡å¤å­—段保留第一个
                    ));
            // æž„造最终 fields åˆ—表,包含所有字段名,并设置默认值 "-"
            List<Map<String, String>> fields = new ArrayList<>();
            for (String field : allFieldNames) {
                Map<String, String> fieldMap = new HashMap<>();
                fieldMap.put(field, fieldValueMap.getOrDefault(field, "-"));
                fields.add(fieldMap);
            }
            // è®¾ç½®åˆ° DTO ä¸­
            dto.setFields(fields);
            dtoList.add(dto);
        }
        dtoPage.setRecords(dtoList); // è®¾ç½®è½¬æ¢åŽçš„ DtoList
        return dtoPage;
    }
}
main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
@@ -3,19 +3,31 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.CoalField;
import com.ruoyi.basic.entity.CoalValue;
import com.ruoyi.basic.mapper.CoalFieldMapper;
import com.ruoyi.basic.mapper.CoalValueMapper;
import com.ruoyi.business.dto.PendingInventoryDto;
import com.ruoyi.business.entity.OfficialInventory;
import com.ruoyi.business.entity.PendingInventory;
import com.ruoyi.business.mapper.OfficialInventoryMapper;
import com.ruoyi.business.mapper.PendingInventoryMapper;
import com.ruoyi.business.service.PendingInventoryService;
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.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * <p>
@@ -30,6 +42,8 @@
public class PendingInventoryServiceImpl extends ServiceImpl<PendingInventoryMapper, PendingInventory> implements PendingInventoryService {
    private final PendingInventoryMapper pendingInventoryMapper;
    private final OfficialInventoryMapper officialInventoryMapper;
    private final CoalValueMapper coalValueMapper;
@@ -66,4 +80,69 @@
        // æ‰§è¡Œæ‰¹é‡é€»è¾‘删除
        return pendingInventoryMapper.update(null, updateWrapper);
    }
    @Transactional
    @Override
    public int addOrEditCoalValue(PendingInventoryDto pendingInventoryDto) {
        // Step 1: åˆ é™¤åŽŸæœ‰ planId ç›¸å…³æ•°æ®
        coalValueMapper.delete(new LambdaQueryWrapper<CoalValue>()
                .eq(CoalValue::getPlanId, pendingInventoryDto.getPId()));
        // Step 2: æž„建基础 CoalValue å¯¹è±¡
        CoalValue coalValue = new CoalValue();
        BeanUtils.copyProperties(coalValue, pendingInventoryDto);
        coalValue.setPlanId(pendingInventoryDto.getPId());
        List<Map<String, String>> fieldValue = pendingInventoryDto.getFieldValue();
        if (CollectionUtils.isEmpty(fieldValue)) {
            throw new BaseException("字段值不能为空");
        }
        // Step 3: æå‰èŽ·å–æ‰€æœ‰ field -> CoalField æ˜ å°„,避免重复查库
        Set<String> allFields = fieldValue.stream()
                .flatMap(map -> map.keySet().stream())
                .collect(Collectors.toSet());
        List<CoalField> coalFields = coalFieldMapper.selectList(
                new LambdaQueryWrapper<CoalField>().in(CoalField::getFields, allFields));
        Map<String, String> fieldMap = coalFields.stream()
                .collect(Collectors.toMap(
                        CoalField::getFields,
                        CoalField::getFieldName));
        // Step 4: æ‰¹é‡æ’å…¥
        int i = 0;
        for (Map<String, String> fieldMapEntry : fieldValue) {
            for (Map.Entry<String, String> entry : fieldMapEntry.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                String fieldName = fieldMap.get(key);
                if (fieldName == null) {
                    throw new BaseException("字段名不存在");
                }
                coalValue.setId(null); // æ¸…空 id,确保每次都是新记录
                coalValue.setCoalValue(value);
                coalValue.setFields(key);
                coalValue.setFieldName(fieldName);
                i = coalValueMapper.insert(coalValue);
            }
        }
        if (i > 0) {
            BigDecimal quantity = pendingInventoryDto.getInventoryQuantity();
            PendingInventory pendingInventory = pendingInventoryMapper.selectById(pendingInventoryDto.getPId());
            if (pendingInventory == null) {
                throw new BaseException("待入库记录不存在");
            }
            BigDecimal left = pendingInventory.getInventoryQuantity().subtract(quantity);
            if (left.compareTo(BigDecimal.ZERO) > 0) {
                pendingInventory.setInventoryQuantity(left);
                pendingInventoryMapper.updateById(pendingInventory);
            } else {
                pendingInventoryMapper.deleteById(pendingInventoryDto.getPId());
            }
            officialInventoryMapper.delete(new LambdaQueryWrapper<OfficialInventory>().eq(OfficialInventory::getPendingId, pendingInventoryDto.getPId()));
            OfficialInventory officialInventory = new OfficialInventory();
            BeanUtils.copyProperties(pendingInventory, officialInventory);
            officialInventory.setId(null);
            officialInventory.setPendingId(pendingInventoryDto.getPId());
            officialInventory.setInventoryQuantity(quantity);
            officialInventoryMapper.insert(officialInventory);
        }
        return i;
    }
}
main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java
@@ -17,6 +17,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.math.BigDecimal;
import java.util.Objects;
/**
@@ -52,7 +53,6 @@
        // åˆ›å»ºé‡‡è´­ç™»è®°å®žä½“并复制属性
        PurchaseRegistration purchaseRegistration = new PurchaseRegistration();
        BeanUtils.copyProperties(purchaseRegistrationDto, purchaseRegistration);
        if (Objects.isNull(purchaseRegistrationDto.getId())) {
            // æ–°å¢žé‡‡è´­ç™»è®°
            int insertCount = purchaseRegistrationMapper.insert(purchaseRegistration);
@@ -79,9 +79,8 @@
        BeanUtils.copyProperties(purchaseRegistration, pendingInventory);
        // è®¾ç½®å¾…入库记录特有的属性(如果有)
        // pendingInventory.setStatus(InventoryStatus.PENDING);
        // pendingInventory.setCreateTime(LocalDateTime.now());
         pendingInventory.setInventoryQuantity(purchaseRegistration.getPurchaseQuantity());
         pendingInventory.setCostPerUnit(new BigDecimal(22));
        return pendingInventory;
    }
main-business/src/main/java/com/ruoyi/business/vo/TreeVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.business.vo;
import lombok.Data;
import java.util.List;
@Data
public class TreeVo {
    private Long id;
    private Long parentId;
    private String name;
    private String label; // ç”¨äºŽæ ‘形结构的显示名称
    private List<TreeVo> children;
}
main-business/src/main/resources/db/migration/postgresql/V20250604104500__create_table_pending_inventory.sql
@@ -1,7 +1,7 @@
-- åˆ›å»ºå¾…入库表
CREATE TABLE pending_inventory
(
    id                        SERIAL PRIMARY KEY,                                 -- ä¸»é”®ID
    id                        BIGSERIAL PRIMARY KEY,                                 -- ä¸»é”®ID
    supplier_name             VARCHAR(255)   NOT NULL,                            -- ä¾›è´§å•†åç§°
    coal_type                 VARCHAR(50)    NOT NULL,                            -- ç…¤ç§
    unit                      VARCHAR(50)    NOT NULL,                            -- å•位
main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql
@@ -1,7 +1,7 @@
-- åˆ›å»ºæ­£å¼åº“表
CREATE TABLE official_inventory
(
    id                         SERIAL PRIMARY KEY,                                 -- ä¸»é”®ID
    id                         BIGSERIAL PRIMARY KEY,                                 -- ä¸»é”®ID
    supplier_name              VARCHAR(255)   NOT NULL,                            -- ä¾›è´§å•†åç§°
    coal_type                  VARCHAR(50)    NOT NULL,                            -- ç…¤ç§
    unit                       VARCHAR(50)    NOT NULL,                            -- å•位
main-business/src/main/resources/db/migration/postgresql/V20250610161312__create_table_tree.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
-- åˆ›å»ºæ¡£æ¡ˆè¡¨
CREATE TABLE tree
(
    id          BIGSERIAL PRIMARY KEY,                              -- ä¸»é”®ID,自动递增
    name        VARCHAR(255) NOT NULL,                              -- åç§°
    parent_id   BIGINT,                                             -- çˆ¶id
    deleted     INT          NOT NULL    DEFAULT 0,                 -- è½¯åˆ é™¤æ ‡å¿—:0=未删除,1=已删除
    create_by   VARCHAR(255),                                       -- åˆ›å»ºäººç”¨æˆ·å
    create_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- åˆ›å»ºæ—¶é—´ï¼Œé»˜è®¤å½“前时间
    update_by   VARCHAR(255),                                       -- æœ€åŽæ›´æ–°äººç”¨æˆ·å
    update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP  -- æœ€åŽæ›´æ–°æ—¶é—´ï¼Œé»˜è®¤å½“前时间-- ç™»è®°æ—¥æœŸ
);
-- è¡¨æ³¨é‡Š
COMMENT ON TABLE tree IS '档案信息表,记录系统中各类档案的基本信息';
-- å­—段注释
COMMENT ON COLUMN tree.id IS '主键ID';
COMMENT ON COLUMN tree.deleted IS '软删除标志,0=未删除,1=已删除';
COMMENT ON COLUMN tree.create_by IS '创建该记录的用户';
COMMENT ON COLUMN tree.create_time IS '记录创建时间';
COMMENT ON COLUMN tree.update_by IS '最后修改该记录的用户';
COMMENT ON COLUMN tree.update_time IS '记录最后更新时间';
main-business/src/main/resources/db/migration/postgresql/V20250610161313__create_table_archive.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
-- åˆ›å»ºæ¡£æ¡ˆè¡¨
CREATE TABLE archive
(
    id          BIGSERIAL PRIMARY KEY,                              -- ä¸»é”®ID,自动递增
    name        VARCHAR(255) NOT NULL,                              -- æ¡£æ¡ˆåç§°
    type        VARCHAR(255) NOT NULL,                              -- æ¡£æ¡ˆç±»åž‹ï¼ˆå¦‚:合同、报告、证件等)
    status      VARCHAR(50)  NOT NULL,                              -- çŠ¶æ€ï¼ˆå¦‚ï¼šæœ‰æ•ˆã€è¿‡æœŸã€ä½œåºŸï¼‰
    deleted     INT          NOT NULL    DEFAULT 0,                 -- è½¯åˆ é™¤æ ‡å¿—:0=未删除,1=已删除
    create_by   VARCHAR(255),                                       -- åˆ›å»ºäººç”¨æˆ·å
    create_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- åˆ›å»ºæ—¶é—´ï¼Œé»˜è®¤å½“前时间
    update_by   VARCHAR(255),                                       -- æœ€åŽæ›´æ–°äººç”¨æˆ·å
    update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP  -- æœ€åŽæ›´æ–°æ—¶é—´ï¼Œé»˜è®¤å½“前时间-- ç™»è®°æ—¥æœŸ
);
-- è¡¨æ³¨é‡Š
COMMENT ON TABLE archive IS '档案信息表,记录系统中各类档案的基本信息';
-- å­—段注释
COMMENT ON COLUMN archive.id IS '主键ID';
COMMENT ON COLUMN archive.name IS '档案名称';
COMMENT ON COLUMN archive.type IS '档案类型,例如:合同、报告、证件等';
COMMENT ON COLUMN archive.status IS '档案状态,例如:有效、过期、作废';
COMMENT ON COLUMN archive.deleted IS '软删除标志,0=未删除,1=已删除';
COMMENT ON COLUMN archive.create_by IS '创建该记录的用户';
COMMENT ON COLUMN archive.create_time IS '记录创建时间';
COMMENT ON COLUMN archive.update_by IS '最后修改该记录的用户';
COMMENT ON COLUMN archive.update_time IS '记录最后更新时间';
main-business/src/main/resources/db/migration/postgresql/V20250610161314__create_table_file.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
-- åˆ›å»ºæ–‡ä»¶è¡¨
CREATE TABLE file
(
    id            BIGSERIAL PRIMARY KEY,                              -- ä¸»é”®ID,自动递增
    archive_id    BIGINT,                                             -- å…³è”档案表 archive.id(可选)
    original_name VARCHAR(255) NOT NULL,                              -- åŽŸå§‹æ–‡ä»¶åï¼ˆç”¨æˆ·ä¸Šä¼ æ—¶çš„åç§°ï¼‰
    preview_url   TEXT,                                               -- é¢„览地址
    file_name     VARCHAR(255) NOT NULL,                              -- å­˜å‚¨ç³»ç»Ÿä¸­çš„唯一文件名(如 uuid.png)
    file_path     TEXT         NOT NULL,                              -- æ–‡ä»¶å­˜å‚¨è·¯å¾„或URL
    file_type     VARCHAR(50),                                        -- æ–‡ä»¶ç±»åž‹ï¼ˆå¦‚:image/png, application/pdf)
    file_size     VARCHAR(50),                                              -- æ–‡ä»¶å¤§å°ï¼ˆå•位:字节)
    create_time   TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- ä¸Šä¼ æ—¶é—´ï¼Œé»˜è®¤å½“前时间
    update_time   TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- æœ€åŽæ›´æ–°æ—¶é—´ï¼Œé»˜è®¤å½“前时间
    create_by     VARCHAR(255),                                       -- ä¸Šä¼ äººç”¨æˆ·å
    update_by     VARCHAR(255),                                       -- æœ€åŽä¿®æ”¹äººç”¨æˆ·å
    deleted       INT          NOT NULL    DEFAULT 0                  -- è½¯åˆ é™¤æ ‡å¿—:0=未删除,1=已删除
);
-- è¡¨æ³¨é‡Š
COMMENT ON TABLE file IS '上传文件的基本信息';
-- å­—段注释
COMMENT ON COLUMN file.id IS '主键ID';
COMMENT ON COLUMN file.archive_id IS '关联的档案ID,外键引用 archive.id';
COMMENT ON COLUMN file.original_name IS '原始文件名(用户上传时的名称)';
COMMENT ON COLUMN file.preview_url IS '预览地址';
COMMENT ON COLUMN file.file_name IS '系统存储的唯一文件名';
COMMENT ON COLUMN file.file_path IS '文件在服务器上的存储路径或访问URL';
COMMENT ON COLUMN file.file_type IS '文件MIME类型,例如 image/png、application/pdf';
COMMENT ON COLUMN file.file_size IS '文件大小,单位为字节';
COMMENT ON COLUMN file.create_time IS '文件上传时间';
COMMENT ON COLUMN file.update_time IS '文件最后更新时间';
COMMENT ON COLUMN file.create_by IS '上传该文件的用户';
COMMENT ON COLUMN file.update_by IS '最后修改该文件的用户';
COMMENT ON COLUMN file.deleted IS '软删除标志,0=未删除,1=已删除';
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/MyBaseEntity.java
@@ -7,7 +7,6 @@
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
@Data