heheng
2025-10-14 104ae610d1d7e8dab5fff9abe4a56208941d62d7
修改修复问题及新增功能
已添加8个文件
已修改14个文件
639 ■■■■■ 文件已修改
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/StandingBookController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/WarehousingRecordController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-common/src/main/java/com/gkhy/exam/common/api/ImportResult.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/controller/MaterialController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/DTO/StandingBookImportDTO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/Material.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/StandingBook.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecord.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecordDetails.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/mapper/InternalKnowledgeMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/mapper/MaterialMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordDetailsMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/MaterialService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/StandingBookService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/WarehousingRecordService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/impl/CompanySummaryServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/impl/MaterialServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/impl/StandingBookServiceImpl.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/impl/WarehousingRecordServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/resources/mapper/system/MaterialMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/resources/mapper/system/WarehousingRecordDetailsMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/resources/mapper/system/WarehousingRecordMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/StandingBookController.java
@@ -13,6 +13,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
 * <p>
@@ -60,4 +61,12 @@
        return standingBookService.deletedStandingBook(id);
    }
    @PostMapping("/importStandingBooks")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = true, value = "companyId"),
    })
    public CommonResult importStandingBooks(MultipartFile file,  Long companyId) {
        return CommonResult.success(standingBookService.importStandingBooks(companyId, file));
    }
}
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/WarehousingRecordController.java
@@ -3,8 +3,10 @@
import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.system.domain.Material;
import com.gkhy.exam.system.domain.OutsourcedUnqualified;
import com.gkhy.exam.system.domain.WarehousingRecord;
import com.gkhy.exam.system.service.MaterialService;
import com.gkhy.exam.system.service.WarehousingRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -29,6 +31,38 @@
    @Autowired
    private WarehousingRecordService warehousingRecordService;
    @Autowired
    private MaterialService materialService;
    @ApiOperation(value = "物料列表(分页)")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
            @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = false, value = "公司id"),
    })
    @GetMapping("/selectMaterialList")
    public CommonResult selectMaterialList(Material material){
        return CommonResult.success(materialService.selectMaterialList(material));
    }
    @RepeatSubmit
    @ApiOperation(value = "新增编辑物料")
    @PostMapping("/saveMaterial")
    public CommonResult saveMaterial(@RequestBody @Validated Material material){
        return materialService.saveMaterial(material);
    }
    @ApiOperation(value = "删除物料")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
    })
    @GetMapping("/deletedMaterial")
    public CommonResult deletedMaterial(@RequestParam Long id){
        return materialService.deletedMaterial(id);
    }
    @ApiOperation(value = "出入库记录列表(分页)")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
@@ -39,6 +73,18 @@
    public CommonResult selectWarehousingRecordList(WarehousingRecord warehousingRecord){
        return CommonResult.success(warehousingRecordService.selectWarehousingRecordList(warehousingRecord));
    }
    @ApiOperation(value = "出入库记录详情列表(分页)")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
            @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = false, value = "公司id"),
    })
    @GetMapping("/selectWarehousingRecordDetailList")
    public CommonResult selectWarehousingRecordDetailList(WarehousingRecord warehousingRecord){
        return CommonResult.success(warehousingRecordService.selectWarehousingRecordList(warehousingRecord));
    }
    @RepeatSubmit
    @ApiOperation(value = "新增编辑出入库记录")
    @PostMapping("/saveWarehousingRecord")
multi-common/src/main/java/com/gkhy/exam/common/api/ImportResult.java
对比新文件
@@ -0,0 +1,12 @@
package com.gkhy.exam.common.api;
import lombok.Data;
import java.util.List;
@Data
public class ImportResult {
    private Integer successCount;
    private Integer failCount;
    private List<String> errorMessages;
}
multi-system/src/main/java/com/gkhy/exam/system/controller/MaterialController.java
对比新文件
@@ -0,0 +1,20 @@
package com.gkhy.exam.system.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author hh
 * @since 2025-10-11 14:20:49
 */
