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/DeviceMaintenance.java
@@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import java.util.List; @Data @TableName("device_maintenance") @@ -84,4 +85,17 @@ @ApiModelProperty("ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("é¢ç¨å¤ä»¶ids") private String sparePartsIds; @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/pojo/DeviceRepair.java
@@ -10,6 +10,7 @@ import java.time.LocalDateTime; import java.util.Date; import java.util.List; @Data @TableName("device_repair") @@ -72,5 +73,16 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("é¢ç¨å¤ä»¶ids") private String sparePartsIds; @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/DeviceMaintenanceServiceImpl.java
@@ -12,10 +12,17 @@ import com.ruoyi.device.pojo.DeviceMaintenance; import com.ruoyi.device.service.IDeviceMaintenanceService; 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 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.ArrayList; import java.util.List; @@ -27,6 +34,10 @@ @Autowired private DeviceMaintenanceMapper deviceMaintenanceMapper; @Autowired private SparePartsMapper sparePartsMapper; @Autowired private SparePartsRequisitionRecordService sparePartsRequisitionRecordService; @Override public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) { @@ -44,7 +55,42 @@ } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenance deviceMaintenance) { DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId()); // å¤çå¤ä»¶ä½¿ç¨æ åµ if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) { List<Long> sparePartIds = new ArrayList<>(); for (DeviceMaintenance.SparePartUse sparePartUse : deviceMaintenance.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(1); // 1 ä¿å » record.setSourceId(deviceMaintenance.getId()); record.setDeviceLedgerId(oldDeviceMaintenance.getDeviceLedgerId()); record.setSparePartsId(sparePartUse.getId()); record.setQuantity(sparePartUse.getQuantity()); sparePartsRequisitionRecordService.save(record); } else { return AjaxResult.error("å¤ä»¶ " + spareParts.getName() + " æ°éä¸è¶³"); } } } // æ´æ°å¤ä»¶IDsåæ®µ if (!sparePartIds.isEmpty()) { deviceMaintenance.setSparePartsIds(StringUtils.join(sparePartIds, ",")); } } if (this.updateById(deviceMaintenance)) { return AjaxResult.success(); } src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.device.dto.DeviceDefectRecordDto; @@ -15,12 +16,19 @@ import com.ruoyi.device.service.IDeviceLedgerService; import com.ruoyi.device.service.IDeviceRepairService; 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 lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; 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.ArrayList; import java.util.Arrays; import java.util.List; @@ -36,6 +44,11 @@ private DeviceRepairMapper deviceRepairMapper; @Autowired private IDeviceLedgerService deviceLedgerService; @Autowired private SparePartsMapper sparePartsMapper; @Autowired private SparePartsRequisitionRecordService sparePartsRequisitionRecordService; @Override public IPage<DeviceRepairDto> queryPage(Page page, DeviceRepairDto deviceRepairDto) { @@ -55,7 +68,42 @@ } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult updateDeviceRepair(DeviceRepair deviceRepair) { DeviceRepair oldDeviceRepair = this.getById(deviceRepair.getId()); // å¤çå¤ä»¶ä½¿ç¨æ åµ 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(oldDeviceRepair.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)) { Long id = deviceRepair.getId(); // src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsRequisitionRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ 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.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; 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,23 @@ package com.ruoyi.measuringinstrumentledger.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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 org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * <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,67 @@ package com.ruoyi.measuringinstrumentledger.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.time.LocalDateTime; /** * <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 Integer createUser; @ApiModelProperty("ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("å½å ¥æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty("æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 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.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; /** * <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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.enums.SparePartsRequisitionRecordSourceTypeEnum; import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.mapper.SparePartsRequisitionRecordMapper; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; 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 sparePartsName, dl.device_name as deviceName, su.nick_name as operator from spare_parts_requisition_record sprr left join spare_parts sp on sp.id = sprr.spare_parts_id left join device_ledger dl on dl.id = sprr.device_ledger_id left join sys_user su on su.user_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>