车间能级提升-智能设备管理系统
zhuguifei
2025-04-16 d40d81aa421c7cdb959556fedffef71fc62cde80
完成备件模块
已添加8个文件
已修改13个文件
799 ■■■■■ 文件已修改
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsSpareController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsSpareInoutController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsSpareInoutdtController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsSpareInoutdt.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutBo.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareVo.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsSpareInoutMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsSpareInoutdtMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsSpareMapper.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsSpareInoutService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsSpareInoutdtService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsSpareService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutdtServiceImpl.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsSpareInoutdtMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsSpareMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsSpareController.java
@@ -6,6 +6,8 @@
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.eims.domain.vo.EimsSpareInoutVo;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -45,6 +47,12 @@
        return eimsSpareService.queryPageList(bo, pageQuery);
    }
    @SaCheckPermission("eims:spare:list")
    @GetMapping("/listInout")
    public TableDataInfo<EimsSpareInoutdtVo> listInout(EimsSpareBo bo, PageQuery pageQuery) {
        return eimsSpareService.querySpareInoutList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºå¤‡ä»¶å°è´¦åˆ—表
     */
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsSpareInoutController.java
@@ -45,6 +45,7 @@
        return eimsSpareInoutService.queryPageList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºå¤‡ä»¶å‡ºå…¥åº“列表
     */
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsSpareInoutdtController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package org.dromara.eims.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.dromara.eims.domain.bo.EimsSpareInoutdtBo;
import org.dromara.eims.service.IEimsSpareInoutdtService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
 * å¤‡ä»¶å‡ºå…¥åº“明细
 *
 * @author zhuguifei
 * @date 2025-04-11
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/spareInoutdt")
public class EimsSpareInoutdtController extends BaseController {
    private final IEimsSpareInoutdtService eimsSpareInoutdtService;
    /**
     * æŸ¥è¯¢å¤‡ä»¶å‡ºå…¥åº“明细列表
     */
    @SaCheckPermission("eims:spareInoutdt:list")
    @GetMapping("/list")
    public TableDataInfo<EimsSpareInoutdtVo> list(EimsSpareInoutdtBo bo, PageQuery pageQuery) {
        return eimsSpareInoutdtService.queryPageList(bo, pageQuery);
    }
    /**
     * å¯¼å‡ºå¤‡ä»¶å‡ºå…¥åº“明细列表
     */
    @SaCheckPermission("eims:spareInoutdt:export")
    @Log(title = "备件出入库明细", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(EimsSpareInoutdtBo bo, HttpServletResponse response) {
        List<EimsSpareInoutdtVo> list = eimsSpareInoutdtService.queryList(bo);
        ExcelUtil.exportExcel(list, "备件出入库明细", EimsSpareInoutdtVo.class, response);
    }
    /**
     * èŽ·å–å¤‡ä»¶å‡ºå…¥åº“æ˜Žç»†è¯¦ç»†ä¿¡æ¯
     *
     * @param id ä¸»é”®
     */
    @SaCheckPermission("eims:spareInoutdt:query")
    @GetMapping("/{id}")
    public R<EimsSpareInoutdtVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long id) {
        return R.ok(eimsSpareInoutdtService.queryById(id));
    }
    /**
     * æ–°å¢žå¤‡ä»¶å‡ºå…¥åº“明细
     */
    @SaCheckPermission("eims:spareInoutdt:add")
    @Log(title = "备件出入库明细", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody EimsSpareInoutdtBo bo) {
        return toAjax(eimsSpareInoutdtService.insertByBo(bo));
    }
    /**
     * ä¿®æ”¹å¤‡ä»¶å‡ºå…¥åº“明细
     */
    @SaCheckPermission("eims:spareInoutdt:edit")
    @Log(title = "备件出入库明细", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EimsSpareInoutdtBo bo) {
        return toAjax(eimsSpareInoutdtService.updateByBo(bo));
    }
    /**
     * åˆ é™¤å¤‡ä»¶å‡ºå…¥åº“明细
     *
     * @param ids ä¸»é”®ä¸²
     */
    @SaCheckPermission("eims:spareInoutdt:remove")
    @Log(title = "备件出入库明细", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] ids) {
        return toAjax(eimsSpareInoutdtService.deleteWithValidByIds(List.of(ids), true));
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/EimsSpareInoutdt.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package org.dromara.eims.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.math.BigDecimal;
/**
 * å¤‡ä»¶å‡ºå…¥åº“明细对象 eims_spare_inoutdt
 *
 * @author zhuguifei
 * @date 2025-04-11
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eims_spare_inoutdt")
public class EimsSpareInoutdt extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @TableId(value = "id")
    private Long id;
    /**
     * å‡ºåº“单或入库单id
     */
    private Long inoutId;
    /**
     * å¤‡ä»¶id
     */
    private Long spareId;
    /**
     * ä¹‹å‰åº“å­˜
     */
    private Long beforeStock;
    /**
     * å®žé™…库存
     */
    private Long actualStock;
    /**
     * æ•°é‡
     */
    private Long quantity;
    /**
     * å•ä»·
     */
    private BigDecimal unitPrice;
    /**
     * é‡‘额
     */
    private BigDecimal amount;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareBo.java
@@ -114,4 +114,11 @@
    private String remark;
    /**
     * å‡ºåº“入库数量
     */
    private Long quantity;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutBo.java
@@ -9,7 +9,10 @@
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.eims.domain.vo.EimsSpareVo;
/**
 * å¤‡ä»¶å‡ºå…¥åº“业务对象 eims_spare_inout
@@ -69,5 +72,9 @@
     */
    private String remark;
    //出入库选择的备件明细
    private List<EimsSpareBo> spareList;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsSpareInoutdtBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package org.dromara.eims.domain.bo;
import org.dromara.eims.domain.EimsSpareInoutdt;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
 * å¤‡ä»¶å‡ºå…¥åº“明细业务对象 eims_spare_inoutdt
 *
 * @author zhuguifei
 * @date 2025-04-11
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = EimsSpareInoutdt.class, reverseConvertGenerate = false)
public class EimsSpareInoutdtBo extends BaseEntity {
    /**
     *
     */
    @NotNull(message = "不能为空", groups = { EditGroup.class })
    private Long id;
    /**
     * å‡ºåº“单或入库单id
     */
    @NotNull(message = "出库单或入库单id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long inoutId;
    /**
     * å¤‡ä»¶id
     */
    @NotNull(message = "备件id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long spareId;
    /**
     * ä¹‹å‰åº“å­˜
     */
    @NotNull(message = "之前库存不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long beforeStock;
    /**
     * å®žé™…库存
     */
    @NotNull(message = "实际库存不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long actualStock;
    /**
     * æ•°é‡
     */
    @NotNull(message = "数量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long quantity;
    /**
     * å•ä»·
     */
    @NotNull(message = "单价不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long unitPrice;
    /**
     * é‡‘额
     */
    @NotNull(message = "金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long amount;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutVo.java
@@ -11,11 +11,12 @@
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.eims.domain.bo.EimsSpareBo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
@@ -87,5 +88,6 @@
    @ExcelProperty(value = "备注")
    private String remark;
    //出入库选择的备件明细
    private List<EimsSpareVo> spareList;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareInoutdtVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package org.dromara.eims.domain.vo;
import org.dromara.eims.domain.EimsSpareInoutdt;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * å¤‡ä»¶å‡ºå…¥åº“明细视图对象 eims_spare_inoutdt
 *
 * @author zhuguifei
 * @date 2025-04-11
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = EimsSpareInoutdt.class)
public class EimsSpareInoutdtVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @ExcelProperty(value = "")
    private Long id;
    /**
     * å‡ºåº“单或入库单id
     */
    @ExcelProperty(value = "出库单或入库单id")
    private Long inoutId;
    /**
     * å¤‡ä»¶id
     */
    @ExcelProperty(value = "备件id")
    private Long spareId;
    /**
     * ä¹‹å‰åº“å­˜
     */
    @ExcelProperty(value = "之前库存")
    private Long beforeStock;
    /**
     * å®žé™…库存
     */
    @ExcelProperty(value = "实际库存")
    private Long actualStock;
    /**
     * æ•°é‡
     */
    @ExcelProperty(value = "数量")
    private Long quantity;
    /**
     * å•ä»·
     */
    @ExcelProperty(value = "单价")
    private BigDecimal unitPrice;
    /**
     * é‡‘额
     */
    @ExcelProperty(value = "金额")
    private BigDecimal amount;
    /**
     * å¤‡æ³¨
     */
    @ExcelProperty(value = "备注")
    private String remark;
    //备件
    private String spareName;
    private String spareCode;
    private String modelNo;
    //出入库单
    private String orderCode;
    private Date orderTime;
    private String type;
    private String unit;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsSpareVo.java
@@ -142,6 +142,9 @@
     */
    @ExcelProperty(value = "备注")
    private String remark;
    /**
     * å‡ºåº“入库数量
     */
    private Long quantity;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsSpareInoutMapper.java
@@ -1,8 +1,15 @@
package org.dromara.eims.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.eims.domain.EimsSpareInout;
import org.dromara.eims.domain.EimsSpareInoutdt;
import org.dromara.eims.domain.vo.EimsSpareInoutVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
/**
 * å¤‡ä»¶å‡ºå…¥åº“Mapper接口
@@ -12,4 +19,5 @@
 */
public interface EimsSpareInoutMapper extends BaseMapperPlus<EimsSpareInout, EimsSpareInoutVo> {
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsSpareInoutdtMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package org.dromara.eims.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.eims.domain.EimsMaintSt;
import org.dromara.eims.domain.EimsSpareInoutdt;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * å¤‡ä»¶å‡ºå…¥åº“明细Mapper接口
 *
 * @author zhuguifei
 * @date 2025-04-11
 */
public interface EimsSpareInoutdtMapper extends BaseMapperPlus<EimsSpareInoutdt, EimsSpareInoutdtVo> {
    Page<EimsSpareInoutdtVo> selectSpareInoutdtList(@Param("page") Page<EimsSpareInoutdtVo> page, @Param(Constants.WRAPPER) Wrapper<EimsSpareInoutdt> queryWrapper);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/mapper/EimsSpareMapper.java
@@ -1,6 +1,13 @@
package org.dromara.eims.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.eims.domain.EimsSpare;
import org.dromara.eims.domain.EimsSpareInout;
import org.dromara.eims.domain.vo.EimsSpareInoutVo;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.dromara.eims.domain.vo.EimsSpareVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@@ -11,5 +18,5 @@
 * @date 2025-03-20
 */
public interface EimsSpareMapper extends BaseMapperPlus<EimsSpare, EimsSpareVo> {
    Page<EimsSpareInoutdtVo> selectSpareInoutList(@Param("page") Page<EimsSpareInoutdtVo> page, @Param(Constants.WRAPPER) Wrapper<EimsSpare> queryWrapper);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsSpareInoutService.java
@@ -65,4 +65,8 @@
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsSpareInoutdtService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.dromara.eims.domain.bo.EimsSpareInoutdtBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
 * å¤‡ä»¶å‡ºå…¥åº“明细Service接口
 *
 * @author zhuguifei
 * @date 2025-04-11
 */
public interface IEimsSpareInoutdtService {
    /**
     * æŸ¥è¯¢å¤‡ä»¶å‡ºå…¥åº“明细
     *
     * @param id ä¸»é”®
     * @return å¤‡ä»¶å‡ºå…¥åº“明细
     */
    EimsSpareInoutdtVo queryById(Long id);
    /**
     * åˆ†é¡µæŸ¥è¯¢å¤‡ä»¶å‡ºå…¥åº“明细列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return å¤‡ä»¶å‡ºå…¥åº“明细分页列表
     */
    TableDataInfo<EimsSpareInoutdtVo> queryPageList(EimsSpareInoutdtBo bo, PageQuery pageQuery);
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„备件出入库明细列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return å¤‡ä»¶å‡ºå…¥åº“明细列表
     */
    List<EimsSpareInoutdtVo> queryList(EimsSpareInoutdtBo bo);
    /**
     * æ–°å¢žå¤‡ä»¶å‡ºå…¥åº“明细
     *
     * @param bo å¤‡ä»¶å‡ºå…¥åº“明细
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    Boolean insertByBo(EimsSpareInoutdtBo bo);
    /**
     * ä¿®æ”¹å¤‡ä»¶å‡ºå…¥åº“明细
     *
     * @param bo å¤‡ä»¶å‡ºå…¥åº“明细
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsSpareInoutdtBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤å¤‡ä»¶å‡ºå…¥åº“明细信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsSpareService.java
@@ -1,5 +1,8 @@
package org.dromara.eims.service;
import org.dromara.eims.domain.bo.EimsSpareInoutBo;
import org.dromara.eims.domain.vo.EimsSpareInoutVo;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.dromara.eims.domain.vo.EimsSpareVo;
import org.dromara.eims.domain.bo.EimsSpareBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -65,4 +68,13 @@
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
    /**
     * æ ¹æ®å¤‡ä»¶æŸ¥è¯¢å‡ºå…¥åº“明细
     * @param bo
     * @param pageQuery
     * @return
     */
    TableDataInfo<EimsSpareInoutdtVo> querySpareInoutList(EimsSpareBo bo, PageQuery pageQuery);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
@@ -1,5 +1,7 @@
package org.dromara.eims.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DictConstants;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -8,16 +10,24 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.eims.domain.EimsSpare;
import org.dromara.eims.domain.EimsSpareInoutdt;
import org.dromara.eims.domain.bo.EimsSpareBo;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.dromara.eims.domain.vo.EimsSpareVo;
import org.dromara.eims.mapper.EimsSpareInoutdtMapper;
import org.dromara.eims.mapper.EimsSpareMapper;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsSpareInoutBo;
import org.dromara.eims.domain.vo.EimsSpareInoutVo;
import org.dromara.eims.domain.EimsSpareInout;
import org.dromara.eims.mapper.EimsSpareInoutMapper;
import org.dromara.eims.service.IEimsSpareInoutService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
 * å¤‡ä»¶å‡ºå…¥åº“Service业务层处理
@@ -30,6 +40,8 @@
public class EimsSpareInoutServiceImpl implements IEimsSpareInoutService {
    private final EimsSpareInoutMapper baseMapper;
    private final EimsSpareInoutdtMapper inoutdtMapper;
    private final EimsSpareMapper spareMapper;
    /**
     * æŸ¥è¯¢å¤‡ä»¶å‡ºå…¥åº“
@@ -39,7 +51,33 @@
     */
    @Override
    public EimsSpareInoutVo queryById(Long id){
        return baseMapper.selectVoById(id);
        EimsSpareInoutVo eimsSpareInoutVo = baseMapper.selectVoById(id);
        QueryWrapper<EimsSpareInoutdt> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(EimsSpareInoutdt::getInoutId, id);
        List<EimsSpareInoutdtVo> dtVos = inoutdtMapper.selectVoList(queryWrapper);
        if(!dtVos.isEmpty()){
            Map<Long, Long> map = dtVos.stream()
                .collect(Collectors.toMap(
                    EimsSpareInoutdtVo::getSpareId,
                    EimsSpareInoutdtVo::getQuantity
                ));
            List<Long> spareIdList = dtVos.stream()
                .map(EimsSpareInoutdtVo::getSpareId) // èŽ·å– spareId å­—段
                .toList();
            List<EimsSpareVo> eimsSpareListVos = spareMapper.selectVoBatchIds(spareIdList);
            for (EimsSpareVo spareVo : eimsSpareListVos) {
                // å‡è®¾ quantity çš„值是一个固定值(例如 10)
                spareVo.setQuantity(map.get(spareVo.getId()));
            }
            eimsSpareInoutVo.setSpareList(eimsSpareListVos);
        }
        return eimsSpareInoutVo;
    }
    /**
@@ -55,6 +93,7 @@
        Page<EimsSpareInoutVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„备件出入库列表
@@ -81,19 +120,73 @@
        return lqw;
    }
    /**
     * æ–°å¢žå¤‡ä»¶å‡ºå…¥åº“
     *
     * @param bo å¤‡ä»¶å‡ºå…¥åº“
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean insertByBo(EimsSpareInoutBo bo) {
    public synchronized Boolean insertByBo(EimsSpareInoutBo bo) {
        EimsSpareInout add = MapstructUtils.convert(bo, EimsSpareInout.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setId(add.getId());
        }
        //入库+库存  å‡ºåº“-库存  ï¼ˆé»˜è®¤å…¥åº“)
        int  OperationType;
         //出库
         if(bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK)){
            OperationType =  -1;
        } else {
             OperationType = 1;
         }
        List<EimsSpareBo> spareList = Optional.ofNullable(bo.getSpareList()).orElse(new ArrayList<>());
        // æ’入出库明细
        List<EimsSpareInoutdt> dtList = spareList.stream()
            .map(eimsSpareBo -> {
                EimsSpareInoutdt dt = new EimsSpareInoutdt();
                dt.setInoutId(add.getId());
                dt.setSpareId(eimsSpareBo.getId());
                dt.setBeforeStock(eimsSpareBo.getActualStock());
                // æ³¨æ„å…¥åº“出库
                dt.setActualStock(eimsSpareBo.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
                dt.setQuantity(eimsSpareBo.getQuantity());
                // è®¾ç½®å•价和金额
                Optional.ofNullable(eimsSpareBo.getReferPrice()).ifPresent(referPrice -> {
                    dt.setUnitPrice(referPrice);
                    dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity())));
                });
                return dt;
            })
            .toList();
        // æ‰¹é‡æ’入数据
        if (!dtList.isEmpty()) {
            inoutdtMapper.insertBatch(dtList);
        }
        // æ›´æ–°å¤‡ä»¶çš„库存
        List<EimsSpare> updateSpareList = spareList.stream().map(spareBo -> {
            EimsSpare spare = new EimsSpare();
            spare.setId(spareBo.getId());
            spare.setActualStock(spareBo.getActualStock() + (spareBo.getQuantity() * OperationType));
            // è®¾ç½®å•价和金额
            Optional.ofNullable(spareBo.getReferPrice()).ifPresent(referPrice -> {
                spare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(spare.getActualStock())));
            });
            return spare;
        }).toList();
        if (!updateSpareList.isEmpty()) {
            spareMapper.updateBatchById(updateSpareList);
        }
        return flag;
    }
@@ -132,4 +225,6 @@
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutdtServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
package org.dromara.eims.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsSpareInoutdtBo;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.dromara.eims.domain.EimsSpareInoutdt;
import org.dromara.eims.mapper.EimsSpareInoutdtMapper;
import org.dromara.eims.service.IEimsSpareInoutdtService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
 * å¤‡ä»¶å‡ºå…¥åº“明细Service业务层处理
 *
 * @author zhuguifei
 * @date 2025-04-11
 */
@RequiredArgsConstructor
@Service
public class EimsSpareInoutdtServiceImpl implements IEimsSpareInoutdtService {
    private final EimsSpareInoutdtMapper baseMapper;
    /**
     * æŸ¥è¯¢å¤‡ä»¶å‡ºå…¥åº“明细
     *
     * @param id ä¸»é”®
     * @return å¤‡ä»¶å‡ºå…¥åº“明细
     */
    @Override
    public EimsSpareInoutdtVo queryById(Long id){
        return baseMapper.selectVoById(id);
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢å¤‡ä»¶å‡ºå…¥åº“明细列表
     *
     * @param bo        æŸ¥è¯¢æ¡ä»¶
     * @param pageQuery åˆ†é¡µå‚æ•°
     * @return å¤‡ä»¶å‡ºå…¥åº“明细分页列表
     */
    @Override
    public TableDataInfo<EimsSpareInoutdtVo> queryPageList(EimsSpareInoutdtBo bo, PageQuery pageQuery) {
        Page<EimsSpareInoutdtVo> result = baseMapper.selectSpareInoutdtList(pageQuery.build(), buildWrapper(bo));
        return TableDataInfo.build(result);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„备件出入库明细列表
     *
     * @param bo æŸ¥è¯¢æ¡ä»¶
     * @return å¤‡ä»¶å‡ºå…¥åº“明细列表
     */
    @Override
    public List<EimsSpareInoutdtVo> queryList(EimsSpareInoutdtBo bo) {
        LambdaQueryWrapper<EimsSpareInoutdt> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<EimsSpareInoutdt> buildQueryWrapper(EimsSpareInoutdtBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<EimsSpareInoutdt> lqw = Wrappers.lambdaQuery();
        lqw.eq(bo.getInoutId() != null, EimsSpareInoutdt::getInoutId, bo.getInoutId());
        lqw.eq(bo.getSpareId() != null, EimsSpareInoutdt::getSpareId, bo.getSpareId());
        return lqw;
    }
    private QueryWrapper<EimsSpareInoutdt> buildWrapper(EimsSpareInoutdtBo bo) {
        Map<String, Object> params = bo.getParams();
        QueryWrapper<EimsSpareInoutdt> qw = Wrappers.query();
        qw.eq("io.id",bo.getInoutId());
        return qw;
    }
    /**
     * æ–°å¢žå¤‡ä»¶å‡ºå…¥åº“明细
     *
     * @param bo å¤‡ä»¶å‡ºå…¥åº“明细
     * @return æ˜¯å¦æ–°å¢žæˆåŠŸ
     */
    @Override
    public Boolean insertByBo(EimsSpareInoutdtBo bo) {
        EimsSpareInoutdt add = MapstructUtils.convert(bo, EimsSpareInoutdt.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setId(add.getId());
        }
        return flag;
    }
    /**
     * ä¿®æ”¹å¤‡ä»¶å‡ºå…¥åº“明细
     *
     * @param bo å¤‡ä»¶å‡ºå…¥åº“明细
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    public Boolean updateByBo(EimsSpareInoutdtBo bo) {
        EimsSpareInoutdt update = MapstructUtils.convert(bo, EimsSpareInoutdt.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
    private void validEntityBeforeSave(EimsSpareInoutdt entity){
        //TODO åšä¸€äº›æ•°æ®æ ¡éªŒ,如唯一约束
    }
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤å¤‡ä»¶å‡ºå…¥åº“明细信息
     *
     * @param ids     å¾…删除的主键集合
     * @param isValid æ˜¯å¦è¿›è¡Œæœ‰æ•ˆæ€§æ ¡éªŒ
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareServiceImpl.java
@@ -1,5 +1,6 @@
package org.dromara.eims.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -8,6 +9,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.eims.domain.EimsSpareInout;
import org.dromara.eims.domain.bo.EimsSpareInoutBo;
import org.dromara.eims.domain.vo.EimsSpareInoutVo;
import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
import org.springframework.stereotype.Service;
import org.dromara.eims.domain.bo.EimsSpareBo;
import org.dromara.eims.domain.vo.EimsSpareVo;
@@ -56,6 +61,13 @@
        return TableDataInfo.build(result);
    }
    @Override
    public TableDataInfo<EimsSpareInoutdtVo> querySpareInoutList(EimsSpareBo bo, PageQuery pageQuery) {
        Page<EimsSpareInoutdtVo> result = baseMapper.selectSpareInoutList(pageQuery.build(), buildWrapper(bo));
        return TableDataInfo.build(result);
    }
    /**
     * æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„备件台账列表
     *
@@ -79,6 +91,13 @@
        lqw.like(StringUtils.isNotBlank(bo.getSupplier()), EimsSpare::getSupplier, bo.getSupplier());
        lqw.eq(StringUtils.isNotBlank(bo.getUnit()), EimsSpare::getUnit, bo.getUnit());
        return lqw;
    }
    private QueryWrapper<EimsSpare> buildWrapper(EimsSpareBo bo) {
        Map<String, Object> params = bo.getParams();
        QueryWrapper<EimsSpare> qw = Wrappers.query();
        qw.eq( "sp.id", bo.getId());
        return qw;
    }
    /**
@@ -132,4 +151,6 @@
        }
        return baseMapper.deleteByIds(ids) > 0;
    }
}
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsSpareInoutdtMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
<?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="org.dromara.eims.mapper.EimsSpareInoutdtMapper">
    <resultMap type="org.dromara.eims.domain.vo.EimsSpareInoutdtVo" id="SpareInoutdtVoResult">
    </resultMap>
    <select id="selectSpareInoutdtList" resultMap="SpareInoutdtVoResult">
        SELECT dt.*, sp.name spareName, sp.code spareCode, sp.model_no modelNo, sp.unit unit, io.order_code orderCode
        FROM eims_spare_inoutdt dt
                 LEFT JOIN eims_spare_inout io on dt.inout_id = io.id
                 LEFT JOIN eims_spare sp on dt.spare_id = sp.id
            ${ew.getCustomSqlSegment}
    </select>
</mapper>
eims/ruoyi-modules/lb-eims/src/main/resources/mapper/eims/EimsSpareMapper.xml
@@ -3,5 +3,13 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.eims.mapper.EimsSpareMapper">
    <resultMap type="org.dromara.eims.domain.vo.EimsSpareInoutdtVo" id="SpareInoutdtVoResult">
    </resultMap>
    <select id="selectSpareInoutList" resultMap="SpareInoutdtVoResult">
        SELECT io.*, dt.quantity, dt.actual_stock, dt.unit_price, dt.amount
        FROM eims_spare_inout io
                 JOIN eims_spare_inoutdt dt on io.id = dt.inout_id
                 JOIN eims_spare sp on dt.spare_id = sp.id
            ${ew.getCustomSqlSegment}
    </select>
</mapper>