@RestController
@RequestMapping("/system/material")
public class MaterialController {
}
multi-system/src/main/java/com/gkhy/exam/system/domain/DTO/StandingBookImportDTO.java
对比新文件
@@ -0,0 +1,50 @@
package com.gkhy.exam.system.domain.DTO;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class StandingBookImportDTO {
    @ExcelProperty("部门")
    private String deptName;
    @ExcelProperty("名称")
    private String name;
    @ExcelProperty("型号")
    private String model;
    @ExcelProperty("责任人/使用人")
    private String personResponsible;
    @ExcelProperty("设备类型")
    //1计算机设备2办公自动化设备3外部设备4其他
    private String deviceType;
    @ExcelProperty("编号")
    private String number;
    @ExcelProperty("品牌")
    private String brand;
    @ExcelProperty("密级/类型")
    private String confidentiality;
    @ExcelProperty("状态")
    //1.完好2需整改3损坏
    private String status;
    @ExcelProperty("用途")
    private String purpose;
    @ExcelProperty("使用地点")
    private String location;
    @ExcelProperty("使用情况")
    private String used;
    @ExcelProperty("备注")
    private String remark;
}
multi-system/src/main/java/com/gkhy/exam/system/domain/Material.java
对比新文件
@@ -0,0 +1,84 @@
package com.gkhy.exam.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * <p>
 *
 * </p>
 *
 * @author hh
 * @since 2025-10-11 14:20:49
 */
@Getter
@Setter
@TableName("material")
@ApiModel(value = "Material对象", description = "")
public class Material implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId("id")
    private Long id;
    @ApiModelProperty(value = "公司ID", required = true)
    @TableField("company_id")
    @NotNull(message = "公司ID不能为空")
    private Long companyId;
    @ApiModelProperty(value = "名称", required = true)
    @TableField("material_name")
    @NotBlank(message = "名称不能为空")
    private String materialName;
    @ApiModelProperty(value = "单位", required = true)
    @TableField("material_unit")
    @NotBlank(message = "单位不能为空")
    private String materialUnit;
    @ApiModelProperty(value = "规格", required = true)
    @TableField("specification")
    @NotBlank(message = "规格不能为空")
    private String specification;
    @ApiModelProperty("库存量")
    @TableField("inventory")
    private Integer inventory;
    @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
    @TableField("del_flag")
    private Integer delFlag;
    @ApiModelProperty("创建时间")
    @TableField("create_time")
    private LocalDateTime createTime;
    @ApiModelProperty("创建人")
    @TableField("create_by")
    private String createBy;
    @ApiModelProperty("更新时间")
    @TableField("update_time")
    private LocalDateTime updateTime;
    @ApiModelProperty("更新人")
    @TableField("update_by")
    private String updateBy;
    @ApiModelProperty("乐观锁")
    @TableField("version")
    private Integer version;
}
multi-system/src/main/java/com/gkhy/exam/system/domain/StandingBook.java
@@ -47,9 +47,15 @@
    @TableField(exist = false)
    private String deptName;
    @ApiModelProperty("名称型号")
    @ApiModelProperty("名称")
    @TableField("name")
    @NotBlank(message = "名称不能为空")
    private String name;
    @ApiModelProperty("型号")
    @TableField("model")
    @NotBlank(message = "名称型号不能为空")
    @NotBlank(message = "型号不能为空")
    private String model;
    @ApiModelProperty("责任人/使用人")
@@ -61,7 +67,7 @@
    @TableField(exist = false)
    private String personResponsibleName;
    @ApiModelProperty("设备类型1生成设备2办公自动化设备")
    @ApiModelProperty("设备类型1计算机设备2办公自动化设备3外部设备4其他")
    @TableField("device_type")
    @NotNull(message = "设备类型不能为空")
    private Integer deviceType;
@@ -79,7 +85,7 @@
    @TableField("confidentiality")
    private String confidentiality;
    @ApiModelProperty("状态1.完好2损坏")
    @ApiModelProperty("状态1.完好2需整改3损坏")
    @TableField("status")
    private Integer status;
multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecord.java
@@ -38,6 +38,15 @@
    @NotNull(message = "公司id不能为空")
    private Long companyId;
    @ApiModelProperty(value = "物料id",required = true)
    @TableField("material_id")
    @NotNull(message = "物料id不能为空")
    private Long materialId;
    @ApiModelProperty("库存量")
    @TableField("inventory")
    private Integer inventory;
    @ApiModelProperty(value = "记录名称",required = true)
    @TableField("record_name")
    @NotNull(message = "记录名称不能为空")
multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecordDetails.java
@@ -39,37 +39,46 @@
    @NotNull(message = "登记时间不能为空")
    private LocalDateTime boardingTime;
    @ApiModelProperty("名称")
    @TableField("name")
    private String name;
