From 6d0410c352afeceed069f8eb5f5b6b074fdc4814 Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期一, 31 三月 2025 16:44:40 +0800
Subject: [PATCH] 设备维保 设备租赁先

---
 platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml                                          |   18 +
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceScrap.java                          |   48 ++++
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceLeasingLedger.java                  |    2 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceController.java                 |    9 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceInventoryServiceImpl.java     |    7 
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/InventoryDetailVo.java                 |   29 ++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceScrapController.java            |  132 ++++++++++++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceScrapService.java                  |   10 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceScrapMapper.java                    |   11 +
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceRepair.java                         |   53 ++++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceInventoryController.java        |   20 +
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceRepairMapper.java                   |   11 +
 platformx-device-biz/src/main/resources/mapper/DeviceScrapMapper.xml                                              |   21 +
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceInventoryMapper.java                |    3 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceRepairService.java                 |   12 +
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceRepairServiceImpl.java        |   45 ++++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceScrapServiceImpl.java         |   36 +++
 platformx-device-biz/src/main/resources/mapper/DeviceRepairMapper.xml                                             |   22 ++
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceInventory.java                      |    6 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceRepairController.java           |  145 +++++++++++++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceInventoryService.java              |    2 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceLeasingLedgerServiceImpl.java |    1 
 22 files changed, 641 insertions(+), 2 deletions(-)

diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceInventory.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceInventory.java
index e862309..6ded1eb 100644
--- a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceInventory.java
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceInventory.java
@@ -45,6 +45,10 @@
 	private Integer source;
 
 	@Schema(description = "搴撳瓨鐘舵��")
-	@Column(columnDefinition="int comment '搴撳瓨鐘舵�� 1 鍙敤 2 绉熻祦涓� 3 鍐荤粨 4 鎶ュ簾'")
+	@Column(columnDefinition="int comment '搴撳瓨鐘舵�� 1 鍙敤 2 绉熻祦涓� 3 缁翠慨涓� 4 鎶ュ簾'")
 	private Integer inventoryStatus;
