platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceStocktakingPlan.java
New file @@ -0,0 +1,53 @@ 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 javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Transient; import java.util.Date; import java.util.List; @Data @Entity @TableName("device_stocktaking_plan") @javax.persistence.Table(name = "device_stocktaking_plan") @Table(appliesTo = "device_stocktaking_plan", comment = "设备盘点计划") public class DeviceStocktakingPlan extends BaseModel<DeviceStocktakingPlan> { @Schema(description = "计划名称") @Column(columnDefinition="VARCHAR(128) comment '计划名称'") private String planName; @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "盘点周期开始") @Column(columnDefinition="VARCHAR(128) comment '盘点周期开始'") private Date startDate; @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "盘点周期结束") @Column(columnDefinition="VARCHAR(128) comment '盘点周期结束'") private Date endDate; @Schema(description = "盘点计划状态") @Column(columnDefinition="int comment '盘点计划状态 0 待审批 1 待生成盘点单 2 盘点中 3 完成'") private Integer planStatus; @Transient @TableField(exist = false) private List<Long> classIdList; @Transient @TableField(exist = false) private List<Long> userIdList; @Transient @TableField(exist = false) private String resultFlag; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceStocktakingPlanScope.java
New file @@ -0,0 +1,29 @@ 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 javax.persistence.Column; import javax.persistence.Entity; import java.util.Date; @Data @Entity @TableName("device_stocktaking_plan_scope") @javax.persistence.Table(name = "device_stocktaking_plan_scope") @Table(appliesTo = "device_stocktaking_plan_scope", comment = "设备盘点计划范围") public class DeviceStocktakingPlanScope extends BaseModel<DeviceStocktakingPlanScope> { @Schema(description = "关联盘点计划") @Column(columnDefinition="bigint comment '关联盘点计划'") private Long planId; @Schema(description = "盘点设备分类ID") @Column(columnDefinition="bigint comment '盘点设备分类ID'") private Long classId; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceStocktakingPlanUser.java
New file @@ -0,0 +1,27 @@ 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; @Data @Entity @TableName("device_stocktaking_plan_user") @javax.persistence.Table(name = "device_stocktaking_plan_user") @Table(appliesTo = "device_stocktaking_plan_user", comment = "设备盘点计划人员") public class DeviceStocktakingPlanUser extends BaseModel<DeviceStocktakingPlanUser> { @Schema(description = "关联盘点计划") @Column(columnDefinition="bigint comment '关联盘点计划'") private Long planId; @Schema(description = "盘点人员") @Column(columnDefinition="bigint comment '盘点人员'") private Long stocktakingUserId; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/DeviceStocktakingRecord.java
New file @@ -0,0 +1,91 @@ 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 javax.persistence.Column; import javax.persistence.Entity; import java.util.Date; @Data @Entity @TableName("device_stocktaking_record") @javax.persistence.Table(name = "device_stocktaking_record") @Table(appliesTo = "device_stocktaking_record", comment = "设备盘点记录") public class DeviceStocktakingRecord extends BaseModel<DeviceStocktakingRecord> { @Schema(description = "关联盘点计划") @Column(columnDefinition="bigint comment '关联盘点计划'") private Long planId; @Schema(description = "盘点设备分类ID") @Column(columnDefinition="bigint comment '盘点设备分类ID'") private Long classId; /** * 设备ID */ @Schema(description="设备ID") @Column(columnDefinition="bigint comment '设备ID'") private Long deviceId; /** * 设备ID */ @Schema(description="设备分类ID") @Column(columnDefinition="bigint comment '设备分类ID'") private Long deviceClassId; /** * 设备编码 */ @Schema(description="设备编码") @Column(columnDefinition="VARCHAR(64) 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 serialNo; @Schema(description = "异常标记") @Column(columnDefinition="int comment '异常标记 0 无 1 盘盈 2 盘亏 3 位置偏移'") private Integer abnormalMarking; @Schema(description = "存放位置") @Column(columnDefinition="VARCHAR(256) comment '存放位置'") private String position; @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "盘点时间") @Column(columnDefinition="datetime comment '盘点时间'") private Date recordTime; @Schema(description = "盘点人员") @Column(columnDefinition="bigint comment '盘点人员'") private Long stocktakingUserId; @Schema(description = "过程照片") @Column(columnDefinition="VARCHAR(256) comment '过程照片'") private String recordPic; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/DeviceClassVo.java
New file @@ -0,0 +1,20 @@ package com.by4cloud.platformx.device.entity.vo; import lombok.Data; @Data public class DeviceClassVo { private Long classId; private Long deviceId; private String number; private String name; private String specification; private String serialNo; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/DeviceStocktakingPlanVo.java
New file @@ -0,0 +1,36 @@ package com.by4cloud.platformx.device.entity.vo; import com.by4cloud.platformx.device.entity.DeviceStocktakingRecord; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.Date; import java.util.List; @Data public class DeviceStocktakingPlanVo { private Long id; @Schema(description = "计划名称") private String planName; @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "盘点周期开始") private Date startDate; @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "盘点周期结束") private Date endDate; private Integer planStatus; private String scopes; private List<Long> userIds; private String users; private List<DeviceStocktakingRecord> recordList; } platformx-device-api/src/main/java/com/by4cloud/platformx/device/entity/vo/StocktatingRecordVo.java
New file @@ -0,0 +1,19 @@ package com.by4cloud.platformx.device.entity.vo; import lombok.Data; @Data public class StocktatingRecordVo { private String number; private String className; private String specification; private String deviceName; private Integer zmNum; private Integer pdNum; } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DevicePurchasePlanController.java
@@ -46,7 +46,7 @@ /** * 分页查询 * @param page 分页对象 * @param devicePurchasePlan 设备采购计划 * @param queryDTO 设备采购计划 * @return */ @Operation(summary = "分页查询" , description = "分页查询" ) @@ -109,6 +109,18 @@ return R.ok(devicePurchasePlanService.removeBatchByIds(CollUtil.toList(ids))); } /** * 通过id删除设备采购计划明细 * @param id * @return R */ @Operation(summary = "通过id删除设备采购计划明细" , description = "通过id删除设备采购计划明细" ) @SysLog("通过id删除设备采购计划明细" ) @DeleteMapping("/removeItemById/{id}") public R removeItemById(@PathVariable("id") Long id) { return devicePurchasePlanService.removeItemById(id); } /** * 导出excel 表格 platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceStocktakingPlanController.java
New file @@ -0,0 +1,171 @@ 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.device.entity.DeviceStocktakingPlan; import com.by4cloud.platformx.device.service.DeviceStocktakingPlanService; 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-04-24 15:19:13 */ @RestController @RequiredArgsConstructor @RequestMapping("/deviceStocktakingPlan" ) @Tag(description = "deviceStocktakingPlan" , name = "设备盘点计划管理" ) @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class DeviceStocktakingPlanController { private final DeviceStocktakingPlanService deviceStocktakingPlanService; /** * 分页查询 * @param page 分页对象 * @param deviceStocktakingPlan 设备盘点计划 * @return */ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/page" ) @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_view')" ) public R getDeviceStocktakingPlanPage(@ParameterObject Page page, @ParameterObject DeviceStocktakingPlan deviceStocktakingPlan) { LambdaQueryWrapper<DeviceStocktakingPlan> wrapper = Wrappers.lambdaQuery(); wrapper.eq(StrUtil.isNotBlank(deviceStocktakingPlan.getPlanName()), DeviceStocktakingPlan::getPlanName,deviceStocktakingPlan.getPlanName()); wrapper.eq(Objects.nonNull(deviceStocktakingPlan.getPlanStatus()),DeviceStocktakingPlan::getPlanStatus,deviceStocktakingPlan.getPlanStatus()); wrapper.eq(StrUtil.isNotBlank(deviceStocktakingPlan.getResultFlag())&&"1".equals(deviceStocktakingPlan.getResultFlag()),DeviceStocktakingPlan::getPlanStatus,2) .or().eq(StrUtil.isNotBlank(deviceStocktakingPlan.getResultFlag())&&"1".equals(deviceStocktakingPlan.getResultFlag()),DeviceStocktakingPlan::getPlanStatus,3); wrapper.orderByDesc(DeviceStocktakingPlan::getCreateTime); return R.ok(deviceStocktakingPlanService.page(page, wrapper)); } /** * 通过id查询设备盘点计划 * @param id id * @return R */ @Operation(summary = "通过id查询" , description = "通过id查询" ) @GetMapping("/{id}" ) @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_view')" ) public R getById(@PathVariable("id" ) Long id) { return deviceStocktakingPlanService.getByIdNew(id); } /** * 新增设备盘点计划 * @param deviceStocktakingPlan 设备盘点计划 * @return R */ @Operation(summary = "新增设备盘点计划" , description = "新增设备盘点计划" ) @SysLog("新增设备盘点计划" ) @PostMapping @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_add')" ) public R save(@RequestBody DeviceStocktakingPlan deviceStocktakingPlan) { return deviceStocktakingPlanService.saveNew(deviceStocktakingPlan); } /** * 修改设备盘点计划 * @param deviceStocktakingPlan 设备盘点计划 * @return R */ @Operation(summary = "修改设备盘点计划" , description = "修改设备盘点计划" ) @SysLog("修改设备盘点计划" ) @PutMapping @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_edit')" ) public R updateById(@RequestBody DeviceStocktakingPlan deviceStocktakingPlan) { return deviceStocktakingPlanService.updateByIdNew(deviceStocktakingPlan); } /** * 通过id删除设备盘点计划 * @param ids id列表 * @return R */ @Operation(summary = "通过id删除设备盘点计划" , description = "通过id删除设备盘点计划" ) @SysLog("通过id删除设备盘点计划" ) @DeleteMapping @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_del')" ) public R removeById(@RequestBody Long[] ids) { return R.ok(deviceStocktakingPlanService.removeBatchByIds(CollUtil.toList(ids))); } /** * 导出excel 表格 * @param deviceStocktakingPlan 查询条件 * @param ids 导出指定ID * @return excel 文件流 */ @ResponseExcel @GetMapping("/export") @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_export')" ) public List<DeviceStocktakingPlan> export(DeviceStocktakingPlan deviceStocktakingPlan,Long[] ids) { return deviceStocktakingPlanService.list(Wrappers.lambdaQuery(deviceStocktakingPlan).in(ArrayUtil.isNotEmpty(ids), DeviceStocktakingPlan::getId, ids)); } /** * 通过id审核通过设备盘点计划 * @param id id * @return R */ @Operation(summary = "通过id审核通过设备盘点计划" , description = "通过id审核通过设备盘点计划" ) @GetMapping("/approved/{id}" ) @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_approved')" ) public R approved(@PathVariable("id" ) Long id) { return deviceStocktakingPlanService.approved(id); } /** * 通过盘点计划id生成盘点单 * @param id id * @return R */ @Operation(summary = "通过盘点计划id生成盘点单" , description = "通过盘点计划id生成盘点单" ) @GetMapping("/genRecord/{id}" ) @PreAuthorize("@pms.hasPermission('device_deviceStocktakingPlan_genrecord')" ) public R genRecord(@PathVariable("id" ) Long id) { return deviceStocktakingPlanService.genRecord(id); } /** * 通过盘点计划id获取盘点结果 * @param id id * @return R */ @Operation(summary = "通过盘点计划id获取盘点结果" , description = "通过盘点计划id获取盘点结果" ) @GetMapping("/getResult/{id}" ) public R getResult(@PathVariable("id" ) Long id) { return deviceStocktakingPlanService.getResult(id); } /** * 通过盘点计划id完成盘点结果 * @param id id * @return R */ @Operation(summary = "通过盘点计划id完成盘点结果" , description = "通过盘点计划id完成盘点结果" ) @GetMapping("/complete/{id}" ) public R complete(@PathVariable("id" ) Long id) { return deviceStocktakingPlanService.complete(id); } } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/controller/DeviceStocktakingRecordController.java
New file @@ -0,0 +1,119 @@ 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.DeviceStocktakingRecord; import com.by4cloud.platformx.device.service.DeviceStocktakingRecordService; 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-04-24 15:21:08 */ @RestController @RequiredArgsConstructor @RequestMapping("/deviceStocktakingRecord" ) @Tag(description = "deviceStocktakingRecord" , name = "设备盘点记录管理" ) @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class DeviceStocktakingRecordController { private final DeviceStocktakingRecordService deviceStocktakingRecordService; /** * 分页查询 * @param page 分页对象 * @param deviceStocktakingRecord 设备盘点记录 * @return */ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/page" ) @PreAuthorize("@pms.hasPermission('device_deviceStocktakingRecord_view')" ) public R getDeviceStocktakingRecordPage(@ParameterObject Page page, @ParameterObject DeviceStocktakingRecord deviceStocktakingRecord) { LambdaQueryWrapper<DeviceStocktakingRecord> wrapper = Wrappers.lambdaQuery(); return R.ok(deviceStocktakingRecordService.page(page, wrapper)); } /** * 通过id查询设备盘点记录 * @param id id * @return R */ @Operation(summary = "通过id查询" , description = "通过id查询" ) @GetMapping("/{id}" ) @PreAuthorize("@pms.hasPermission('device_deviceStocktakingRecord_view')" ) public R getById(@PathVariable("id" ) Long id) { return R.ok(deviceStocktakingRecordService.getById(id)); } /** * 新增设备盘点记录 * @param deviceStocktakingRecord 设备盘点记录 * @return R */ @Operation(summary = "新增设备盘点记录" , description = "新增设备盘点记录" ) @SysLog("新增设备盘点记录" ) @PostMapping @PreAuthorize("@pms.hasPermission('device_deviceStocktakingRecord_add')" ) public R save(@RequestBody DeviceStocktakingRecord deviceStocktakingRecord) { return R.ok(deviceStocktakingRecordService.save(deviceStocktakingRecord)); } /** * 修改设备盘点记录 * @param deviceStocktakingRecord 设备盘点记录 * @return R */ @Operation(summary = "修改设备盘点记录" , description = "修改设备盘点记录" ) @SysLog("修改设备盘点记录" ) @PutMapping @PreAuthorize("@pms.hasPermission('device_deviceStocktakingRecord_edit')" ) public R updateById(@RequestBody DeviceStocktakingRecord deviceStocktakingRecord) { return R.ok(deviceStocktakingRecordService.updateById(deviceStocktakingRecord)); } /** * 通过id删除设备盘点记录 * @param ids id列表 * @return R */ @Operation(summary = "通过id删除设备盘点记录" , description = "通过id删除设备盘点记录" ) @SysLog("通过id删除设备盘点记录" ) @DeleteMapping @PreAuthorize("@pms.hasPermission('device_deviceStocktakingRecord_del')" ) public R removeById(@RequestBody Long[] ids) { return R.ok(deviceStocktakingRecordService.removeBatchByIds(CollUtil.toList(ids))); } /** * 导出excel 表格 * @param deviceStocktakingRecord 查询条件 * @param ids 导出指定ID * @return excel 文件流 */ @ResponseExcel @GetMapping("/export") @PreAuthorize("@pms.hasPermission('device_deviceStocktakingRecord_export')" ) public List<DeviceStocktakingRecord> export(DeviceStocktakingRecord deviceStocktakingRecord,Long[] ids) { return deviceStocktakingRecordService.list(Wrappers.lambdaQuery(deviceStocktakingRecord).in(ArrayUtil.isNotEmpty(ids), DeviceStocktakingRecord::getId, ids)); } } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceClassMapper.java
@@ -3,9 +3,13 @@ import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import com.by4cloud.platformx.device.entity.DeviceClass; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface DeviceClassMapper extends PlatformxBaseMapper<DeviceClass> { List<Long> selectEndNode(@Param("classId") Long classId); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceInventoryMapper.java
@@ -2,13 +2,18 @@ import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import com.by4cloud.platformx.device.entity.DeviceInventory; import com.by4cloud.platformx.device.entity.vo.DeviceClassVo; import com.by4cloud.platformx.device.entity.vo.InventoryDetailVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface DeviceInventoryMapper extends PlatformxBaseMapper<DeviceInventory> { InventoryDetailVo getReleaseDetail(@Param("id") Long id); List<DeviceClassVo> selectListByClassId(@Param("classId") Long classId); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceStocktakingPlanMapper.java
New file @@ -0,0 +1,14 @@ package com.by4cloud.platformx.device.mapper; import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import com.by4cloud.platformx.device.entity.DeviceStocktakingPlan; import com.by4cloud.platformx.device.entity.vo.DeviceStocktakingPlanVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface DeviceStocktakingPlanMapper extends PlatformxBaseMapper<DeviceStocktakingPlan> { DeviceStocktakingPlanVo selectVoById(@Param("id") Long id); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceStocktakingPlanScopeMapper.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.DeviceStocktakingPlanScope; import org.apache.ibatis.annotations.Mapper; @Mapper public interface DeviceStocktakingPlanScopeMapper extends PlatformxBaseMapper<DeviceStocktakingPlanScope> { } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceStocktakingPlanUserMapper.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.DeviceStocktakingPlanUser; import org.apache.ibatis.annotations.Mapper; @Mapper public interface DeviceStocktakingPlanUserMapper extends PlatformxBaseMapper<DeviceStocktakingPlanUser> { } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/mapper/DeviceStocktakingRecordMapper.java
New file @@ -0,0 +1,16 @@ package com.by4cloud.platformx.device.mapper; import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import com.by4cloud.platformx.device.entity.DeviceStocktakingRecord; import com.by4cloud.platformx.device.entity.vo.StocktatingRecordVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface DeviceStocktakingRecordMapper extends PlatformxBaseMapper<DeviceStocktakingRecord> { List<StocktatingRecordVo> selectStocktatingResultByPlanId(@Param("id") Long id); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DevicePurchasePlanService.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.IService; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.device.dto.DevicePurchasePlanQueryDTO; import com.by4cloud.platformx.device.entity.DevicePurchasePlan; @@ -17,4 +18,6 @@ DevicePurchasePlan getByIdNew(Long id); boolean updateByIdNew(DevicePurchasePlan devicePurchasePlan); R removeItemById(Long id); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceStocktakingPlanService.java
New file @@ -0,0 +1,22 @@ 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.DeviceStocktakingPlan; public interface DeviceStocktakingPlanService extends IService<DeviceStocktakingPlan> { R saveNew(DeviceStocktakingPlan deviceStocktakingPlan); R approved(Long id); R genRecord(Long id); R getResult(Long id); R getByIdNew(Long id); R complete(Long id); R updateByIdNew(DeviceStocktakingPlan deviceStocktakingPlan); } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/DeviceStocktakingRecordService.java
New file @@ -0,0 +1,8 @@ package com.by4cloud.platformx.device.service; import com.baomidou.mybatisplus.extension.service.IService; import com.by4cloud.platformx.device.entity.DeviceStocktakingRecord; public interface DeviceStocktakingRecordService extends IService<DeviceStocktakingRecord> { } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DevicePurchasePlanServiceImpl.java
@@ -4,6 +4,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.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.security.util.SecurityUtils; import com.by4cloud.platformx.device.constant.CommonStatusContant; import com.by4cloud.platformx.device.constant.MaxSizeContant; @@ -89,4 +90,10 @@ } return true; } @Override public R removeItemById(Long id) { itemMapper.deleteById(id); return R.ok(); } } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceStocktakingPlanServiceImpl.java
New file @@ -0,0 +1,179 @@ package com.by4cloud.platformx.device.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.device.constant.CommonStatusContant; import com.by4cloud.platformx.device.entity.*; import com.by4cloud.platformx.device.entity.vo.DeviceClassVo; import com.by4cloud.platformx.device.entity.vo.DeviceStocktakingPlanVo; import com.by4cloud.platformx.device.entity.vo.StocktatingRecordVo; import com.by4cloud.platformx.device.mapper.*; import com.by4cloud.platformx.device.service.DeviceStocktakingPlanService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /** * 设备盘点计划 * * @author syt * @date 2025-04-24 15:19:13 */ @Service @AllArgsConstructor public class DeviceStocktakingPlanServiceImpl extends ServiceImpl<DeviceStocktakingPlanMapper, DeviceStocktakingPlan> implements DeviceStocktakingPlanService { private final DeviceStocktakingPlanScopeMapper scopeMapper; private final DeviceStocktakingPlanUserMapper userMapper; private final DeviceInventoryMapper inventoryMapper; private final DeviceStocktakingRecordMapper recordMapper; @Override public R saveNew(DeviceStocktakingPlan deviceStocktakingPlan) { deviceStocktakingPlan.setPlanStatus(CommonStatusContant.DEVICE_STOCKTAKING_STATUS_APPROVED); baseMapper.insert(deviceStocktakingPlan); //新增盘点人员 if (deviceStocktakingPlan.getUserIdList().size()>0){ deviceStocktakingPlan.getUserIdList().stream().forEach(userId->{ DeviceStocktakingPlanUser planUser = new DeviceStocktakingPlanUser(); planUser.setPlanId(deviceStocktakingPlan.getId()); planUser.setStocktakingUserId(userId); userMapper.insert(planUser); }); } //新增判断范围 if (deviceStocktakingPlan.getClassIdList().size()>0){ // List<Long> classArr = new ArrayList<>(); // for (Long classId:deviceStocktakingPlan.getClassIdList() // ) { // List<Long> classes = classMapper.selectEndNode(classId); // //根据分类iD 查询出所有末端分类ID并去重 // classArr = ListUtils.union(classArr,classes).stream().distinct().collect(Collectors.toList()); // } // if (classArr.size()>0){ // classArr.stream().forEach(classId->{ // DeviceStocktakingPlanScope planScope = new DeviceStocktakingPlanScope(); // planScope.setPlanId(deviceStocktakingPlan.getId()); // planScope.setClassId(classId); // scopeMapper.insert(planScope); // }); // } deviceStocktakingPlan.getClassIdList().stream().forEach(classId->{ DeviceStocktakingPlanScope planScope = new DeviceStocktakingPlanScope(); planScope.setPlanId(deviceStocktakingPlan.getId()); planScope.setClassId(classId); scopeMapper.insert(planScope); }); } return R.ok(); } @Override public R approved(Long id) { DeviceStocktakingPlan plan = baseMapper.selectById(id); plan.setPlanStatus(CommonStatusContant.DEVICE_STOCKTAKING_STATUS_GEN); baseMapper.updateById(plan); return R.ok(); } @Override public R genRecord(Long id) { QueryWrapper<DeviceStocktakingPlanScope> queryMapper = new QueryWrapper<>(); queryMapper.eq("plan_id",id); List<DeviceStocktakingPlanScope> scopeList = scopeMapper.selectList(queryMapper); if (scopeList.size()>0){ scopeList.stream().forEach(scopeItem->{ List<DeviceClassVo> deviceClassVos = inventoryMapper.selectListByClassId(scopeItem.getClassId()); if (deviceClassVos.size()>0) { deviceClassVos.stream().forEach(vo->{ DeviceStocktakingRecord record = new DeviceStocktakingRecord(); record.setPlanId(id); record.setClassId(vo.getClassId()); record.setDeviceClassId(vo.getClassId()); record.setDeviceId(vo.getDeviceId()); record.setDeviceName(vo.getName()); record.setDeviceCode(vo.getNumber()); record.setDeviceModels(vo.getSpecification()); record.setSerialNo(vo.getSerialNo()); recordMapper.insert(record); }); } }); } //更新计划状态 DeviceStocktakingPlan plan = baseMapper.selectById(id); plan.setPlanStatus(CommonStatusContant.DEVICE_STOCKTAKING_STATUS_STOCKTATING); baseMapper.updateById(plan); return R.ok(); } @Override public R getResult(Long id) { List<StocktatingRecordVo> recordVoList = recordMapper.selectStocktatingResultByPlanId(id); return R.ok(recordVoList); } @Override public R getByIdNew(Long id) { DeviceStocktakingPlanVo vo = baseMapper.selectVoById(id); if (vo!=null){ QueryWrapper<DeviceStocktakingRecord> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("plan_id",id); List<DeviceStocktakingRecord> recordList = recordMapper.selectList(queryWrapper); vo.setRecordList(recordList); QueryWrapper<DeviceStocktakingPlanUser> userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.eq("plan_id",id); List<DeviceStocktakingPlanUser> userList = userMapper.selectList(userQueryWrapper); if (userList.size()>0) { List<Long> userIds = userList.stream().map(DeviceStocktakingPlanUser::getStocktakingUserId).collect(Collectors.toList()); vo.setUserIds(userIds); } } return R.ok(vo); } @Override public R complete(Long id) { DeviceStocktakingPlan plan = baseMapper.selectById(id); plan.setPlanStatus(CommonStatusContant.DEVICE_STOCKTAKING_STATUS_COMPLETE); baseMapper.updateById(plan); return R.ok(); } @Override public R updateByIdNew(DeviceStocktakingPlan deviceStocktakingPlan) { baseMapper.updateById(deviceStocktakingPlan); //新增盘点人员 if (deviceStocktakingPlan.getUserIdList().size()>0){ QueryWrapper<DeviceStocktakingPlanUser> userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.eq("plan_id",deviceStocktakingPlan.getId()); userMapper.delete(userQueryWrapper); deviceStocktakingPlan.getUserIdList().stream().forEach(userId->{ DeviceStocktakingPlanUser planUser = new DeviceStocktakingPlanUser(); planUser.setPlanId(deviceStocktakingPlan.getId()); planUser.setStocktakingUserId(userId); userMapper.insert(planUser); }); } //新增判断范围 if (deviceStocktakingPlan.getClassIdList().size()>0){ QueryWrapper<DeviceStocktakingPlanScope> scopeQueryWrapper = new QueryWrapper<>(); scopeQueryWrapper.eq("plan_id",deviceStocktakingPlan.getId()); scopeMapper.delete(scopeQueryWrapper); deviceStocktakingPlan.getClassIdList().stream().forEach(classId->{ DeviceStocktakingPlanScope planScope = new DeviceStocktakingPlanScope(); planScope.setPlanId(deviceStocktakingPlan.getId()); planScope.setClassId(classId); scopeMapper.insert(planScope); }); } return R.ok(); } } platformx-device-biz/src/main/java/com/by4cloud/platformx/device/service/impl/DeviceStocktakingRecordServiceImpl.java
New file @@ -0,0 +1,16 @@ package com.by4cloud.platformx.device.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.device.entity.DeviceStocktakingRecord; import com.by4cloud.platformx.device.mapper.DeviceStocktakingRecordMapper; import com.by4cloud.platformx.device.service.DeviceStocktakingRecordService; import org.springframework.stereotype.Service; /** * 设备盘点记录 * * @author syt * @date 2025-04-24 15:21:08 */ @Service public class DeviceStocktakingRecordServiceImpl extends ServiceImpl<DeviceStocktakingRecordMapper, DeviceStocktakingRecord> implements DeviceStocktakingRecordService { } platformx-device-biz/src/main/resources/mapper/DeviceClassMapper.xml
@@ -18,4 +18,23 @@ <result property="updateTime" column="update_time"/> <result property="delFlag" column="del_flag"/> </resultMap> <select id="selectEndNode" resultType="java.lang.Long"> SELECT parent.id FROM ( SELECT t1.* FROM device_class t1 WHERE FIND_IN_SET(t1.id, ( SELECT GROUP_CONCAT(id) FROM ( SELECT id, IF(FIND_IN_SET(p_id, @pids) > 0, @pids := CONCAT(@pids, ',', id), 0) AS is_child FROM device_class, (SELECT @pids := #{classId}) tmp ORDER BY p_id ) t WHERE is_child != 0 )) OR t1.id = #{classId} ) parent LEFT JOIN device_class child ON parent.id = child.p_id WHERE child.id IS NULL; -- 验证是否为末端节点 </select> </mapper> platformx-device-biz/src/main/resources/mapper/DeviceStocktakingPlanMapper.xml
New file @@ -0,0 +1,60 @@ <?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.DeviceStocktakingPlanMapper"> <resultMap id="deviceStocktakingPlanMap" type="com.by4cloud.platformx.device.entity.DeviceStocktakingPlan"> <id property="id" column="id"/> <result property="compId" column="comp_id"/> <result property="endDate" column="end_date"/> <result property="planName" column="plan_name"/> <result property="planStatus" column="plan_status"/> <result property="startDate" column="start_date"/> <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="selectVoById" resultType="com.by4cloud.platformx.device.entity.vo.DeviceStocktakingPlanVo"> select dsp.id, dsp.plan_name, dsp.start_date, dsp.end_date, dsp.plan_status, ( select GROUP_CONCAT(name) from platformxx_boot.sys_user su where exists ( select * from device_stocktaking_plan_user dspu where dspu.stocktaking_user_id = su.user_id and dspu.plan_id = dsp.id)) users, ( select GROUP_CONCAT(name) from device_class dc where exists ( select * from device_stocktaking_plan_scope dsps where dsps.class_id = dc.id and dsps.plan_id = dsp.id)) scopes from device_stocktaking_plan dsp where dsp.id = #{id} </select> </mapper> platformx-device-biz/src/main/resources/mapper/DeviceStocktakingPlanScopeMapper.xml
New file @@ -0,0 +1,17 @@ <?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.DeviceStocktakingPlanScopeMapper"> <resultMap id="deviceStocktakingPlanScopeMap" type="com.by4cloud.platformx.device.entity.DeviceStocktakingPlanScope"> <id property="id" column="id"/> <result property="compId" column="comp_id"/> <result property="classId" column="class_id"/> <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/DeviceStocktakingPlanUserMapper.xml
New file @@ -0,0 +1,17 @@ <?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.DeviceStocktakingPlanUserMapper"> <resultMap id="deviceStocktakingPlanUserMap" type="com.by4cloud.platformx.device.entity.DeviceStocktakingPlanUser"> <id property="id" column="id"/> <result property="compId" column="comp_id"/> <result property="planId" column="plan_id"/> <result property="stocktakingUserId" column="stocktaking_user_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/DeviceStocktakingRecordMapper.xml
New file @@ -0,0 +1,69 @@ <?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.DeviceStocktakingRecordMapper"> <resultMap id="deviceStocktakingRecordMap" type="com.by4cloud.platformx.device.entity.DeviceStocktakingRecord"> <id property="id" column="id"/> <result property="compId" column="comp_id"/> <result property="classId" column="class_id"/> <result property="deviceClassId" column="device_class_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="planId" column="plan_id"/> <result property="position" column="position"/> <result property="recordPic" column="record_pic"/> <result property="recordTime" column="record_time"/> <result property="serialNo" column="serial_no"/> <result property="stocktakingUserId" column="stocktaking_user_id"/> <result property="abnormalMarking" column="abnormal_marking"/> <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="selectStocktatingResultByPlanId" resultType="com.by4cloud.platformx.device.entity.vo.StocktatingRecordVo"> select d.class_id , dc.name className, d.number , d.name deviceName, d.specification, count(serial_no) zmNum, ( select count(1) from device_stocktaking_record dsr where dsr.class_id = d.class_id and dsr.abnormal_marking = 0) pdNum from device_inventory di join device d on d.id = di.device_id join device_class dc on d.class_id = dc.id where di.del_flag = '0' and exists ( select * from device_stocktaking_plan_scope dsps where dsps.class_id = d.class_id and dsps.plan_id = #{id} ) group by d.class_id , dc.name , d.number , d.name, d.specification </select> </mapper> platformx-device-biz/src/main/resources/mapper/deviceInventoryMapper.xml
@@ -39,4 +39,20 @@ where di.id =#{id} </select> <select id="selectListByClassId" resultType="com.by4cloud.platformx.device.entity.vo.DeviceClassVo"> select di.device_id , d.class_id , d.number , d.name, d.specification, di.serial_no from device_inventory di join device d on d.id = di.device_id where di.del_flag = '0' and d.class_id = #{classId} </select> </mapper>