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"; platformx-device-api/src/main/java/com/by4cloud/platformx/device/dto/DevicePurchasePlanQueryDTO.java
New file @@ -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; } 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; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlan.java
New file @@ -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; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DevicePurchasePlanItem.java
New file @@ -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; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/DevicePurchasePlanPageVo.java
New file @@ -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; } 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; } 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)); } } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DevicePurchasePlanController.java
New file @@ -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)); } } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanItemMapper.java
New file @@ -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> { } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DevicePurchasePlanMapper.java
New file @@ -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); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DevicePurchasePlanService.java
New file @@ -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); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DevicePurchasePlanServiceImpl.java
New file @@ -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; } } platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanItemMapper.xml
New file @@ -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> platformx-device-biz/src/main/resources/mapper/DevicePurchasePlanMapper.xml
New file @@ -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> 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