From 4035416559e2002937806364b398df94587daaf2 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 02 四月 2026 17:56:18 +0800
Subject: [PATCH] 增加领用记录列表接口,维修后生成领用记录
---
doc/create_table_spare_parts_requisition_record.sql | 14 ++
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java | 42 ++++++
src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsRequisitionRecordDto.java | 15 ++
src/main/java/com/ruoyi/common/enums/SparePartsRequisitionRecordSourceTypeEnum.java | 27 ++++
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java | 10 +
src/main/java/com/ruoyi/measuringinstrumentledger/service/SparePartsRequisitionRecordService.java | 19 +++
src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SparePartsRequisitionRecord.java | 64 ++++++++++
src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsRequisitionRecordController.java | 40 ++++++
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsRequisitionRecordServiceImpl.java | 38 ++++++
src/main/java/com/ruoyi/measuringinstrumentledger/mapper/SparePartsRequisitionRecordMapper.java | 25 ++++
src/main/resources/mapper/measuringinstrumentledger/SparePartsRequisitionRecordMapper.xml | 36 ++++++
11 files changed, 329 insertions(+), 1 deletions(-)
diff --git a/doc/create_table_spare_parts_requisition_record.sql b/doc/create_table_spare_parts_requisition_record.sql
new file mode 100644
index 0000000..3fbee8a
--- /dev/null
+++ b/doc/create_table_spare_parts_requisition_record.sql
@@ -0,0 +1,14 @@
+drop table if exists spare_parts_requisition_record;
+create table spare_parts_requisition_record
+(
+ id bigint auto_increment primary key,
+ source_type smallint null comment '鏉ユ簮绫诲瀷(0 缁翠慨 1 淇濆吇)',
+ source_id bigint not null default 0 comment '鏉ユ簮id',
+ device_ledger_id bigint not null default 0 comment '璁惧id',
+ spare_parts_id bigint not null default 0 comment '澶囦欢id',
+ quantity int not null default 0 comment '鏁伴噺',
+ create_user bigint not null default 0 comment '鍒涘缓浜�',
+ tenant_id bigint not null comment '绉熸埛id',
+ create_time datetime null comment '褰曞叆鏃堕棿',
+ update_time datetime null comment '鏇存柊鏃堕棿'
+);
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/common/enums/SparePartsRequisitionRecordSourceTypeEnum.java b/src/main/java/com/ruoyi/common/enums/SparePartsRequisitionRecordSourceTypeEnum.java
new file mode 100644
index 0000000..b9acc40
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/enums/SparePartsRequisitionRecordSourceTypeEnum.java
@@ -0,0 +1,27 @@
+package com.ruoyi.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum SparePartsRequisitionRecordSourceTypeEnum implements BaseEnum<Integer> {
+ SparePartsRequisitionRecordSourceTypeRepair(0, "缁翠慨"),
+ SparePartsRequisitionRecordSourceTypeMaintenance(1, "淇濆吇");
+
+ private final Integer code;
+ private final String value;
+
+ SparePartsRequisitionRecordSourceTypeEnum(Integer code, String value) {
+ this.code = code;
+ this.value = value;
+ }
+
+ public static SparePartsRequisitionRecordSourceTypeEnum getByCode(Integer code) {
+ for (SparePartsRequisitionRecordSourceTypeEnum type : SparePartsRequisitionRecordSourceTypeEnum.values()) {
+ if (type.getCode().equals(code)) {
+ return type;
+ }
+ }
+ return null;
+ }
+}
+
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
index 330b3a9..ae7efcf 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -81,4 +81,14 @@
@ApiModelProperty("鏂囦欢鍒楄〃")
@TableField(exist = false)
private List<TempFile> fileList;
+
+ @ApiModelProperty("浣跨敤澶囦欢鍒楄〃")
+ @TableField(exist = false)
+ private List<SparePartUse> sparePartsUseList;
+
+ @Data
+ public static class SparePartUse {
+ private Long id;
+ private Integer quantity;
+ }
}
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
index a2a78f6..a2c3ee4 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -21,6 +21,8 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
+import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
+import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService;
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.other.service.TempFileService;
import com.ruoyi.sales.mapper.CommonFileMapper;
@@ -30,8 +32,10 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -52,6 +56,8 @@
private TempFileService tempFileService;
@Autowired
private CommonFileMapper commonFileMapper;
+ @Autowired
+ private SparePartsRequisitionRecordService sparePartsRequisitionRecordService;
@Override
public IPage<DeviceRepairDto> queryPage(Page page, DeviceRepairDto deviceRepairDto) {
@@ -133,7 +139,41 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public AjaxResult updateDeviceRepair(DeviceRepair deviceRepair) {
+ // 澶勭悊澶囦欢浣跨敤鎯呭喌
+ if (CollectionUtils.isNotEmpty(deviceRepair.getSparePartsUseList())) {
+ List<Long> sparePartIds = new ArrayList<>();
+ for (DeviceRepair.SparePartUse sparePartUse : deviceRepair.getSparePartsUseList()) {
+ // 鑾峰彇澶囦欢淇℃伅
+ SpareParts spareParts = sparePartsMapper.selectById(sparePartUse.getId());
+ if (spareParts != null) {
+ // 妫�鏌ユ暟閲忔槸鍚﹁冻澶�
+ if (spareParts.getQuantity().compareTo(new BigDecimal(sparePartUse.getQuantity())) >= 0) {
+ // 鏇存柊鏁伴噺
+ spareParts.setQuantity(spareParts.getQuantity().subtract(new BigDecimal(sparePartUse.getQuantity())));
+ sparePartsMapper.updateById(spareParts);
+ sparePartIds.add(sparePartUse.getId());
+
+ // 鍒涘缓澶囦欢棰嗙敤璁板綍
+ SparePartsRequisitionRecord record = new SparePartsRequisitionRecord();
+ record.setSourceType(0); // 0 缁翠慨
+ record.setSourceId(deviceRepair.getId());
+ record.setDeviceLedgerId(deviceRepair.getDeviceLedgerId());
+ record.setSparePartsId(sparePartUse.getId());
+ record.setQuantity(sparePartUse.getQuantity());
+ sparePartsRequisitionRecordService.save(record);
+ } else {
+ return AjaxResult.error("澶囦欢 " + spareParts.getName() + " 鏁伴噺涓嶈冻");
+ }
+ }
+ }
+ // 鏇存柊澶囦欢IDs瀛楁
+ if (!sparePartIds.isEmpty()) {
+ deviceRepair.setSparePartsIds(StringUtils.join(sparePartIds, ","));
+ }
+ }
+
if (this.updateById(deviceRepair)) {
if (CollectionUtils.isNotEmpty(deviceRepair.getFileList())) {
List<String> fileIds = deviceRepair.getFileList().stream()
@@ -205,4 +245,4 @@
return deviceRepairDto;
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsRequisitionRecordController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsRequisitionRecordController.java
new file mode 100644
index 0000000..47447f1
--- /dev/null
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsRequisitionRecordController.java
@@ -0,0 +1,40 @@
+package com.ruoyi.measuringinstrumentledger.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto;
+import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto;
+import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
+import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
+import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService;
+import com.ruoyi.measuringinstrumentledger.service.SparePartsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-02 03:59:56
+ */
+@RestController
+@RequestMapping("/sparePartsRequisitionRecord")
+@Api(tags = "澶囦欢棰嗙敤璁板綍鎺ュ彛")
+public class SparePartsRequisitionRecordController {
+ @Autowired
+ private SparePartsRequisitionRecordService sparePartsRequisitionRecordService;
+
+ @GetMapping("/listPage")
+ @ApiOperation("澶囦欢鍒嗙被-鍒嗛〉鏌ヨ")
+ public AjaxResult listPage(Page page, SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto){
+ IPage<SparePartsRequisitionRecordDto> listPage = sparePartsRequisitionRecordService.listPage(page, sparePartsRequisitionRecordDto);
+ return AjaxResult.success(listPage);
+ }
+}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsRequisitionRecordDto.java b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsRequisitionRecordDto.java
new file mode 100644
index 0000000..59b9517
--- /dev/null
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsRequisitionRecordDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.measuringinstrumentledger.dto;
+
+import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
+import lombok.Data;
+
+@Data
+public class SparePartsRequisitionRecordDto extends SparePartsRequisitionRecord {
+ private String sparePartsName;
+
+ private String deviceName;
+
+ private String sourceText;
+
+ private String operator;
+}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/SparePartsRequisitionRecordMapper.java b/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/SparePartsRequisitionRecordMapper.java
new file mode 100644
index 0000000..11dba94
--- /dev/null
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/SparePartsRequisitionRecordMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.measuringinstrumentledger.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto;
+import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto;
+import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
+import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-02 03:59:56
+ */
+@Mapper
+public interface SparePartsRequisitionRecordMapper extends BaseMapper<SparePartsRequisitionRecord> {
+ IPage<SparePartsRequisitionRecordDto> listPage(Page page, @Param("params") SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto);
+
+}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SparePartsRequisitionRecord.java b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SparePartsRequisitionRecord.java
new file mode 100644
index 0000000..ba2f40b
--- /dev/null
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SparePartsRequisitionRecord.java
@@ -0,0 +1,64 @@
+package com.ruoyi.measuringinstrumentledger.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-02 03:59:56
+ */
+@Getter
+@Setter
+@TableName("spare_parts_requisition_record")
+@ApiModel(value = "SparePartsRequisitionRecord瀵硅薄", description = "")
+public class SparePartsRequisitionRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("鏉ユ簮绫诲瀷(0 缁翠慨 1 淇濆吇)")
+ private Integer sourceType;
+
+ @ApiModelProperty("鏉ユ簮id")
+ private Long sourceId;
+
+ @ApiModelProperty("璁惧id")
+ private Long deviceLedgerId;
+
+ @ApiModelProperty("澶囦欢id")
+ private Long sparePartsId;
+
+ @ApiModelProperty("鏁伴噺")
+ private Integer quantity;
+
+ @ApiModelProperty("鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty("绉熸埛id")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+ @ApiModelProperty("褰曞叆鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/SparePartsRequisitionRecordService.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/SparePartsRequisitionRecordService.java
new file mode 100644
index 0000000..243fb64
--- /dev/null
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/SparePartsRequisitionRecordService.java
@@ -0,0 +1,19 @@
+package com.ruoyi.measuringinstrumentledger.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto;
+import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-02 03:59:56
+ */
+public interface SparePartsRequisitionRecordService extends IService<SparePartsRequisitionRecord> {
+ IPage<SparePartsRequisitionRecordDto> listPage(Page page, SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto);
+}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsRequisitionRecordServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsRequisitionRecordServiceImpl.java
new file mode 100644
index 0000000..4309562
--- /dev/null
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsRequisitionRecordServiceImpl.java
@@ -0,0 +1,38 @@
+package com.ruoyi.measuringinstrumentledger.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.enums.SparePartsRequisitionRecordSourceTypeEnum;
+import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto;
+import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
+import com.ruoyi.measuringinstrumentledger.mapper.SparePartsRequisitionRecordMapper;
+import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-02 03:59:56
+ */
+@Service
+public class SparePartsRequisitionRecordServiceImpl extends ServiceImpl<SparePartsRequisitionRecordMapper, SparePartsRequisitionRecord> implements SparePartsRequisitionRecordService {
+ @Autowired
+ private SparePartsRequisitionRecordMapper sparePartsRequisitionRecordMapper;
+
+ @Override
+ public IPage<SparePartsRequisitionRecordDto> listPage(Page page, SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto) {
+ IPage<SparePartsRequisitionRecordDto> result = sparePartsRequisitionRecordMapper.listPage(page, sparePartsRequisitionRecordDto);
+ // 澶勭悊鏉ユ簮绫诲瀷鏂囨湰
+ result.getRecords().forEach(record -> {
+ if (record.getSourceType() != null) {
+ record.setSourceText(SparePartsRequisitionRecordSourceTypeEnum.getByCode(record.getSourceType()).getValue());
+ }
+ });
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/mapper/measuringinstrumentledger/SparePartsRequisitionRecordMapper.xml b/src/main/resources/mapper/measuringinstrumentledger/SparePartsRequisitionRecordMapper.xml
new file mode 100644
index 0000000..2a4d5eb
--- /dev/null
+++ b/src/main/resources/mapper/measuringinstrumentledger/SparePartsRequisitionRecordMapper.xml
@@ -0,0 +1,36 @@
+<?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.ruoyi.measuringinstrumentledger.mapper.SparePartsRequisitionRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord">
+ <id column="id" property="id" />
+ <result column="source_type" property="sourceType" />
+ <result column="source_id" property="sourceId" />
+ <result column="device_ledger_id" property="deviceLedgerId" />
+ <result column="spare_parts_id" property="sparePartsId" />
+ <result column="quantity" property="quantity" />
+ <result column="create_user" property="createUser" />
+ <result column="tenant_id" property="tenantId" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+
+ <select id="listPage" resultType="com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto">
+ select sprr.*,sp.name as sparePartName, dl.name as deviceLedgerName, su.nick_name as operator
+ from spare_parts_requisition_record sprr
+ left join spare_parts sp on sp.id = sprr.spare_part_id
+ left join device_ledger dl on dl.id = sprr.device_ledger_id
+ left join sys_user su on su.id = sprr.create_user
+ <where>
+ <if test="params.sparePartsName != null and params.sparePartsName != ''">
+ and sp.name like concat('%',#{params.sparePartsName},'%')
+ </if>
+
+ <if test="params.sourceType != null and params.sourceType != ''">
+ and sprr.source_type = #{params.sourceType}
+ </if>
+ </where>
+ </select>
+</mapper>
--
Gitblit v1.9.3