//    @ApiModelProperty("名称")
//    @TableField("name")
//    private String name;
    @ApiModelProperty("入库单位")
    @TableField("enter_company")
    private String enterCompany;
    @ApiModelProperty("单位")
    @TableField("material_unit")
    private String materialUnit;
    @ApiModelProperty("入库数量")
    @TableField("enter_num")
    private Integer enterNum;
    @ApiModelProperty("数量")
    @TableField("num")
    private Integer num;
    @ApiModelProperty("入库经手人")
    @TableField("enter_person")
    private String enterPerson;
    @ApiModelProperty("记录类型1入库2出库")
    @TableField("record_type")
    @NotNull(message = "记录类型不能为空")
    private Integer recordType;
    @ApiModelProperty("出库单位")
    @TableField("outbound_company")
    private String outboundCompany;
    @ApiModelProperty("规格")
    @TableField("specification")
    private String specification;
    @ApiModelProperty("出库数量")
    @TableField("outbound_num")
    private Integer outboundNum;
//    @ApiModelProperty("入库经手人")
//    @TableField("enter_person")
//    private String enterPerson;
//
//    @ApiModelProperty("出库单位")
//    @TableField("outbound_company")
//    private String outboundCompany;
//
//    @ApiModelProperty("出库数量")
//    @TableField("outbound_num")
//    private Integer outboundNum;
//
//    @ApiModelProperty("出库经手人")
//    @TableField("outbound_person")
//    private String outboundPerson;
    @ApiModelProperty("出库经手人")
    @TableField("outbound_person")
    private String outboundPerson;
    @ApiModelProperty("库存")
    @TableField("amount")
    private Integer amount;
//    @ApiModelProperty("库存")
//    @TableField("amount")
//    private Integer amount;
    @ApiModelProperty("备注")
    @TableField("remark")
multi-system/src/main/java/com/gkhy/exam/system/mapper/InternalKnowledgeMapper.java
@@ -1,6 +1,5 @@
package com.gkhy.exam.system.mapper;
import com.gkhy.exam.system.domain.ExternalKnowledge;
import com.gkhy.exam.system.domain.InternalKnowledge;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
multi-system/src/main/java/com/gkhy/exam/system/mapper/MaterialMapper.java
对比新文件
@@ -0,0 +1,21 @@
package com.gkhy.exam.system.mapper;
import com.gkhy.exam.system.domain.Material;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author hh
 * @since 2025-10-11 14:20:49
 */
@Mapper
public interface MaterialMapper extends BaseMapper<Material> {
    List<Material> selectMaterialList(Material  material);
}
multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordDetailsMapper.java
@@ -1,8 +1,11 @@
package com.gkhy.exam.system.mapper;
import com.gkhy.exam.system.domain.WarehousingRecord;
import com.gkhy.exam.system.domain.WarehousingRecordDetails;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * <p>
@@ -15,4 +18,6 @@
@Mapper
public interface WarehousingRecordDetailsMapper extends BaseMapper<WarehousingRecordDetails> {
    List<WarehousingRecordDetails> selectWarehousingRecordDetailList(WarehousingRecord warehousingRecord);
}
multi-system/src/main/java/com/gkhy/exam/system/service/MaterialService.java
对比新文件
@@ -0,0 +1,26 @@
package com.gkhy.exam.system.service;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.system.domain.Material;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gkhy.exam.system.domain.WarehousingRecord;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hh
 * @since 2025-10-11 14:20:49
 */
public interface MaterialService extends IService<Material> {
    CommonPage selectMaterialList(Material material);
    CommonResult saveMaterial(Material material);
    CommonResult deletedMaterial(Long id);
}
multi-system/src/main/java/com/gkhy/exam/system/service/StandingBookService.java
@@ -2,9 +2,11 @@
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.api.ImportResult;
import com.gkhy.exam.system.domain.Correction;
import com.gkhy.exam.system.domain.StandingBook;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
/**
 * <p>
@@ -22,4 +24,6 @@
    CommonResult updateStandingBook(StandingBook standingBook);
    CommonResult deletedStandingBook(Integer id);
    ImportResult importStandingBooks(Long companyId ,MultipartFile file);
}
multi-system/src/main/java/com/gkhy/exam/system/service/WarehousingRecordService.java
@@ -19,6 +19,8 @@
    CommonPage selectWarehousingRecordList(WarehousingRecord warehousingRecord);
    CommonPage selectWarehousingRecordDetailList(WarehousingRecord warehousingRecord);
    CommonResult saveWarehousingRecord(WarehousingRecord warehousingRecord);
    CommonResult getWarehousingRecord(Long id);
multi-system/src/main/java/com/gkhy/exam/system/service/impl/CompanySummaryServiceImpl.java
@@ -12,15 +12,12 @@
import com.gkhy.exam.system.mapper.CompanySummaryMapper;
import com.gkhy.exam.system.service.CompanySummaryService;
import com.gkhy.exam.system.service.SysCompanyService;
import org.apache.poi.schemas.vmldrawing.XmlDocument;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.List;
multi-system/src/main/java/com/gkhy/exam/system/service/impl/MaterialServiceImpl.java
对比新文件
@@ -0,0 +1,81 @@
package com.gkhy.exam.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.constant.UserConstant;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.domain.Material;
import com.gkhy.exam.system.domain.WarehousingRecord;
import com.gkhy.exam.system.mapper.MaterialMapper;
import com.gkhy.exam.system.service.MaterialService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author hh
 * @since 2025-10-11 14:20:49
 */
