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 'æ´æ°æ¶é´' ); 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; } } 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; } } 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; } } } 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); } } 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; } 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); } 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; } 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); } 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; } } 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>