+
+	@Schema(description = "鍏宠仈鍙拌处鏄庣粏ID")
+	@Column(columnDefinition="bigint comment '鍏宠仈鍙拌处鏄庣粏ID'")
+	private Long ledgerItemId;
 }
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceLeasingLedger.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceLeasingLedger.java
index e2ba23c..f676182 100644
--- a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceLeasingLedger.java
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceLeasingLedger.java
@@ -93,7 +93,7 @@
 	 */
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	@Schema(description = "鍑虹鏃ユ湡")
-	@Column(columnDefinition="datetime comment '鍒拌揣楠屾敹鏃ユ湡'")
+	@Column(columnDefinition="datetime comment '鍑虹鏃ユ湡'")
 	private Date deliveryDate;
 
 }
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceRepair.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceRepair.java
new file mode 100644
index 0000000..de9b0fb
--- /dev/null
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceRepair.java
@@ -0,0 +1,53 @@
+package com.by4cloud.platformx.device.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.annotations.Table;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import java.util.Date;
+
+@Data
+@Entity
+@TableName("device_repair")
+@javax.persistence.Table(name = "device_repair")
+@Table(appliesTo = "device_repair", comment = "璁惧缁翠慨")
+public class DeviceRepair extends BaseModel<DeviceRepair> {
+
+	@Schema(description = "璁惧ID")
+	@Column(columnDefinition="long comment '璁惧ID'")
+	private Long deviceId;
+
+	@Schema(description = "璁惧搴撳瓨ID")
+	@Column(columnDefinition="long comment '璁惧搴撳瓨ID'")
+	private Long inventoryId;
+
+	@Schema(description = "璁惧搴忓垪鍙�")
+	@Column(columnDefinition="VARCHAR(64) comment '搴忓垪鍙�'")
+	private String serialNo;
+
+	@Schema(description = "璁惧缂栫爜")
+	@Column(columnDefinition="VARCHAR(64) comment '璁惧缂栫爜'")
+	private String deviceCode;
+
+	@Schema(description = "璁惧缁翠慨鐘舵��")
+	@Column(columnDefinition="int comment '璁惧缁翠慨鐘舵�� 1 寰呭鎵� 2 缁翠慨涓� 3 瀹屾垚'")
+	private Integer status;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	@Schema(description = "缁翠慨寮�濮嬫棩鏈�")
+	@Column(columnDefinition = "datetime comment '缁翠慨寮�濮嬫棩鏈�'")
+	private Date repairStartDate;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	@Schema(description = "缁翠慨缁撴潫鏃ユ湡")
+	@Column(columnDefinition = "datetime comment '缁翠慨缁撴潫鏃ユ湡'")
+	private Date repairEndDate;
+}
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceScrap.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceScrap.java
new file mode 100644
index 0000000..dda46cb
--- /dev/null
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceScrap.java
@@ -0,0 +1,48 @@
+package com.by4cloud.platformx.device.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.annotations.Table;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import java.util.Date;
+
+@Data
+@Entity
+@TableName("device_scrap")
+@javax.persistence.Table(name = "device_scrap")
+@Table(appliesTo = "device_scrap", comment = "璁惧鎶ュ簾")
+public class DeviceScrap extends BaseModel<DeviceScrap> {
+
+	@Schema(description = "璁惧ID")
+	@Column(columnDefinition="long comment '璁惧ID'")
+	private Long deviceId;
+
+	@Schema(description = "璁惧缂栫爜")
+	@Column(columnDefinition="VARCHAR(64) comment '璁惧缂栫爜'")
+	private String deviceCode;
+
+	@Schema(description = "璁惧搴撳瓨ID")
+	@Column(columnDefinition="long comment '璁惧搴撳瓨ID'")
+	private Long inventoryId;
+
+	@Schema(description = "璁惧搴忓垪鍙�")
+	@Column(columnDefinition="VARCHAR(64) comment '搴忓垪鍙�'")
+	private String serialNo;
+
+	@Schema(description = "璁惧鎶ュ簾鐘舵��")
+	@Column(columnDefinition="int comment '璁惧鎶ュ簾鐘舵�� 1 寰呭鎵� 2 瀹屾垚'")
+	private Integer status;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	@Schema(description = "鎶ュ簾鏃ユ湡")
+	@Column(columnDefinition = "datetime comment '鎶ュ簾鏃ユ湡'")
+	private Date scrapDate;
+
+}
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/InventoryDetailVo.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/InventoryDetailVo.java
new file mode 100644
index 0000000..371f3f4
--- /dev/null
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/InventoryDetailVo.java
@@ -0,0 +1,29 @@
+package com.by4cloud.platformx.device.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@Schema(description = "璁惧搴撳瓨璇︽儏")
+public class InventoryDetailVo {
+
+	@Schema(description = "鍚堝悓鍚嶇О")
+	private String contractName;
+
+	@Schema(description = "绉熻祦鏂�")
+	private String partyb;
+
+	@Schema(description = "璁惧缂栧彿")
+	private String deviceNumber;
+
+	@Schema(description = "璁惧搴忓垪鍙�")
+	private String serialNo;
+
+	@Schema(description = "鍑虹鏃ユ湡")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date deliveryDate;
+
+}
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceController.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceController.java
index 80e083d..3f4dadc 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceController.java
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceController.java
@@ -212,4 +212,13 @@
     public List<Device> export(Device device,Long[] ids) {
         return deviceService.list(Wrappers.lambdaQuery(device).in(ArrayUtil.isNotEmpty(ids), Device::getId, ids));
     }
+
+	/**
+	 * 鎵�鏈夎澶囦笅鎷�
+	 * @return
+	 */
+	@GetMapping("/getDropdowmList" )
+	public R getDeviceList() {
+		return R.ok(deviceService.list());
+	}
 }
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceInventoryController.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceInventoryController.java
index 3268151..9c25d1a 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceInventoryController.java
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceInventoryController.java
@@ -145,4 +145,24 @@
     public List<DeviceInventory> export(DeviceInventory deviceInventory,Long[] ids) {
         return deviceInventoryService.list(Wrappers.lambdaQuery(deviceInventory).in(ArrayUtil.isNotEmpty(ids), DeviceInventory::getId, ids));
     }