@Service
public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> implements MaterialService {
    @Autowired
    private MaterialMapper materialMapper;
    @Override
    public CommonPage selectMaterialList(Material material) {
        PageUtils.startPage();
        List<Material> materials = materialMapper.selectMaterialList(material);
        return CommonPage.restPage(materials);
    }
    @Override
    public CommonResult saveMaterial(Material material) {
        LambdaQueryWrapper<Material> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Material::getMaterialName, material.getMaterialName());
        queryWrapper.eq(Material::getDelFlag, UserConstant.ENABLE);
        queryWrapper.eq(Material::getCompanyId, material.getCompanyId());
        queryWrapper.eq(Material::getSpecification, material.getSpecification());
        if (material.getId() == null){
            long count =  materialMapper.selectCount(queryWrapper);
            if (count > 0){
                return CommonResult.failed("该规格物料已存在");
            }
            material.setCreateTime(LocalDateTime.now());
            material.setCreateBy(SecurityUtils.getUsername());
            materialMapper.insert(material);
        }else {
            queryWrapper.ne(Material::getId, material.getId());
            long count =  materialMapper.selectCount(queryWrapper);
            if (count > 0){
                return CommonResult.failed("该规格物料已存在");
            }
            material.setUpdateTime(LocalDateTime.now());
            material.setUpdateBy(SecurityUtils.getUsername());
            materialMapper.updateById(material);
        }
        return CommonResult.success();
    }
    @Override
    public CommonResult deletedMaterial(Long id) {
        materialMapper.update(new Material(),
                new LambdaUpdateWrapper<Material>().eq(Material::getId, id)
                        .set(Material::getDelFlag, UserConstant.DEPT_DISABLE)
                        .set(Material::getUpdateTime, LocalDateTime.now())
                        .set(Material::getUpdateBy, SecurityUtils.getUsername()));
        return CommonResult.success("删除成功");
    }
}
multi-system/src/main/java/com/gkhy/exam/system/service/impl/StandingBookServiceImpl.java
@@ -1,19 +1,35 @@
package com.gkhy.exam.system.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.api.ImportResult;
import com.gkhy.exam.common.domain.entity.SysDept;
import com.gkhy.exam.common.domain.entity.SysUser;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.domain.Correction;
import com.gkhy.exam.system.domain.DTO.StandingBookImportDTO;
import com.gkhy.exam.system.domain.StandingBook;
import com.gkhy.exam.system.domain.vo.DeptVo;
import com.gkhy.exam.system.mapper.StandingBookMapper;
import com.gkhy.exam.system.mapper.SysDeptMapper;
import com.gkhy.exam.system.mapper.SysUserMapper;
import com.gkhy.exam.system.service.StandingBookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
@@ -28,6 +44,13 @@
    @Autowired
    private StandingBookMapper standingBookMapper;
    @Autowired
    private SysDeptMapper sysDeptMapper;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Override
    public CommonPage selectStandingBookList(StandingBook standingBook) {
        PageUtils.startPage();
@@ -71,4 +94,105 @@
        }
        return CommonResult.failed();
    }
    @Override
    public ImportResult importStandingBooks(Long companyId, MultipartFile file) {
        ImportResult result = new ImportResult();
        result.setSuccessCount(0);
        result.setFailCount(0);
        result.setErrorMessages(new ArrayList<>());
        SysDept sysDept = new SysDept();
        sysDept.setCompanyId(companyId);
        List<DeptVo> deptVos = sysDeptMapper.selectDeptList(sysDept);
        Map<String, Long> deptNameIdMap = deptVos.stream()
                .collect(Collectors.toMap(DeptVo::getDeptName, DeptVo::getDeptId));
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getCompanyId, companyId);
        queryWrapper.eq(SysUser::getDelFlag, 0);
        List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
        Map<String, Long> userNameIdMap = sysUsers.stream()
                .collect(Collectors.toMap(SysUser::getName, SysUser::getId));
        try {
            // 使用EasyExcel读取文件
            ReadListener<StandingBookImportDTO> listener = new ReadListener<StandingBookImportDTO>() {
                @Override
                public void invoke(StandingBookImportDTO dto, AnalysisContext context) {
                    try {
                        // 转换为实体对象
                        StandingBook standingBook = new StandingBook();
                        standingBook.setCompanyId(companyId);
                        standingBook.setDeptId(deptNameIdMap.get(dto.getDeptName()) == null ? 0L : deptNameIdMap.get(dto.getDeptName()));
                        standingBook.setName(dto.getName());
                        standingBook.setModel(dto.getModel());
                        standingBook.setPersonResponsible(userNameIdMap.get(dto.getPersonResponsible()) == null ? 0L : userNameIdMap.get(dto.getPersonResponsible()));
                        String deviceType = dto.getDeviceType();
                        switch (deviceType) {
                            case "计算机设备":
                                standingBook.setDeviceType(1);
                                break;
                            case "办公自动化设备":
                                standingBook.setDeviceType(2);
                                break;
                            case "外部设备":
                                standingBook.setDeviceType(3);
                                break;
                            default:
                                standingBook.setDeviceType(4);
                                break;
                        }
                        standingBook.setNumber(dto.getNumber());
                        standingBook.setBrand(dto.getBrand());
                        standingBook.setConfidentiality(dto.getConfidentiality());
                        switch (dto.getStatus()) {
                            case "完好":
                                standingBook.setStatus(1);
                                break;
                            case "需整改":
                                standingBook.setStatus(2);
                                break;
                            default:
                                standingBook.setStatus(3);
                                break;
                        }
                        standingBook.setPurpose(dto.getPurpose());
                        standingBook.setLocation(dto.getLocation());
                        standingBook.setUsed(dto.getUsed());
                        standingBook.setRemark(dto.getRemark());
                        standingBook.setCreateTime(LocalDateTime.now());
                        standingBook.setCreateBy(SecurityUtils.getUsername());
                        standingBookMapper.insert(standingBook);
                        result.setSuccessCount(result.getSuccessCount() + 1);
                    } catch (Exception e) {
                        result.getErrorMessages().add("行" + context.readRowHolder().getRowIndex() + "导入失败:" + e.getMessage());
                        result.setFailCount(result.getFailCount() + 1);
                    }
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext context) {
                    // 导入完成后的处理
                }
            };
            // 创建读取器
            ExcelReader excelReader = EasyExcel.read(file.getInputStream(), StandingBookImportDTO.class, listener).build();
            ReadSheet readSheet = EasyExcel.readSheet(0).build();
            excelReader.read(readSheet);
        } catch (Exception e) {
            result.getErrorMessages().add("导入失败:" + e.getMessage());
        }
        return result;
    }
}
multi-system/src/main/java/com/gkhy/exam/system/service/impl/WarehousingRecordServiceImpl.java
@@ -6,11 +6,14 @@
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.constant.UserConstant;
import com.gkhy.exam.common.exception.ApiException;
import com.gkhy.exam.common.utils.PageUtils;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.domain.Material;
import com.gkhy.exam.system.domain.OutsourcedUnqualified;
import com.gkhy.exam.system.domain.WarehousingRecord;
import com.gkhy.exam.system.domain.WarehousingRecordDetails;
import com.gkhy.exam.system.mapper.MaterialMapper;
import com.gkhy.exam.system.mapper.WarehousingRecordDetailsMapper;
import com.gkhy.exam.system.mapper.WarehousingRecordMapper;
import com.gkhy.exam.system.service.WarehousingRecordService;
@@ -37,17 +40,33 @@
    private WarehousingRecordMapper warehousingRecordMapper;
    @Autowired
    private WarehousingRecordDetailsMapper warehousingRecordDetailsMapper;
    @Autowired
    private MaterialMapper materialMapper;
    @Override
    public CommonPage selectWarehousingRecordList(WarehousingRecord warehousingRecord) {
        PageUtils.startPage();
        List<WarehousingRecord> warehousingRecords = warehousingRecordMapper.selectWarehousingRecordList(warehousingRecord);
        warehousingRecords.stream().forEach(item -> {
            List<WarehousingRecordDetails> de = warehousingRecordDetailsMapper.selectList(
                    new LambdaQueryWrapper<>(WarehousingRecordDetails.class).eq(WarehousingRecordDetails::getRecordId, item.getId())
                            .eq(WarehousingRecordDetails::getDelFlag, UserConstant.ENABLE).orderByAsc(WarehousingRecordDetails::getCreateTime));
            item.setWarehousingRecordDetails(de);
        });
        return CommonPage.restPage(warehousingRecords);
    }
    @Override
    public CommonPage selectWarehousingRecordDetailList(WarehousingRecord warehousingRecord) {
        PageUtils.startPage();
        List<WarehousingRecordDetails> warehousingRecords = warehousingRecordDetailsMapper.selectWarehousingRecordDetailList(warehousingRecord);
        return CommonPage.restPage(warehousingRecords);
    }
    @Override
    @Transactional
    public CommonResult saveWarehousingRecord(WarehousingRecord warehousingRecord) {
        List<WarehousingRecordDetails> warehousingRecordDetails = warehousingRecord.getWarehousingRecordDetails();
        if (ObjectUtil.isEmpty(warehousingRecordDetails)){
            return CommonResult.validateFailed("请选择入库记录详情");
@@ -64,12 +83,19 @@
            i = warehousingRecordMapper.updateById(warehousingRecord);
        }
        if (i > 0){
          batchSave(warehousingRecord.getId(), warehousingRecordDetails,warehousingRecord.getDelDetails());
          batchSave(warehousingRecord.getId(), warehousingRecordDetails,warehousingRecord.getDelDetails(),warehousingRecord.getMaterialId(),warehousingRecord.getInventory());
        }
        return CommonResult.success();
    }
    private void batchSave(Long id, List<WarehousingRecordDetails> warehousingRecordDetails,List<Long> delDetails) {
    private void batchSave(Long id, List<WarehousingRecordDetails> warehousingRecordDetails,List<Long> delDetails,Long materialId,int inventory) {
        Material material = materialMapper.selectById(materialId);
        if (ObjectUtil.isEmpty(material)){
            throw new ApiException("物料不存在");
        }
        warehousingRecordDetails.stream().filter(item -> item.getId() == null).forEach(item -> {
            item.setRecordId(id);
            item.setCreateTime(LocalDateTime.now());
@@ -90,6 +116,12 @@
                            .set(WarehousingRecordDetails::getUpdateBy, SecurityUtils.getUsername()));
        }
        materialMapper.update(new Material(),
                new LambdaUpdateWrapper<Material>().eq(Material::getId, materialId)
                        .set(Material::getInventory, inventory)
                        .set(Material::getUpdateTime, LocalDateTime.now())
                        .set(Material::getUpdateBy, SecurityUtils.getUsername()));
    }
    @Override
multi-system/src/main/resources/mapper/system/MaterialMapper.xml
对比新文件
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gkhy.exam.system.mapper.MaterialMapper">
    <select id="selectMaterialList" parameterType="com.gkhy.exam.system.domain.Material" resultType="com.gkhy.exam.system.domain.Material">
        select * from material where del_flag = 0
        <if test="materialName != null">
            and material_name like concat('%',#{materialName},'%')
        </if>
        <if test="materialUnit != null">
            and material_unit like concat('%',#{materialUnit},'%')
        </if>
        <if test="inventory != null">
            and inventory = #{inventory}
        </if>
        order by update_time desc
    </select>
</mapper>
multi-system/src/main/resources/mapper/system/WarehousingRecordDetailsMapper.xml
@@ -2,4 +2,13 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gkhy.exam.system.mapper.WarehousingRecordDetailsMapper">
    <select id="selectWarehousingRecordDetailList" resultType="com.gkhy.exam.system.domain.WarehousingRecordDetails" parameterType="com.gkhy.exam.system.domain.WarehousingRecord">
        select a.* from warehousing_record_details a
            left join warehousing_record b on a.record_id = b.id
        where del_flag = 0  and b.del_flag = 0
    </select>
</mapper>
multi-system/src/main/resources/mapper/system/WarehousingRecordMapper.xml
@@ -9,6 +9,9 @@
        <if test="companyId != null">
            and company_id = #{companyId}
        </if>
        <if test="materialId != null">
            and material_id = #{materialId}
        </if>
        order by create_time desc
    </select>
</mapper>