From cc59b65bc63b839127c29775bcd410dd407de66d Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期一, 21 四月 2025 17:20:02 +0800
Subject: [PATCH] 设备采购计划与设备照片

---
 platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml                                         |    3 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DevicePurchasePlanController.java    |  137 ++++++++++++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DevicePurchasePlanService.java          |   20 +
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanItemMapper.java        |   11 +
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlanItem.java              |   89 ++++++++
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/InventoryDetailVo.java                |    2 
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/constant/MaxSizeContant.java                    |    5 
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanMapper.java            |   16 +
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/DevicePurchasePlanPageVo.java         |   55 +++++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceInventoryController.java       |   11 +
 platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanMapper.xml                                      |   48 ++++
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/dto/DevicePurchasePlanQueryDTO.java             |   20 +
 platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanItemMapper.xml                                  |   23 ++
 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DevicePurchasePlanServiceImpl.java |   91 ++++++++
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceInventory.java                     |    4 
 platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlan.java                  |   72 ++++++
 16 files changed, 605 insertions(+), 2 deletions(-)

diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/constant/MaxSizeContant.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/constant/MaxSizeContant.java
index ad399d5..0265a11 100644
--- a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/constant/MaxSizeContant.java
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/constant/MaxSizeContant.java
@@ -38,7 +38,10 @@
 	 * 绉熻祦鍙拌处缂栧彿
 	 */
 	String LEDGER_CODE = "LEDGER_CODE";
-
+	/**
+	 * 璁惧閲囪喘璁″垝缂栧彿
+	 */
+	String DEVICE_PURCHASE_CODE = "DEVICE_PURCHASE_CODE";
 
 
 
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/dto/DevicePurchasePlanQueryDTO.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/dto/DevicePurchasePlanQueryDTO.java
new file mode 100644
index 0000000..027142f
--- /dev/null
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/dto/DevicePurchasePlanQueryDTO.java
@@ -0,0 +1,20 @@
+package com.by4cloud.platformx.device.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class DevicePurchasePlanQueryDTO {
+
+	/**
+	 * 閲囪喘璁″垝鍚嶇О
+	 */
+	@Schema(description = "閲囪喘璁″垝鍚嶇О")
+	private String planName;
+
+	/**
+	 * 閲囪喘璁″垝缂栧彿
+	 */
+	@Schema(description = "閲囪喘璁″垝缂栧彿")
+	private String planCode;
+}
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 6ded1eb..8657194 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
@@ -51,4 +51,8 @@
 	@Schema(description = "鍏宠仈鍙拌处鏄庣粏ID")
 	@Column(columnDefinition="bigint comment '鍏宠仈鍙拌处鏄庣粏ID'")
 	private Long ledgerItemId;