+
+	/**
+	 * 璁惧涓嬫墍鏈夊簭鍒楀彿涓嬫媺
+	 * @return
+	 */
+	@GetMapping("/getDropdowmList/{deviceId}" )
+	public R getDeviceList(@PathVariable("deviceId")Long deviceId) {
+		QueryWrapper<DeviceInventory> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("device_id",deviceId);
+		return R.ok(deviceInventoryService.list(queryWrapper));
+	}
+
+	/**
+	 * 绉熻祦鐘舵�佷笅鐨勮澶囩璧佽鎯�
+	 * @return
+	 */
+	@GetMapping("/getReleaseDetail/{id}" )
+	public R getReleaseDetail(@PathVariable("id")Long id) {
+		return deviceInventoryService.getReleaseDetail(id);
+	}
 }
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceRepairController.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceRepairController.java
new file mode 100644
index 0000000..f570bff
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceRepairController.java
@@ -0,0 +1,145 @@
+package com.by4cloud.platformx.device.controller;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.log.annotation.SysLog;
+import com.by4cloud.platformx.device.entity.DeviceInventory;
+import com.by4cloud.platformx.device.entity.DeviceRepair;
+import com.by4cloud.platformx.device.service.DeviceRepairService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import org.springdoc.api.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 璁惧缁翠慨
+ *
+ * @author syt
+ * @date 2025-03-31 13:51:53
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/deviceRepair" )
+@Tag(description = "deviceRepair" , name = "璁惧缁翠慨绠$悊" )
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class DeviceRepairController {
+
+    private final  DeviceRepairService deviceRepairService;
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page 鍒嗛〉瀵硅薄
+     * @param deviceRepair 璁惧缁翠慨
+     * @return
+     */
+    @Operation(summary = "鍒嗛〉鏌ヨ" , description = "鍒嗛〉鏌ヨ" )
+    @GetMapping("/page" )
+    @PreAuthorize("@pms.hasPermission('device_deviceRepair_view')" )
+    public R getDeviceRepairPage(@ParameterObject Page page, @ParameterObject DeviceRepair deviceRepair) {
+        LambdaQueryWrapper<DeviceRepair> wrapper = Wrappers.lambdaQuery();
+		wrapper.eq(StrUtil.isNotBlank(deviceRepair.getSerialNo()),DeviceRepair::getSerialNo,deviceRepair.getSerialNo());
+		wrapper.orderByDesc(DeviceRepair::getCreateTime);
+        return R.ok(deviceRepairService.page(page, wrapper));
+    }
+
+
+    /**
+     * 閫氳繃id鏌ヨ璁惧缁翠慨
+     * @param id id
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鏌ヨ" , description = "閫氳繃id鏌ヨ" )
+    @GetMapping("/{id}" )
+    @PreAuthorize("@pms.hasPermission('device_deviceRepair_view')" )
+    public R getById(@PathVariable("id" ) Long id) {
+        return R.ok(deviceRepairService.getById(id));
+    }
+
+    /**
+     * 鏂板璁惧缁翠慨
+     * @param deviceRepair 璁惧缁翠慨
+     * @return R
+     */
+    @Operation(summary = "鏂板璁惧缁翠慨" , description = "鏂板璁惧缁翠慨" )
+    @SysLog("鏂板璁惧缁翠慨" )
+    @PostMapping
+    @PreAuthorize("@pms.hasPermission('device_deviceRepair_add')" )
+    public R save(@RequestBody DeviceRepair deviceRepair) {
+		deviceRepair.setStatus(1);
+        return R.ok(deviceRepairService.save(deviceRepair));
+    }
+
+    /**
+     * 淇敼璁惧缁翠慨
+     * @param deviceRepair 璁惧缁翠慨
+     * @return R
+     */
+    @Operation(summary = "淇敼璁惧缁翠慨" , description = "淇敼璁惧缁翠慨" )
+    @SysLog("淇敼璁惧缁翠慨" )
+    @PutMapping
+    @PreAuthorize("@pms.hasPermission('device_deviceRepair_edit')" )
+    public R updateById(@RequestBody DeviceRepair deviceRepair) {
+        return R.ok(deviceRepairService.updateById(deviceRepair));
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎璁惧缁翠慨
+     * @param ids id鍒楄〃
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鍒犻櫎璁惧缁翠慨" , description = "閫氳繃id鍒犻櫎璁惧缁翠慨" )
+    @SysLog("閫氳繃id鍒犻櫎璁惧缁翠慨" )
+    @DeleteMapping
+    @PreAuthorize("@pms.hasPermission('device_deviceRepair_del')" )
+    public R removeById(@RequestBody Long[] ids) {
+        return R.ok(deviceRepairService.removeBatchByIds(CollUtil.toList(ids)));
+    }
+
+
+    /**
+     * 瀵煎嚭excel 琛ㄦ牸
+     * @param deviceRepair 鏌ヨ鏉′欢
+   	 * @param ids 瀵煎嚭鎸囧畾ID
+     * @return excel 鏂囦欢娴�
+     */
+    @ResponseExcel
+    @GetMapping("/export")
+    @PreAuthorize("@pms.hasPermission('device_deviceRepair_export')" )
+    public List<DeviceRepair> export(DeviceRepair deviceRepair,Long[] ids) {
+        return deviceRepairService.list(Wrappers.lambdaQuery(deviceRepair).in(ArrayUtil.isNotEmpty(ids), DeviceRepair::getId, ids));
+    }
+
+	/**
+	 * 璁惧缁翠慨瀹℃壒閫氳繃
+	 * @return
+	 */
+	@GetMapping("/approved/{id}" )
+	@PreAuthorize("@pms.hasPermission('device_deviceRepair_approved')" )
+	public R approved(@PathVariable("id")Long id) {
+		return deviceRepairService.approved(id);
+	}
+
+	/**
+	 * 璁惧缁翠慨瀹屾垚
+	 * @return
+	 */
+	@GetMapping("/complete/{id}" )
+	@PreAuthorize("@pms.hasPermission('device_deviceRepair_complete')" )
+	public R complete(@PathVariable("id")Long id) {
+		return deviceRepairService.complete(id);
+	}
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceScrapController.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceScrapController.java
new file mode 100644
index 0000000..7ac2bfd
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceScrapController.java
@@ -0,0 +1,132 @@
+package com.by4cloud.platformx.device.controller;
+
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.log.annotation.SysLog;
+import com.by4cloud.platformx.device.entity.DeviceRepair;
+import com.by4cloud.platformx.device.entity.DeviceScrap;
+import com.by4cloud.platformx.device.service.DeviceScrapService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import org.springdoc.api.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 璁惧鎶ュ簾
+ *
+ * @author syt
+ * @date 2025-03-31 13:49:43
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/deviceScrap" )
+@Tag(description = "deviceScrap" , name = "璁惧鎶ュ簾绠$悊" )
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class DeviceScrapController {
+
+    private final  DeviceScrapService deviceScrapService;
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page 鍒嗛〉瀵硅薄
+     * @param deviceScrap 璁惧鎶ュ簾
+     * @return
+     */
+    @Operation(summary = "鍒嗛〉鏌ヨ" , description = "鍒嗛〉鏌ヨ" )
+    @GetMapping("/page" )
+    @PreAuthorize("@pms.hasPermission('device_deviceScrap_view')" )
+    public R getDeviceScrapPage(@ParameterObject Page page, @ParameterObject DeviceScrap deviceScrap) {
+        LambdaQueryWrapper<DeviceScrap> wrapper = Wrappers.lambdaQuery();
+		wrapper.orderByDesc(DeviceScrap::getCreateTime);
+        return R.ok(deviceScrapService.page(page, wrapper));
+    }
+
+
+    /**
+     * 閫氳繃id鏌ヨ璁惧鎶ュ簾
+     * @param id id
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鏌ヨ" , description = "閫氳繃id鏌ヨ" )
+    @GetMapping("/{id}" )
+    @PreAuthorize("@pms.hasPermission('device_deviceScrap_view')" )
+    public R getById(@PathVariable("id" ) Long id) {
+        return R.ok(deviceScrapService.getById(id));
+    }
+
+    /**
+     * 鏂板璁惧鎶ュ簾
+     * @param deviceScrap 璁惧鎶ュ簾
+     * @return R
+     */
+    @Operation(summary = "鏂板璁惧鎶ュ簾" , description = "鏂板璁惧鎶ュ簾" )
+    @SysLog("鏂板璁惧鎶ュ簾" )
+    @PostMapping
+    @PreAuthorize("@pms.hasPermission('device_deviceScrap_add')" )
+    public R save(@RequestBody DeviceScrap deviceScrap) {
+		deviceScrap.setStatus(1);
+        return R.ok(deviceScrapService.save(deviceScrap));
+    }
+
+    /**
+     * 淇敼璁惧鎶ュ簾
+     * @param deviceScrap 璁惧鎶ュ簾
+     * @return R
+     */
+    @Operation(summary = "淇敼璁惧鎶ュ簾" , description = "淇敼璁惧鎶ュ簾" )
+    @SysLog("淇敼璁惧鎶ュ簾" )
+    @PutMapping
+    @PreAuthorize("@pms.hasPermission('device_deviceScrap_edit')" )
+    public R updateById(@RequestBody DeviceScrap deviceScrap) {
+        return R.ok(deviceScrapService.updateById(deviceScrap));
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎璁惧鎶ュ簾
+     * @param ids id鍒楄〃
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鍒犻櫎璁惧鎶ュ簾" , description = "閫氳繃id鍒犻櫎璁惧鎶ュ簾" )
+    @SysLog("閫氳繃id鍒犻櫎璁惧鎶ュ簾" )
+    @DeleteMapping
+    @PreAuthorize("@pms.hasPermission('device_deviceScrap_del')" )
+    public R removeById(@RequestBody Long[] ids) {
+        return R.ok(deviceScrapService.removeBatchByIds(CollUtil.toList(ids)));
+    }
+
+
+    /**
+     * 瀵煎嚭excel 琛ㄦ牸
+     * @param deviceScrap 鏌ヨ鏉′欢
+   	 * @param ids 瀵煎嚭鎸囧畾ID
+     * @return excel 鏂囦欢娴�
+     */
+    @ResponseExcel
+    @GetMapping("/export")
+    @PreAuthorize("@pms.hasPermission('device_deviceScrap_export')" )
+    public List<DeviceScrap> export(DeviceScrap deviceScrap,Long[] ids) {
+        return deviceScrapService.list(Wrappers.lambdaQuery(deviceScrap).in(ArrayUtil.isNotEmpty(ids), DeviceScrap::getId, ids));
+    }
+
+	/**
+	 * 璁惧缁翠慨瀹℃壒閫氳繃
+	 * @return
+	 */
+	@GetMapping("/approved/{id}" )
+	@PreAuthorize("@pms.hasPermission('device_deviceScrap_approved')" )
+	public R approved(@PathVariable("id")Long id) {
+		return deviceScrapService.approved(id);
+	}
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceInventoryMapper.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceInventoryMapper.java
index c059f90..0db9e94 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceInventoryMapper.java
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceInventoryMapper.java
@@ -2,10 +2,13 @@
 
 import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
 import com.by4cloud.platformx.device.entity.DeviceInventory;
+import com.by4cloud.platformx.device.entity.vo.InventoryDetailVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface DeviceInventoryMapper extends PlatformxBaseMapper<DeviceInventory> {
 
 
+    InventoryDetailVo getReleaseDetail(@Param("id") Long id);
 }
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceRepairMapper.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceRepairMapper.java
new file mode 100644
index 0000000..d93cca8
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceRepairMapper.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.device.mapper;
+
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import com.by4cloud.platformx.device.entity.DeviceRepair;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DeviceRepairMapper extends PlatformxBaseMapper<DeviceRepair> {
+
+
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceScrapMapper.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceScrapMapper.java
new file mode 100644
index 0000000..ebfb2e1
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceScrapMapper.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.device.mapper;
+
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import com.by4cloud.platformx.device.entity.DeviceScrap;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DeviceScrapMapper extends PlatformxBaseMapper<DeviceScrap> {
+
+
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceInventoryService.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceInventoryService.java
index 7083605..c559473 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceInventoryService.java
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceInventoryService.java
@@ -1,9 +1,11 @@
 package com.by4cloud.platformx.device.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.device.entity.DeviceInventory;
 import com.by4cloud.platformx.device.entity.InventoryFlowWater;
 
 public interface DeviceInventoryService extends IService<DeviceInventory> {
 
+    R getReleaseDetail(Long id);
 }
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceRepairService.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceRepairService.java
new file mode 100644
index 0000000..055fd4e
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceRepairService.java
@@ -0,0 +1,12 @@
+package com.by4cloud.platformx.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.device.entity.DeviceRepair;
+
+public interface DeviceRepairService extends IService<DeviceRepair> {
+
+	R approved(Long id);
+
+	R complete(Long id);
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceScrapService.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceScrapService.java
new file mode 100644
index 0000000..8d4cf0f
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceScrapService.java
@@ -0,0 +1,10 @@
+package com.by4cloud.platformx.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.device.entity.DeviceScrap;
+
+public interface DeviceScrapService extends IService<DeviceScrap> {
+
+    R approved(Long id);
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceInventoryServiceImpl.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceInventoryServiceImpl.java
index da0b221..bb6f0fd 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceInventoryServiceImpl.java
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceInventoryServiceImpl.java
@@ -1,8 +1,10 @@
 package com.by4cloud.platformx.device.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.device.entity.DeviceInventory;
 import com.by4cloud.platformx.device.entity.InventoryFlowWater;
+import com.by4cloud.platformx.device.entity.vo.InventoryDetailVo;
 import com.by4cloud.platformx.device.mapper.DeviceInventoryMapper;
 import com.by4cloud.platformx.device.mapper.InventoryFlowWaterMapper;
 import com.by4cloud.platformx.device.service.DeviceInventoryService;
@@ -17,4 +19,9 @@
  */
 @Service
 public class DeviceInventoryServiceImpl extends ServiceImpl<DeviceInventoryMapper, DeviceInventory> implements DeviceInventoryService {
+	@Override
+	public R getReleaseDetail(Long id) {
+		InventoryDetailVo detailVo = baseMapper.getReleaseDetail(id);
+		return R.ok(detailVo);
+	}
 }
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceLeasingLedgerServiceImpl.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceLeasingLedgerServiceImpl.java
index 2e5479b..e3862fa 100644
--- a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceLeasingLedgerServiceImpl.java
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceLeasingLedgerServiceImpl.java
@@ -113,6 +113,7 @@
 						//鍑哄簱鎿嶄綔 搴撳瓨鐘舵�佷负  绉熻祦涓�
 						inventory.setInventoryStatus(2);
 					}
+					inventory.setLedgerItemId(item.getId());
 					//搴撳瓨璋冩暣
 					inventoryMapper.insert(inventory);
 
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceRepairServiceImpl.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceRepairServiceImpl.java
new file mode 100644
index 0000000..c483823
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceRepairServiceImpl.java
@@ -0,0 +1,45 @@
+package com.by4cloud.platformx.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.device.entity.DeviceInventory;
+import com.by4cloud.platformx.device.entity.DeviceRepair;
+import com.by4cloud.platformx.device.mapper.DeviceInventoryMapper;
+import com.by4cloud.platformx.device.mapper.DeviceRepairMapper;
+import com.by4cloud.platformx.device.service.DeviceRepairService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+/**
+ * 璁惧缁翠慨
+ *
+ * @author syt
+ * @date 2025-03-31 13:51:53
+ */
+@Service
+@AllArgsConstructor
+public class DeviceRepairServiceImpl extends ServiceImpl<DeviceRepairMapper, DeviceRepair> implements DeviceRepairService {
+
+	private final DeviceInventoryMapper inventoryMapper;
+
+	@Override
+	public R approved(Long id) {
+		DeviceRepair repair = baseMapper.selectById(id);
+		repair.setStatus(2);
+		baseMapper.updateById(repair);
+		DeviceInventory inventory = inventoryMapper.selectById(repair.getInventoryId());
+		inventory.setInventoryStatus(3);
+		inventoryMapper.updateById(inventory);
+		return R.ok();
+	}
+
+	@Override
+	public R complete(Long id) {
+		DeviceRepair repair = baseMapper.selectById(id);
+		repair.setStatus(3);
+		baseMapper.updateById(repair);
+		DeviceInventory inventory = inventoryMapper.selectById(repair.getInventoryId());
+		inventory.setInventoryStatus(1);
+		inventoryMapper.updateById(inventory);
+		return R.ok();
+	}
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceScrapServiceImpl.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceScrapServiceImpl.java
new file mode 100644
index 0000000..2dd8044
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceScrapServiceImpl.java
@@ -0,0 +1,36 @@
+package com.by4cloud.platformx.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.device.entity.DeviceInventory;
+import com.by4cloud.platformx.device.entity.DeviceRepair;
+import com.by4cloud.platformx.device.entity.DeviceScrap;
+import com.by4cloud.platformx.device.mapper.DeviceInventoryMapper;
+import com.by4cloud.platformx.device.mapper.DeviceScrapMapper;
+import com.by4cloud.platformx.device.service.DeviceScrapService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+/**
+ * 璁惧鎶ュ簾
+ *
+ * @author syt
+ * @date 2025-03-31 13:49:43
+ */
+@Service
+@AllArgsConstructor
+public class DeviceScrapServiceImpl extends ServiceImpl<DeviceScrapMapper, DeviceScrap> implements DeviceScrapService {
+
+	private final DeviceInventoryMapper inventoryMapper;
+
+	@Override
+	public R approved(Long id) {
+		DeviceScrap scrap = baseMapper.selectById(id);
+		scrap.setStatus(2);
+		baseMapper.updateById(scrap);
+		DeviceInventory inventory = inventoryMapper.selectById(scrap.getInventoryId());
+		inventory.setInventoryStatus(4);
+		inventoryMapper.updateById(inventory);
+		return R.ok();
+	}
+
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/resources/mapper/DeviceRepairMapper.xml b/platformx-device-biz/src/main/resources/mapper/DeviceRepairMapper.xml
new file mode 100644
index 0000000..f85d139
--- /dev/null
+++ b/platformx-device-biz/src/main/resources/mapper/DeviceRepairMapper.xml
@@ -0,0 +1,22 @@
+<?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.by4cloud.platformx.device.mapper.DeviceRepairMapper">
+
+  <resultMap id="deviceRepairMap" type="com.by4cloud.platformx.device.entity.DeviceScrap">
+        <id property="id" column="id"/>
+        <result property="compId" column="comp_id"/>
+        <result property="deviceCoder" column="device_coder"/>
+        <result property="deviceId" column="device_id"/>
+        <result property="inventoryId" column="inventory_id"/>
+        <result property="repairEndDate" column="repair_end_date"/>
+        <result property="repairStartDate" column="repair_start_date"/>
+        <result property="serialNo" column="serial_no"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+  </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/resources/mapper/DeviceScrapMapper.xml b/platformx-device-biz/src/main/resources/mapper/DeviceScrapMapper.xml
new file mode 100644
index 0000000..13c0b83
--- /dev/null
+++ b/platformx-device-biz/src/main/resources/mapper/DeviceScrapMapper.xml
@@ -0,0 +1,21 @@
+<?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.by4cloud.platformx.device.mapper.DeviceScrapMapper">
+
+  <resultMap id="deviceScrapMap" type="com.by4cloud.platformx.device.entity.DeviceScrap">
+        <id property="id" column="id"/>
+        <result property="compId" column="comp_id"/>
+        <result property="deviceCoder" column="device_coder"/>
+        <result property="deviceId" column="device_id"/>
+        <result property="inventoryId" column="inventory_id"/>
+        <result property="scrapDate" column="scrap_date"/>
+        <result property="serialNo" column="serial_no"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+  </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml b/platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml
index b84b53e..ac2a1b0 100644
--- a/platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml
+++ b/platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml
@@ -18,4 +18,22 @@
         <result property="updateTime" column="update_time"/>
         <result property="delFlag" column="del_flag"/>
   </resultMap>
+    <select id="getReleaseDetail" resultType="com.by4cloud.platformx.device.entity.vo.InventoryDetailVo">
+		select
+			c.name contractName,
+			c.partyb,
+			di.device_number,
+			di.serial_no,
+			dll.delivery_date
+		from
+			device_inventory di
+				join device_leasing_ledger_item dlli on
+				di.ledger_item_id = dlli.id
+				join device_leasing_ledger dll on
+				dll.id = dlli.ledger_id
+				join contract c on
+				c.`number`  = dll.contract_code
+		where
+			di.id =#{id}
+	</select>
 </mapper>

--
Gitblit v1.9.1