+
+	@Schema(description = "璁惧鐓х墖鍦板潃")
+	@Column(columnDefinition="varchar(256) comment '璁惧鐓х墖鍦板潃'")
+	private String filePath;
 }
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlan.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlan.java
new file mode 100644
index 0000000..9934127
--- /dev/null
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlan.java
@@ -0,0 +1,72 @@
+package com.by4cloud.platformx.device.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+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 javax.persistence.Transient;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@Entity
+@TableName("device_purchase_plan")
+@javax.persistence.Table(name = "device_purchase_plan")
+@Table(appliesTo = "device_purchase_plan", comment = "璁惧閲囪喘璁″垝")
+public class DevicePurchasePlan extends BaseModel<DevicePurchasePlan> {
+
+	/**
+	 * 閲囪喘璁″垝鍚嶇О
+	 */
+	@Schema(description = "閲囪喘璁″垝鍚嶇О")
+	@Column(columnDefinition="VARCHAR(128) comment '閲囪喘璁″垝鍚嶇О'")
+	private String planName;
+
+	/**
+	 * 閲囪喘璁″垝缂栧彿
+	 */
+	@Schema(description = "閲囪喘璁″垝缂栧彿")
+	@Column(columnDefinition="VARCHAR(128) comment '閲囪喘璁″垝缂栧彿'")
+	private String planCode;
+
+	/**
+	 * 鐢宠浜�
+	 */
+	@Schema(description = "鐢宠浜�")
+	@Column(columnDefinition="bigint comment '鐢宠浜�'")
+	private Long releaseId;
+
+	/**
+	 * 鐢宠鍗曚綅
+	 */
+	@Schema(description = "鐢宠鍗曚綅")
+	@Column(columnDefinition="bigint comment '鐢宠鍗曚綅'")
+	private Long releaseCompId;
+
+	/**
+	 * 鐢宠鏃堕棿
+	 */
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	@Schema(description = "鐢宠鏃堕棿")
+	@Column(columnDefinition="datetime comment '鐢宠鏃堕棿'")
+	private Date releaseTime;
+
+	/**
+	 * 鐘舵��
+	 */
+	@Schema(description = "鐘舵��")
+	@Column(columnDefinition="int comment '绫诲瀷 0寰呭鎵癸紝1宸插鎵�'")
+	private Integer status;
+
+	@Transient
+	@TableField(exist = false)
+	private List<DevicePurchasePlanItem> planItemList;
+}
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlanItem.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlanItem.java
new file mode 100644
index 0000000..754040a
--- /dev/null
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlanItem.java
@@ -0,0 +1,89 @@
+package com.by4cloud.platformx.device.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.annotations.Table;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+
+@Data
+@Entity
+@TableName("device_purchase_plan_item")
+@javax.persistence.Table(name = "device_purchase_plan_item")
+@Table(appliesTo = "device_purchase_plan_item", comment = "璁惧閲囪喘璁″垝瀛愰」")
+public class DevicePurchasePlanItem extends BaseModel<DevicePurchasePlanItem> {
+
+	/**
+	 * 璁″垝ID
+	 */
+	@Schema(description="璁″垝ID")
+	@Column(columnDefinition="bigint comment '璁″垝ID'")
+	private Long planId;
+
+	/**
+	 * 璁惧ID
+	 */
+	@Schema(description="璁惧ID")
+	@Column(columnDefinition="bigint comment '璁惧ID'")
+	private Long deviceId;
+
+	/**
+	 * 璁惧缂栫爜
+	 */
+	@Schema(description="璁惧缂栫爜")
+	@Column(columnDefinition="VARCHAR(32) comment '璁惧缂栫爜'")
+	private String deviceCode;
+
+	/**
+	 * 璁惧鍚嶇О
+	 */
+	@Schema(description="璁惧鍚嶇О")
+	@Column(columnDefinition="VARCHAR(256) comment '璁惧鍚嶇О'")
+	private String deviceName;
+
+	/**
+	 * 瑙勬牸鍨嬪彿
+	 */
+	@Schema(description="瑙勬牸鍨嬪彿")
+	@Column(columnDefinition="VARCHAR(256) comment '瑙勬牸鍨嬪彿'")
+	private String deviceModels;
+
+	/**
+	 * 鍏抽敭鍙傛暟
+	 */
+	@Schema(description="鍏抽敭鍙傛暟")
+	@Column(columnDefinition="VARCHAR(256) comment '鍏抽敭鍙傛暟'")
+	private String keyParameter;
+
+	/**
+	 * 璁¢噺鍗曚綅
+	 */
+	@Schema(description="璁¢噺鍗曚綅")
+	@Column(columnDefinition="VARCHAR(32) comment '璁¢噺鍗曚綅'")
+	private String meteringUnit;
+
+	/**
+	 * 鏁伴噺
+	 */
+	@Schema(description = "鏁伴噺")
+	@Column(columnDefinition="INTEGER comment '鏁伴噺'")
+	private Integer num;
+
+	/**
+	 * 鍗曚环
+	 */
+	@Schema(description = "鍗曚环")
+	@Column(columnDefinition="decimal(10,2) comment '鍗曚环'")
+	private BigDecimal unitPrice;
+
+	/**
+	 * 閲戦
+	 */
+	@Schema(description = "閲戦")
+	@Column(columnDefinition="decimal(10,2) comment '閲戦'")
+	private BigDecimal amount;
+}
diff --git a/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/DevicePurchasePlanPageVo.java b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/DevicePurchasePlanPageVo.java
new file mode 100644
index 0000000..087ca3f
--- /dev/null
+++ b/platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/DevicePurchasePlanPageVo.java
@@ -0,0 +1,55 @@
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class DevicePurchasePlanPageVo {
+
+	private Long id;
+	/**
+	 * 閲囪喘璁″垝鍚嶇О
+	 */
+	@Schema(description = "閲囪喘璁″垝鍚嶇О")
+	private String planName;
+
+	/**
+	 * 閲囪喘璁″垝缂栧彿
+	 */
+	@Schema(description = "閲囪喘璁″垝缂栧彿")
+	private String planCode;
+
+	/**
+	 * 鐢宠浜�
+	 */
+	@Schema(description = "鐢宠浜�")
+	private Long releaseId;
+
+	/**
+	 * 鐢宠鍗曚綅
+	 */
+	@Schema(description = "鐢宠鍗曚綅")
+	private Long releaseCompId;
+
+	/**
+	 * 鐢宠鏃堕棿
+	 */
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	@Schema(description = "鐢宠鏃堕棿")
+	private Date releaseTime;
+
+	/**
+	 * 鐘舵��
+	 */
+	@Schema(description = "鐘舵��")
+	private Integer status;
+
+	private String userName;
+
+	private String deptName;
+}
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
index 3861361..fb1cdf0 100644
--- 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
@@ -26,4 +26,6 @@
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date deliveryDate;
 
+	@Schema(description = "鍥剧墖鍦板潃")
+	private String filePath;
 }
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 a1c9a82..6a60a0b 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
@@ -166,4 +166,15 @@
 	public R getReleaseDetail(@PathVariable("id")Long id) {
 		return deviceInventoryService.getReleaseDetail(id);
 	}
+
+	/**
+	 * 淇敼搴撳瓨琛�
+	 * @param deviceInventory 搴撳瓨琛�
+	 * @return R
+	 */
+	@SysLog("淇敼搴撳瓨琛�" )
+	@PutMapping("/uploadPic")
+	public R uploadPic(@RequestBody DeviceInventory deviceInventory) {
+		return R.ok(deviceInventoryService.updateById(deviceInventory));
+	}
 }
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DevicePurchasePlanController.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DevicePurchasePlanController.java
new file mode 100644
index 0000000..b5136e5
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DevicePurchasePlanController.java
@@ -0,0 +1,137 @@
+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.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.common.security.util.SecurityUtils;
+import com.by4cloud.platformx.device.constant.MaxSizeContant;
+import com.by4cloud.platformx.device.dto.DevicePurchasePlanQueryDTO;
+import com.by4cloud.platformx.device.entity.DevicePurchasePlan;
+import com.by4cloud.platformx.device.service.DevicePurchasePlanService;
+import com.by4cloud.platformx.device.service.JcMaxSizeService;
+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.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 璁惧閲囪喘璁″垝
+ *
+ * @author syt
+ * @date 2025-04-21 14:43:13
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/devicePurchasePlan" )
+@Tag(description = "devicePurchasePlan" , name = "璁惧閲囪喘璁″垝绠$悊" )
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class DevicePurchasePlanController {
+
+    private final  DevicePurchasePlanService devicePurchasePlanService;
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page 鍒嗛〉瀵硅薄
+     * @param devicePurchasePlan 璁惧閲囪喘璁″垝
+     * @return
+     */
+    @Operation(summary = "鍒嗛〉鏌ヨ" , description = "鍒嗛〉鏌ヨ" )
+    @GetMapping("/page" )
+    @PreAuthorize("@pms.hasPermission('device_devicePurchasePlan_view')" )
+    public R getDevicePurchasePlanPage(@ParameterObject Page page, @ParameterObject DevicePurchasePlanQueryDTO queryDTO) {
+        return R.ok(devicePurchasePlanService.pageNew(page, queryDTO));
+    }
+
+
+    /**
+     * 閫氳繃id鏌ヨ璁惧閲囪喘璁″垝
+     * @param id id
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鏌ヨ" , description = "閫氳繃id鏌ヨ" )
+    @GetMapping("/{id}" )
+    @PreAuthorize("@pms.hasPermission('device_devicePurchasePlan_view')" )
+    public R getById(@PathVariable("id" ) Long id) {
+        return R.ok(devicePurchasePlanService.getByIdNew(id));
+    }
+
+    /**
+     * 鏂板璁惧閲囪喘璁″垝
+     * @param devicePurchasePlan 璁惧閲囪喘璁″垝
+     * @return R
+     */
+    @Operation(summary = "鏂板璁惧閲囪喘璁″垝" , description = "鏂板璁惧閲囪喘璁″垝" )
+    @SysLog("鏂板璁惧閲囪喘璁″垝" )
+    @PostMapping
+    @PreAuthorize("@pms.hasPermission('device_devicePurchasePlan_add')" )
+    public R save(@RequestBody DevicePurchasePlan devicePurchasePlan) {
+
+        return R.ok(devicePurchasePlanService.saveNew(devicePurchasePlan));
+    }
+
+    /**
+     * 淇敼璁惧閲囪喘璁″垝
+     * @param devicePurchasePlan 璁惧閲囪喘璁″垝
+     * @return R
+     */
+    @Operation(summary = "淇敼璁惧閲囪喘璁″垝" , description = "淇敼璁惧閲囪喘璁″垝" )
+    @SysLog("淇敼璁惧閲囪喘璁″垝" )
+    @PutMapping
+    @PreAuthorize("@pms.hasPermission('device_devicePurchasePlan_edit')" )
+    public R updateById(@RequestBody DevicePurchasePlan devicePurchasePlan) {
+        return R.ok(devicePurchasePlanService.updateByIdNew(devicePurchasePlan));
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎璁惧閲囪喘璁″垝
+     * @param ids id鍒楄〃
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鍒犻櫎璁惧閲囪喘璁″垝" , description = "閫氳繃id鍒犻櫎璁惧閲囪喘璁″垝" )
+    @SysLog("閫氳繃id鍒犻櫎璁惧閲囪喘璁″垝" )
+    @DeleteMapping
+    @PreAuthorize("@pms.hasPermission('device_devicePurchasePlan_del')" )
+    public R removeById(@RequestBody Long[] ids) {
+        return R.ok(devicePurchasePlanService.removeBatchByIds(CollUtil.toList(ids)));
+    }
+
+
+    /**
+     * 瀵煎嚭excel 琛ㄦ牸
+     * @param devicePurchasePlan 鏌ヨ鏉′欢
+   	 * @param ids 瀵煎嚭鎸囧畾ID
+     * @return excel 鏂囦欢娴�
+     */
+    @ResponseExcel
+    @GetMapping("/export")
+    @PreAuthorize("@pms.hasPermission('device_devicePurchasePlan_export')" )
+    public List<DevicePurchasePlan> export(DevicePurchasePlan devicePurchasePlan,Long[] ids) {
+        return devicePurchasePlanService.list(Wrappers.lambdaQuery(devicePurchasePlan).in(ArrayUtil.isNotEmpty(ids), DevicePurchasePlan::getId, ids));
+    }
+
+	/**
+	 * 閫氳繃id閫氳繃璁惧閲囪喘璁″垝
+	 * @param id id
+	 * @return R
+	 */
+	@Operation(summary = "閫氳繃id閫氳繃璁惧閲囪喘璁″垝" , description = "閫氳繃id閫氳繃璁惧閲囪喘璁″垝" )
+	@GetMapping("/approved/{id}" )
+	@PreAuthorize("@pms.hasPermission('device_devicePurchasePlan_approved')" )
+	public R approved(@PathVariable("id" ) Long id) {
+		return R.ok(devicePurchasePlanService.approved(id));
+	}
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanItemMapper.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanItemMapper.java
new file mode 100644
index 0000000..73f2ba8
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanItemMapper.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.DevicePurchasePlanItem;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DevicePurchasePlanItemMapper extends PlatformxBaseMapper<DevicePurchasePlanItem> {
+
+
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanMapper.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanMapper.java
new file mode 100644
index 0000000..8af023d
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanMapper.java
@@ -0,0 +1,16 @@
+package com.by4cloud.platformx.device.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import com.by4cloud.platformx.device.dto.DevicePurchasePlanQueryDTO;
+import com.by4cloud.platformx.device.entity.DevicePurchasePlan;
+import com.by4cloud.platformx.device.entity.vo.DevicePurchasePlanPageVo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DevicePurchasePlanMapper extends PlatformxBaseMapper<DevicePurchasePlan> {
+
+
+	IPage<DevicePurchasePlanPageVo> page(Page page, DevicePurchasePlanQueryDTO queryDTO);
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DevicePurchasePlanService.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DevicePurchasePlanService.java
new file mode 100644
index 0000000..2176343
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DevicePurchasePlanService.java
@@ -0,0 +1,20 @@
+package com.by4cloud.platformx.device.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.by4cloud.platformx.device.dto.DevicePurchasePlanQueryDTO;
+import com.by4cloud.platformx.device.entity.DevicePurchasePlan;
+
+public interface DevicePurchasePlanService extends IService<DevicePurchasePlan> {
+
+	boolean saveNew(DevicePurchasePlan devicePurchasePlan);
+
+	IPage pageNew(Page page, DevicePurchasePlanQueryDTO queryDTO);
+
+	boolean approved(Long id);
+
+	DevicePurchasePlan getByIdNew(Long id);
+
+	boolean updateByIdNew(DevicePurchasePlan devicePurchasePlan);
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DevicePurchasePlanServiceImpl.java b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DevicePurchasePlanServiceImpl.java
new file mode 100644
index 0000000..339476d
--- /dev/null
+++ b/platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DevicePurchasePlanServiceImpl.java
@@ -0,0 +1,91 @@
+package com.by4cloud.platformx.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.by4cloud.platformx.common.security.util.SecurityUtils;
+import com.by4cloud.platformx.device.constant.MaxSizeContant;
+import com.by4cloud.platformx.device.dto.DevicePurchasePlanQueryDTO;
+import com.by4cloud.platformx.device.entity.DevicePurchasePlan;
+import com.by4cloud.platformx.device.entity.DevicePurchasePlanItem;
+import com.by4cloud.platformx.device.mapper.DevicePurchasePlanItemMapper;
+import com.by4cloud.platformx.device.mapper.DevicePurchasePlanMapper;
+import com.by4cloud.platformx.device.service.DevicePurchasePlanService;
+import com.by4cloud.platformx.device.service.JcMaxSizeService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁惧閲囪喘璁″垝
+ *
+ * @author syt
+ * @date 2025-04-21 14:43:13
+ */
+@Service
+@AllArgsConstructor
+public class DevicePurchasePlanServiceImpl extends ServiceImpl<DevicePurchasePlanMapper, DevicePurchasePlan> implements DevicePurchasePlanService {
+
+	private final JcMaxSizeService maxSizeService;
+
+	private final DevicePurchasePlanItemMapper itemMapper;
+
+	@Override
+	public boolean saveNew(DevicePurchasePlan devicePurchasePlan) {
+		devicePurchasePlan.setPlanCode(maxSizeService.nextNo(MaxSizeContant.DEVICE_PURCHASE_CODE));
+		devicePurchasePlan.setReleaseCompId(SecurityUtils.getUser().getCompId());
+		devicePurchasePlan.setReleaseId(SecurityUtils.getUser().getId());
+		devicePurchasePlan.setReleaseTime(new Date());
+		devicePurchasePlan.setStatus(0);
+		baseMapper.insert(devicePurchasePlan);
+		if (devicePurchasePlan.getPlanItemList() != null&&devicePurchasePlan.getPlanItemList().size()>0) {
+			devicePurchasePlan.getPlanItemList().forEach(item->{
+				item.setPlanId(devicePurchasePlan.getId());
+				itemMapper.insert(item);
+			});
+		}
+		return true;
+	}
+
+	@Override
+	public IPage pageNew(Page page, DevicePurchasePlanQueryDTO queryDTO) {
+		return baseMapper.page(page,queryDTO);
+	}
+
+	@Override
+	public boolean approved(Long id) {
+		DevicePurchasePlan plan = baseMapper.selectById(id);
+		plan.setStatus(1);
+		baseMapper.updateById(plan);
+		return true;
+	}
+
+	@Override
+	public DevicePurchasePlan getByIdNew(Long id) {
+		DevicePurchasePlan plan = baseMapper.selectById(id);
+		QueryWrapper<DevicePurchasePlanItem> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("plan_id",id);
+		List<DevicePurchasePlanItem> planItemList = itemMapper.selectList(queryWrapper);
+		plan.setPlanItemList(planItemList);
+		return plan;
+	}
+
+	@Override
+	public boolean updateByIdNew(DevicePurchasePlan devicePurchasePlan) {
+		baseMapper.updateById(devicePurchasePlan);
+		if (devicePurchasePlan.getPlanItemList() != null&&devicePurchasePlan.getPlanItemList().size()>0) {
+			devicePurchasePlan.getPlanItemList().forEach(item->{
+				item.setPlanId(devicePurchasePlan.getId());
+				if (item.getId()==null) {
+					itemMapper.insert(item);
+				}else {
+					itemMapper.updateById(item);
+				}
+			});
+		}
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanItemMapper.xml b/platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanItemMapper.xml
new file mode 100644
index 0000000..dd688f1
--- /dev/null
+++ b/platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanItemMapper.xml
@@ -0,0 +1,23 @@
+<?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.DevicePurchasePlanItemMapper">
+
+  <resultMap id="devicePurchasePlanItemMap" type="com.by4cloud.platformx.device.entity.DevicePurchasePlanItem">
+        <id property="id" column="id"/>
+        <result property="compId" column="comp_id"/>
+        <result property="deviceCode" column="device_code"/>
+        <result property="deviceId" column="device_id"/>
+        <result property="deviceModels" column="device_models"/>
+        <result property="deviceName" column="device_name"/>
+        <result property="keyParameter" column="key_parameter"/>
+        <result property="meteringUnit" column="metering_unit"/>
+        <result property="num" column="num"/>
+        <result property="planId" column="plan_id"/>
+        <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/DevicePurchasePlanMapper.xml b/platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanMapper.xml
new file mode 100644
index 0000000..db99b03
--- /dev/null
+++ b/platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanMapper.xml
@@ -0,0 +1,48 @@
+<?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.DevicePurchasePlanMapper">
+
+  <resultMap id="devicePurchasePlanMap" type="com.by4cloud.platformx.device.entity.DevicePurchasePlan">
+        <id property="id" column="id"/>
+        <result property="compId" column="comp_id"/>
+        <result property="planCode" column="plan_code"/>
+        <result property="planName" column="plan_name"/>
+        <result property="releaseCompId" column="release_comp_id"/>
+        <result property="releaseId" column="release_id"/>
+        <result property="status" column="status"/>
+        <result property="releaseTime" column="release_time"/>
+        <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>
+	<select id="page" resultType="com.by4cloud.platformx.device.entity.vo.DevicePurchasePlanPageVo">
+		select
+			dpp.id,
+			dpp.plan_code,
+			dpp.plan_name,
+			dpp.release_comp_id,
+			dpp.release_id,
+			dpp.status,
+			dpp.release_time,
+			su.name userName,
+			sd.name deptName
+		from
+			platformxx_device.device_purchase_plan dpp
+		join platformxx_boot.sys_user su on
+		su.user_id = dpp.release_id
+		join platformxx_boot.sys_dept sd on
+		sd.dept_id = dpp.release_comp_id
+		where
+			dpp.del_flag = '0'
+		<if test="queryDTO.planName != null and queryDTO.planName!=''">
+			and dpp.plan_name like CONCAT('%', #{queryDTO.planName}, '%')
+		</if>
+		<if test="queryDTO.planCode != null and queryDTO.planCode!=''">
+			and dpp.plan_code like CONCAT('%', #{queryDTO.planCode}, '%')
+		</if>
+		order by dpp.create_time desc
+	</select>
+</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 e509be6..8c9400d 100644
--- a/platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml
+++ b/platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml
@@ -24,7 +24,8 @@
 			sd.name rentName,
 			di.device_number,
 			di.serial_no,
-			dll.delivery_date
+			dll.delivery_date,
+		    di.file_path
 		from
 			device_inventory di
 				join device_leasing_ledger_item dlli on

--
Gitblit v1.9.1