From 2111c8b3adb957aa58fd27e577996394570183da Mon Sep 17 00:00:00 2001 From: FCL Date: Thu, 29 Jan 2026 15:25:45 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=B1=BB=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/DeviceApplyController.java | 16 +++++- .../admin/DeviceApplyDetailController.java | 12 +++- .../admin/DeviceConfigFlowController.java | 12 ++-- .../vo/DeviceApplyDetailPageReqVO.java | 3 + .../dal/mapper/DeviceApplyDetailMapper.java | 16 ++++++ .../service/DeviceApplyDetailService.java | 4 ++ .../service/DeviceApplyDetailServiceImpl.java | 12 ++++ .../device/service/DeviceApplyService.java | 7 +++ .../service/DeviceApplyServiceImpl.java | 55 +++++++++++++++++++ .../service/DeviceInfomationService.java | 7 +-- .../service/DeviceInfomationServiceImpl.java | 17 +++++- 11 files changed, 143 insertions(+), 18 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java index 5da1ac5..d89d476 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.device.controller.admin; +import com.alibaba.fastjson.JSONObject; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyPageReqVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyRespVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplySaveReqVO; @@ -66,6 +67,19 @@ public class DeviceApplyController extends AbstractFileUploadController implemen return deviceApplyService.saveDeviceApply(createReqVO); } + @RequestMapping("/addDetail") + @Operation(summary = "增加明细") + public CommonResult addDetail(@RequestBody JSONObject param) { + return deviceApplyService.addDetail(param); + } + + + @RequestMapping("/removeDetail") + @Operation(summary = "删除明细") + public CommonResult removeDetail(@RequestBody JSONObject param) { + return deviceApplyService.removeDetail(param); + } + @PutMapping("/update") @Operation(summary = "更新设备通用流程,验收、降级、停用、报废、还原、启用") // @PreAuthorize("@ss.hasPermission('qms:device-apply:update')") @@ -101,7 +115,7 @@ public class DeviceApplyController extends AbstractFileUploadController implemen return success(BeanUtils.toBean(deviceApply, DeviceApplyRespVO.class)); } - @GetMapping("/page") + @GetMapping("/list") @Operation(summary = "获得设备通用流程,验收、降级、停用、报废、还原、启用分页") public CommonResult> getDeviceApplyPage(@Valid DeviceApplyPageReqVO pageReqVO) { PageResult pageResult = deviceApplyService.getDeviceApplyPage(pageReqVO); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyDetailController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyDetailController.java index 62647ce..d0f1994 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyDetailController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyDetailController.java @@ -1,8 +1,7 @@ package com.zt.plat.module.qms.resource.device.controller.admin; -import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyDetailPageReqVO; -import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyDetailRespVO; -import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyDetailSaveReqVO; +import com.zt.plat.module.qms.resource.device.controller.vo.*; +import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceApplyDO; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -55,6 +54,13 @@ public class DeviceApplyDetailController extends AbstractFileUploadController im @Resource private DeviceApplyDetailService deviceApplyDetailService; + @GetMapping("/list") + @Operation(summary = "获得设备通用流程分页") + public CommonResult> list(DeviceApplyDetailPageReqVO reqVO) { + List list = deviceApplyDetailService.selectList(reqVO); + return success(BeanUtils.toBean(list, DeviceApplyDetailRespVO.class)); + } + @PostMapping("/create") @Operation(summary = "创建设备通用流程明细") @PreAuthorize("@ss.hasPermission('qms:device-apply-detail:create')") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceConfigFlowController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceConfigFlowController.java index 5d31f7d..00d5f6d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceConfigFlowController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceConfigFlowController.java @@ -55,14 +55,14 @@ public class DeviceConfigFlowController implements BusinessControllerMarker { @PostMapping("/create") @Operation(summary = "创建设备通用流程配置") - @PreAuthorize("@ss.hasPermission('qms:device-config-flow:create')") +// @PreAuthorize("@ss.hasPermission('qms:device-config-flow:create')") public CommonResult createDeviceConfigFlow(@Valid @RequestBody DeviceConfigFlowSaveReqVO createReqVO) { return success(deviceConfigFlowService.createDeviceConfigFlow(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新设备通用流程配置") - @PreAuthorize("@ss.hasPermission('qms:device-config-flow:update')") +// @PreAuthorize("@ss.hasPermission('qms:device-config-flow:update')") public CommonResult updateDeviceConfigFlow(@Valid @RequestBody DeviceConfigFlowSaveReqVO updateReqVO) { deviceConfigFlowService.updateDeviceConfigFlow(updateReqVO); return success(true); @@ -71,7 +71,7 @@ public class DeviceConfigFlowController implements BusinessControllerMarker { @DeleteMapping("/delete") @Operation(summary = "删除设备通用流程配置") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('qms:device-config-flow:delete')") +// @PreAuthorize("@ss.hasPermission('qms:device-config-flow:delete')") public CommonResult deleteDeviceConfigFlow(@RequestParam("id") Long id) { deviceConfigFlowService.deleteDeviceConfigFlow(id); return success(true); @@ -80,7 +80,7 @@ public class DeviceConfigFlowController implements BusinessControllerMarker { @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除设备通用流程配置") - @PreAuthorize("@ss.hasPermission('qms:device-config-flow:delete')") +// @PreAuthorize("@ss.hasPermission('qms:device-config-flow:delete')") public CommonResult deleteDeviceConfigFlowList(@RequestBody BatchDeleteReqVO req) { deviceConfigFlowService.deleteDeviceConfigFlowListByIds(req.getIds()); return success(true); @@ -89,7 +89,7 @@ public class DeviceConfigFlowController implements BusinessControllerMarker { @GetMapping("/get") @Operation(summary = "获得设备通用流程配置") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('qms:device-config-flow:query')") +// @PreAuthorize("@ss.hasPermission('qms:device-config-flow:query')") public CommonResult getDeviceConfigFlow(@RequestParam("id") Long id) { DeviceConfigFlowDO deviceConfigFlow = deviceConfigFlowService.getDeviceConfigFlow(id); return success(BeanUtils.toBean(deviceConfigFlow, DeviceConfigFlowRespVO.class)); @@ -104,7 +104,7 @@ public class DeviceConfigFlowController implements BusinessControllerMarker { @GetMapping("/export-excel") @Operation(summary = "导出设备通用流程配置 Excel") - @PreAuthorize("@ss.hasPermission('qms:device-config-flow:export')") +// @PreAuthorize("@ss.hasPermission('qms:device-config-flow:export')") @ApiAccessLog(operateType = EXPORT) public void exportDeviceConfigFlowExcel(@Valid DeviceConfigFlowPageReqVO pageReqVO, HttpServletResponse response) throws IOException { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailPageReqVO.java index 96a9202..24b871a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailPageReqVO.java @@ -35,4 +35,7 @@ public class DeviceApplyDetailPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + //扩展字段 + @Schema(description = "设备id列表") + private List deviceInfoIdList; } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java index 531e452..b596476 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java @@ -7,6 +7,8 @@ import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceApplyDetailDO import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyDetailPageReqVO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 设备通用流程明细 Mapper * @@ -27,4 +29,18 @@ public interface DeviceApplyDetailMapper extends BaseMapperX selectList(DeviceApplyDetailPageReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(DeviceApplyDetailDO::getApplyId, reqVO.getApplyId()) + .eqIfPresent(DeviceApplyDetailDO::getDeviceInfomationId, reqVO.getDeviceInfomationId()) + .inIfPresent(DeviceApplyDetailDO::getDeviceInfomationId, reqVO.getDeviceInfoIdList()) + .eqIfPresent(DeviceApplyDetailDO::getDeviceBorrowDetailId, reqVO.getDeviceBorrowDetailId()) + .eqIfPresent(DeviceApplyDetailDO::getFormData, reqVO.getFormData()) + .eqIfPresent(DeviceApplyDetailDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfPresent(DeviceApplyDetailDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(DeviceApplyDetailDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(DeviceApplyDetailDO::getId)); + } + + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailService.java index 52b0457..ca31f32 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailService.java @@ -16,6 +16,10 @@ import com.zt.plat.framework.common.pojo.PageResult; */ public interface DeviceApplyDetailService { + List selectList(DeviceApplyDetailPageReqVO reqVO); + + void insertBatch(List list); + /** * 创建设备通用流程明细 * diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailServiceImpl.java index 5c09035..897abf8 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyDetailServiceImpl.java @@ -6,6 +6,7 @@ import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyDetailRes import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyDetailSaveReqVO; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.*; @@ -32,6 +33,17 @@ public class DeviceApplyDetailServiceImpl implements DeviceApplyDetailService { @Resource private DeviceApplyDetailMapper deviceApplyDetailMapper; + @Override + public List selectList(DeviceApplyDetailPageReqVO reqVO) { + return deviceApplyDetailMapper.selectList(reqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void insertBatch(List list) { + deviceApplyDetailMapper.insertBatch(list); + } + @Override public DeviceApplyDetailRespVO createDeviceApplyDetail(DeviceApplyDetailSaveReqVO createReqVO) { // 插入 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyService.java index 0ae79f9..6d4634e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyService.java @@ -2,6 +2,7 @@ package com.zt.plat.module.qms.resource.device.service; import java.util.*; +import com.alibaba.fastjson.JSONObject; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyPageReqVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyRespVO; @@ -28,6 +29,12 @@ public interface DeviceApplyService { //创建临时数据 CommonResult createTempData(@Valid DeviceApplySaveReqVO createReqVO); + //增加明细 + CommonResult addDetail(JSONObject param); + + //删除明细 + CommonResult removeDetail(JSONObject param); + CommonResult saveDeviceApply(@Valid DeviceApplySaveReqVO updateReqVO); /** diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyServiceImpl.java index 0cbe0ec..b4cd418 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceApplyServiceImpl.java @@ -13,10 +13,13 @@ import com.zt.plat.module.qms.common.data.dal.dataobject.DataTemplateDO; import com.zt.plat.module.qms.common.data.service.DataCollectionService; import com.zt.plat.module.qms.common.data.service.DataTemplateService; import com.zt.plat.module.qms.enums.QmsCommonConstant; +import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyDetailPageReqVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyPageReqVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplyRespVO; import com.zt.plat.module.qms.resource.device.controller.vo.DeviceApplySaveReqVO; +import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceApplyDetailDO; import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceConfigFlowDO; +import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfomationDO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.PropertyUtils; import org.springframework.stereotype.Service; @@ -27,6 +30,7 @@ import org.springframework.validation.annotation.Validated; import java.lang.reflect.InvocationTargetException; import java.util.*; +import java.util.stream.Collectors; import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceApplyDO; import com.zt.plat.framework.common.pojo.PageResult; @@ -50,6 +54,8 @@ public class DeviceApplyServiceImpl implements DeviceApplyService { @Resource private DeviceApplyMapper deviceApplyMapper; @Resource private DeviceConfigFlowService deviceConfigFlowService; + @Resource private DeviceInfomationService deviceInfomationService; + @Resource private DeviceApplyDetailService deviceApplyDetailService; @Resource private DataCollectionService dataCollectionService; @Resource private DataTemplateService dataTemplateService; @@ -96,6 +102,55 @@ public class DeviceApplyServiceImpl implements DeviceApplyService { return CommonResult.success(BeanUtils.toBean(deviceApply, DeviceApplyRespVO.class)); } + + //增加明细 + @Override + @Transactional(rollbackFor = Exception.class) + public CommonResult addDetail(JSONObject param) { + String deviceIds = param.getString("deviceIds"); + String applyId = param.getString("applyId"); + if(ObjectUtils.isEmpty(deviceIds)) + return CommonResult.error(DEVICE_APPLY_NOT_EXISTS.getCode(), "请选择设备"); + if(ObjectUtils.isEmpty(applyId)) + return CommonResult.error(DEVICE_APPLY_NOT_EXISTS.getCode(), "缺少申请id参数,请刷新后重试!"); + List deviceList = deviceInfomationService.getListByIds(deviceIds); + if(deviceList.isEmpty()) + return CommonResult.error(DEVICE_APPLY_NOT_EXISTS.getCode(), "设备不存在"); + List deviceInfoIdList = new ArrayList<>(); + for (DeviceInfomationDO device : deviceList) { + deviceInfoIdList.add(device.getId()); + } + //查询已有明细,避免重复添加 + DeviceApplyDetailPageReqVO detailPageReqVO = new DeviceApplyDetailPageReqVO(); + detailPageReqVO.setApplyId(Long.valueOf(applyId)); + detailPageReqVO.setDeviceInfoIdList(deviceInfoIdList); + List detailList = deviceApplyDetailService.selectList(detailPageReqVO); + //过滤已添加设备 + List addDeviceList = deviceList.stream().filter(device -> + detailList.stream().noneMatch(detail -> detail.getDeviceInfomationId().equals(device.getId()))).toList(); + List detailDOList = new ArrayList<>(); + for (DeviceInfomationDO device : addDeviceList) { + DeviceApplyDetailDO detail = new DeviceApplyDetailDO(); + detail.setApplyId(Long.valueOf(applyId)); + detail.setDeviceInfomationId(device.getId()); + detailDOList.add(detail); + } + deviceApplyDetailService.insertBatch(detailDOList); + + return CommonResult.success(true); + } + + @Override + public CommonResult removeDetail(JSONObject param) { + + String detailIds = param.getString("detailIds"); + if(ObjectUtils.isEmpty(detailIds)) + return CommonResult.error(DEVICE_APPLY_NOT_EXISTS.getCode(), "请选择需要删除的明细数据"); + List detailIdList = Arrays.stream(detailIds.split(",")).map(Long::valueOf).toList(); + deviceApplyDetailService.deleteDeviceApplyDetailListByIds(detailIdList); + return CommonResult.success(true); + } + //保存 @Override @Transactional(rollbackFor = Exception.class) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationService.java index 6a6eb70..622203f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationService.java @@ -27,6 +27,7 @@ public interface DeviceInfomationService { DeviceInfomationDO getByCode(String code); List getListByProductIdList(List productIds); + List getListByIds(String ids); List getIdListByProductIdList(List productIds); @@ -47,11 +48,7 @@ public interface DeviceInfomationService { // CommonResult updateDeviceAcceptFlag(Long deviceId, String acceptFlag); // CommonResult updateDeviceLendFlag(Long deviceId, Integer lendFlag); - - - - - + void updateBatch(List updateList); /** * 创建设备-设备信息 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationServiceImpl.java index 0d67841..26e0fc9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceInfomationServiceImpl.java @@ -25,9 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0; @@ -201,6 +199,11 @@ public class DeviceInfomationServiceImpl implements DeviceInfomationService { deviceInfomationMapper.update(updateWrapper); } + @Override + public void updateBatch(List updateList) { + deviceInfomationMapper.updateBatch(updateList); + } + @Override public DeviceInfomationDO getByCode(String code) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); @@ -215,6 +218,14 @@ public class DeviceInfomationServiceImpl implements DeviceInfomationService { return deviceInfomationMapper.selectList(query); } + @Override + public List getListByIds(String ids) { + if(ObjectUtils.isEmpty(ids)) + return Collections.emptyList(); + List< Long> idsList = Arrays.asList(ids.split(",")).stream().map(Long::parseLong).toList(); + return deviceInfomationMapper.selectByIds(idsList); + } + @Override public List getIdListByProductIdList(List productIds) { List list = getListByProductIdList(productIds); From 1c5588a05ad9039380ff6a734c1d4d8971c26760 Mon Sep 17 00:00:00 2001 From: shusir <497819738@qq.com> Date: Thu, 29 Jan 2026 15:39:16 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=89=B9=E6=AC=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/MaterialBatchController.java | 13 ++++- .../controller/vo/MaterialBatchPageReqVO.java | 3 ++ .../controller/vo/MaterialBatchRespVO.java | 21 ++++++++- .../controller/vo/MaterialBatchSaveReqVO.java | 6 ++- .../dal/mapper/MaterialBatchMapper.java | 32 +++++++++++-- .../service/MaterialBatchService.java | 8 ++++ .../service/MaterialBatchServiceImpl.java | 47 ++++++++++++++++++- .../service/MaterialProductService.java | 7 +++ .../service/MaterialProductServiceImpl.java | 20 +++++--- .../assist/MaterialProductBatchService.java | 4 ++ 10 files changed, 144 insertions(+), 17 deletions(-) create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/assist/MaterialProductBatchService.java diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java index 64dc814..49fa23f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java @@ -93,8 +93,9 @@ public class MaterialBatchController implements BusinessControllerMarker { @Operation(summary = "获得物料批次分页") // @PreAuthorize("@ss.hasPermission('qms:material-batch:query')") public CommonResult> getMaterialBatchPage(@Valid MaterialBatchPageReqVO pageReqVO) { - PageResult pageResult = materialBatchService.getMaterialBatchPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, MaterialBatchRespVO.class)); + PageResult pageResult = materialBatchService.getMaterialBatchPageWithPdtInfo(pageReqVO); +// return success(BeanUtils.toBean(pageResult, MaterialBatchRespVO.class)); + return success(pageResult); } @GetMapping("/export-excel") @@ -117,6 +118,14 @@ public class MaterialBatchController implements BusinessControllerMarker { return success(materialBatchService.assignMaterialBatchGongduan(createReqVOs)); } + @PutMapping("/submit") + @Operation(summary = "提交物料批次") + @Parameter(name = "id", required = true) + public CommonResult submitMaterialBatch(@RequestParam("id") Long id) { +// return success(materialBatchService.submitMaterialBatch(id)); + return null; + } + @GetMapping("gongduan-page") @Operation(summary = "获取工段列表") @Parameter(name = "id", description = "物料批次 id", required = true, example = "1054") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java index f163611..5794760 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java @@ -19,6 +19,9 @@ public class MaterialBatchPageReqVO extends PageParam { @Schema(description = "物料大类id", example = "9381") private Long productId; + @Schema(description = "是否需要组装 children") + private Boolean children = false; + @Schema(description = "批次编号") private String batchNo; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java index 6c63e9e..482b37b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchRespVO.java @@ -7,6 +7,8 @@ import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; + import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 物料批次 Response VO") @@ -26,6 +28,18 @@ public class MaterialBatchRespVO { @ExcelProperty("物料大类id") private Long productId; + @Schema(description = "物料大类名称") + @ExcelProperty("物料大类名称") + private String productName; + + @Schema(description = "物料大类编码") + @ExcelProperty("物料大类编码") + private String productCode; + + @Schema(description = "物料大类型号") + @ExcelProperty("物料大类型号") + private String productModelNo; + @Schema(description = "批次编号") @ExcelProperty("批次编号") private String batchNo; @@ -44,11 +58,11 @@ public class MaterialBatchRespVO { @Schema(description = "生产日期") @ExcelProperty("生产日期") - private LocalDate manufacturerDate; + private LocalDateTime manufacturerDate; @Schema(description = "到期日期") @ExcelProperty("到期日期") - private LocalDate dueDate; + private LocalDateTime dueDate; @Schema(description = "分配部门id") @ExcelProperty("分配部门id") @@ -90,4 +104,7 @@ public class MaterialBatchRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "子批次-工段") + private List children; + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchSaveReqVO.java index d799a42..739973b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchSaveReqVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.material.controller.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.zt.plat.module.qms.resource.material.valid.AddGroup; import com.zt.plat.module.qms.resource.material.valid.UpdateGroup; import io.swagger.v3.oas.annotations.media.Schema; @@ -10,6 +11,7 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; +import java.time.LocalDateTime; @Schema(description = "管理后台 - 物料批次新增/修改 Request VO") @Data @@ -43,10 +45,10 @@ public class MaterialBatchSaveReqVO { @Schema(description = "生产日期") @NotNull(groups = AddGroup.class, message = "生产日期不能为空") - private LocalDate manufacturerDate; + private LocalDateTime manufacturerDate; @Schema(description = "到期日期") - private LocalDate dueDate; + private LocalDateTime dueDate; @Schema(description = "分配部门id") private Long assignDepartmentId; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java index 8e2eafd..814ba55 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java @@ -1,19 +1,18 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import org.apache.ibatis.annotations.Mapper; -import java.util.Arrays; import java.util.List; /** @@ -25,7 +24,6 @@ import java.util.List; public interface MaterialBatchMapper extends BaseMapperX { default PageResult selectPage(MaterialBatchPageReqVO reqVO) { - // TODO 需要层级穿透 分类-物料sku-批次 return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(MaterialBatchDO::getProductId, reqVO.getProductId()) .likeIfPresent(MaterialBatchDO::getBatchNo, reqVO.getBatchNo()) @@ -45,4 +43,30 @@ public interface MaterialBatchMapper extends BaseMapperX { .orderByDesc(MaterialBatchDO::getId)); } + default PageResult selectPage(MaterialBatchPageReqVO reqVO, List pdtIds) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() + .selectAll(MaterialBatchDO.class) + .selectAs(MaterialProductDO::getName, MaterialBatchRespVO::getProductName) + .selectAs(MaterialProductDO::getCode, MaterialBatchRespVO::getProductCode) + .selectAs(MaterialProductDO::getModelNo, MaterialBatchRespVO::getProductModelNo) + .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialBatchDO::getProductId) + .in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds) + .eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId()) + .likeIfExists(MaterialBatchDO::getBatchNo, reqVO.getBatchNo()) + .likeIfExists(MaterialBatchDO::getLocation, reqVO.getLocation()) + .likeIfExists(MaterialBatchDO::getSupplierId, reqVO.getSupplierId()) +// .betweenIfPresent(MaterialBatchDO::getManufacturerDate, reqVO.getManufacturerDate()) +// .betweenIfPresent(MaterialBatchDO::getDueDate, reqVO.getDueDate()) + .eqIfExists(MaterialBatchDO::getAssignDepartmentId, reqVO.getAssignDepartmentId()) + .likeIfExists(MaterialBatchDO::getAssignDepartmentName, reqVO.getAssignDepartmentName()) + .eqIfExists(MaterialBatchDO::getAcceptanceStatus, reqVO.getAcceptanceStatus()) + .eqIfExists(MaterialBatchDO::getAssayFlag, reqVO.getAssayFlag()) + .eqIfExists(MaterialBatchDO::getAssayStatus, reqVO.getAssayStatus()) + .eqIfExists(MaterialBatchDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfExists(MaterialBatchDO::getRemark, reqVO.getRemark()) +// .betweenIfPresent(MaterialBatchDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialBatchDO::getId); + return selectJoinPage(reqVO, MaterialBatchRespVO.class, wrapper); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java index a185ce0..d2a5725 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java @@ -61,6 +61,14 @@ public interface MaterialBatchService { */ PageResult getMaterialBatchPage(MaterialBatchPageReqVO pageReqVO); + /** + * 获得物料批次分页-可根据物料分类和大类级联查询 + * + * @param pageReqVO 分页查询 + * @return 物料批次分页 + */ + PageResult getMaterialBatchPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO); + /** * 批次工段拆分 * diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java index 5d25a2a..dc70ccb 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java @@ -11,6 +11,7 @@ import com.zt.plat.module.qms.core.code.SequenceUtil; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialProductRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; @@ -44,6 +45,9 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { @Autowired private SequenceUtil sequenceUtil; + @Autowired + private MaterialProductService materialProductService; + private final String sequenceKey = "QMS_MATERIAL_BATCH_NO"; @Override @@ -126,6 +130,32 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { return materialBatchMapper.selectPage(pageReqVO); } + @Override + public PageResult getMaterialBatchPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO) { + Long pdtId = pageReqVO.getProductId(); + PageResult pageResult; + if (pdtId == null) { + pageResult = materialBatchMapper.selectPage(pageReqVO, List.of()); + } else { + List mtrlDos = materialProductService.getMaterialProductsByLikeIdPath(pdtId); + if (CollUtil.isEmpty(mtrlDos)) { + pageResult = materialBatchMapper.selectPage(pageReqVO, List.of()); + } else { + List pdtIds = mtrlDos.stream().map(MaterialProductDO::getId).toList(); + pageResult = materialBatchMapper.selectPage(pageReqVO, pdtIds); + } + } + + if (!pageReqVO.getChildren()) return pageResult; + List voList = pageResult.getList(); + if (CollUtil.isNotEmpty(voList)) { + List treeVos = this.listTransTree(voList, 0L); + pageResult.setList(treeVos); + } + + return pageResult; + } + /** * 批次工段拆分 * @@ -148,7 +178,7 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { for (MaterialBatchSaveReqVO batAsn : createReqVOs) { total = total.add(batAsn.getInboundQuantity()); } - if (!total.equals(mtrlBat.getInboundQuantity())) + if (total.compareTo(mtrlBat.getInboundQuantity()) != 0) throw exception(GONGDUAN_QUANTITY_MATERIAL_BATCH_NOT_EQUAL); // 修改工段 if (CollUtil.isNotEmpty(asnDOs)) { @@ -194,4 +224,19 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { .ne(MaterialBatchDO::getParentId, 0)); } + /** + * 组装物料批次树 + * + */ + private List listTransTree(List voList, Long parentId) { + + // 获取父级节点 + List parentVOs = voList.stream().filter(vo -> + vo.getParentId().equals(parentId)).collect(Collectors.toList()); + // 设置响应的子节点 + parentVOs.forEach(vo -> vo.setChildren(listTransTree(voList, vo.getId()))); + + return parentVOs; + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java index a5b8bdf..cf4063b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java @@ -99,4 +99,11 @@ public interface MaterialProductService { * @return 物料大类分页 */ PageResult getMaterialInventoryPage(@Valid MaterialProductPageReqVO pageReqVO); + + /** + * 获取id在 idPath中的全部数据 + * @param pdtId id + * @return 物料数据 + */ + List getMaterialProductsByLikeIdPath(Long pdtId); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java index 1a8bff6..aae98c0 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java @@ -40,8 +40,8 @@ public class MaterialProductServiceImpl implements MaterialProductService { @Resource private MaterialProductMapper materialProductMapper; - @Autowired - private MaterialBatchService materialBatchService; +// @Autowired +// private MaterialBatchService materialBatchService; @Autowired private MaterialInfomationService materialInfomationService; @@ -249,8 +249,8 @@ public class MaterialProductServiceImpl implements MaterialProductService { else { // 大类下有批次时不可删除 // TODO 以及其他不可删除的情况,如库存记录、物料实例、使用记录等 - boolean exists = materialBatchService.checkIsExistsDataByPdt(id); - if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); +// boolean exists = materialBatchService.checkIsExistsDataByPdt(id); +// if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); } materialProductMapper.deleteById(id); } @@ -267,8 +267,8 @@ public class MaterialProductServiceImpl implements MaterialProductService { if (CollUtil.isNotEmpty(mtCtgList)) throw exception(MATERIAL_PRODUCTS_EXISTS_CATEGORY); // 检查是否可删除 大类下有批次时不可删除 // TODO 以及其他不可删除的情况,如库存记录、物料实例、使用记录等 - boolean exists = materialBatchService.checkIsExistsDataByPdts(ids); - if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); +// boolean exists = materialBatchService.checkIsExistsDataByPdts(ids); +// if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); // 删除 materialProductMapper.deleteByIds(ids); } @@ -339,4 +339,12 @@ public class MaterialProductServiceImpl implements MaterialProductService { return new PageResult<>(voList, pageResult.getTotal()); } + @Override + public List getMaterialProductsByLikeIdPath(Long pdtId) { + + return materialProductMapper.selectList(Wrappers.lambdaQuery(MaterialProductDO.class) + .like(MaterialProductDO::getIdPath, "/" + pdtId + "/") + .eq(MaterialProductDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA)); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/assist/MaterialProductBatchService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/assist/MaterialProductBatchService.java new file mode 100644 index 0000000..db8381e --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/assist/MaterialProductBatchService.java @@ -0,0 +1,4 @@ +package com.zt.plat.module.qms.resource.material.service.assist; + +public class MaterialProductBatchService { +} From 5a03ed1cab566744bf154c1c266d4561cfae479b Mon Sep 17 00:00:00 2001 From: shusir <497819738@qq.com> Date: Thu, 29 Jan 2026 17:56:30 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=E6=96=B0=E5=A2=9E=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=89=B9=E6=AC=A1=E6=8F=90=E4=BA=A4=EF=BC=8C=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=A4=A7=E7=B1=BB=E5=88=A0=E9=99=A4=E6=A0=A1=E9=AA=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/DeviceApplyController.java | 2 +- .../admin/MaterialBatchController.java | 4 +- .../dal/mapper/MaterialProductMapper.java | 17 ++++++ .../service/MaterialBatchService.java | 8 +++ .../service/MaterialBatchServiceImpl.java | 57 +++++++++++++------ .../service/MaterialProductServiceImpl.java | 11 ++-- 6 files changed, 71 insertions(+), 28 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java index d89d476..6537b85 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceApplyController.java @@ -115,7 +115,7 @@ public class DeviceApplyController extends AbstractFileUploadController implemen return success(BeanUtils.toBean(deviceApply, DeviceApplyRespVO.class)); } - @GetMapping("/list") + @GetMapping("/page") @Operation(summary = "获得设备通用流程,验收、降级、停用、报废、还原、启用分页") public CommonResult> getDeviceApplyPage(@Valid DeviceApplyPageReqVO pageReqVO) { PageResult pageResult = deviceApplyService.getDeviceApplyPage(pageReqVO); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java index 49fa23f..1d4e8d4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java @@ -122,8 +122,8 @@ public class MaterialBatchController implements BusinessControllerMarker { @Operation(summary = "提交物料批次") @Parameter(name = "id", required = true) public CommonResult submitMaterialBatch(@RequestParam("id") Long id) { -// return success(materialBatchService.submitMaterialBatch(id)); - return null; + + return success(materialBatchService.submitMaterialBatch(id)); } @GetMapping("gongduan-page") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialProductMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialProductMapper.java index a2f67bd..bf3a9a5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialProductMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialProductMapper.java @@ -3,11 +3,15 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.module.qms.core.constant.DataTypeConstant; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialProductPageReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 物料大类 Mapper * @@ -52,4 +56,17 @@ public interface MaterialProductMapper extends BaseMapperX { .orderByDesc(MaterialProductDO::getId)); } + default boolean checkIsExistsBatchByPdt(Long id){ + MPJLambdaWrapperX wrapperX = new MPJLambdaWrapperX() + .leftJoin(MaterialBatchDO.class, MaterialBatchDO::getProductId, MaterialProductDO::getId) + .eq(MaterialBatchDO::getProductId, id); + return this.exists(wrapperX); + } + + default boolean checkIsExistsDataByPdts(List ids){ + MPJLambdaWrapperX wrapperX = new MPJLambdaWrapperX() + .leftJoin(MaterialBatchDO.class, MaterialBatchDO::getProductId, MaterialProductDO::getId) + .in(MaterialBatchDO::getProductId, ids); + return this.exists(wrapperX); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java index d2a5725..e20abc1 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java @@ -100,4 +100,12 @@ public interface MaterialBatchService { * @return 工段列表 */ List getMaterialBatchGongduanList(Long batId); + + /** + * 提交物料批次 + * + * @param id 批次id + * @return 是否 + */ + Boolean submitMaterialBatch(Long id); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java index dc70ccb..0f1f285 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java @@ -3,11 +3,12 @@ package com.zt.plat.module.qms.resource.material.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.protobuf.ServiceException; import com.zt.plat.framework.common.exception.ErrorCode; +import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.qms.core.code.SequenceUtil; +import com.zt.plat.module.qms.enums.ErrorCodeConstants; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO; @@ -83,13 +84,11 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { @Override public void deleteMaterialBatch(Long id) { - // 校验存在 - validateMaterialBatchExists(id); - // 已经拆分的批次不可删除 - List asnDOs = materialBatchMapper.selectList(Wrappers.lambdaQuery(MaterialBatchDO.class) - .eq(MaterialBatchDO::getParentId, id)); - if (CollUtil.isNotEmpty(asnDOs)) throw exception(MATERIAL_BATCH_ASSIGN_END); + MaterialBatchDO batchDO = materialBatchMapper.selectById(id); + if (batchDO == null) throw exception(MATERIAL_BATCH_NOT_EXISTS); + if (batchDO.getSubmitStatus() == 1) + throw new ServiceException(1_032_160_000, "批次已经提交,不可删除"); // 删除 materialBatchMapper.deleteById(id); @@ -98,11 +97,15 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { @Override public void deleteMaterialBatchListByIds(List ids) { // 校验存在 - validateMaterialBatchExists(ids); - // 已经拆分的批次不可删除 - List asnDOs = materialBatchMapper.selectList(Wrappers.lambdaQuery(MaterialBatchDO.class) - .in(MaterialBatchDO::getParentId, ids)); - if (CollUtil.isNotEmpty(asnDOs)) throw exception(MATERIAL_BATCH_ASSIGN_END); + List list = materialBatchMapper.selectByIds(ids); + if (CollUtil.isEmpty(list) || list.size() != ids.size()) { + throw exception(MATERIAL_BATCH_NOT_EXISTS); + } + // 存在已经提交的批次时,不可删除 + for (MaterialBatchDO batch : list) { + if (batch.getSubmitStatus() == 1) + throw new ServiceException(1_032_160_000, "存在已经提交的批次,不可删除"); + } // 删除 materialBatchMapper.deleteByIds(ids); } @@ -164,8 +167,7 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { public List assignMaterialBatchGongduan(List createReqVOs) { // 是否已经拆分过 Long batId = createReqVOs.get(0).getParentId(); - List asnDOs = materialBatchMapper.selectList(Wrappers.lambdaQuery(MaterialBatchDO.class) - .eq(MaterialBatchDO::getParentId, batId)); + // 1. 所属的批次需要是同一个 Set pIds = createReqVOs.stream().map(MaterialBatchSaveReqVO::getParentId).collect(Collectors.toSet()); if (pIds.size() > 1) throw exception(GONGDUAN_BELONG_MATERIAL_BATCH_NOT_EQUAL); @@ -181,15 +183,21 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { if (total.compareTo(mtrlBat.getInboundQuantity()) != 0) throw exception(GONGDUAN_QUANTITY_MATERIAL_BATCH_NOT_EQUAL); // 修改工段 - if (CollUtil.isNotEmpty(asnDOs)) { - // 删除之前的拆分数据,TODO 需要检查是否可以删除 + boolean exists = materialBatchMapper.exists(Wrappers.lambdaQuery(MaterialBatchDO.class) + .eq(MaterialBatchDO::getParentId, batId)); + if (exists) { + if (mtrlBat.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "批次已经提交,禁止修改"); + // 删除之前的拆分数据 materialBatchMapper.delete(Wrappers.lambdaQuery(MaterialBatchDO.class) .eq(MaterialBatchDO::getParentId, batId)); } // 3. 保存工段 - List gongEts = createReqVOs.stream().map( - batAsn -> BeanUtils.toBean(batAsn, MaterialBatchDO.class)).toList(); + List gongEts = createReqVOs.stream().map(batAsn -> { + MaterialBatchDO bean = BeanUtils.toBean(batAsn, MaterialBatchDO.class); + bean.setProductId(mtrlBat.getProductId()); + return bean; + }).toList(); materialBatchMapper.insertBatch(gongEts); return gongEts.stream().map( @@ -224,6 +232,19 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { .ne(MaterialBatchDO::getParentId, 0)); } + @Override + public Boolean submitMaterialBatch(Long id) { + MaterialBatchDO batchDO = materialBatchMapper.selectById(id); + if (batchDO == null) throw exception(MATERIAL_BATCH_NOT_EXISTS); + if (batchDO.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "批次已经提交过"); + boolean exists = materialBatchMapper.exists(Wrappers.lambdaQuery(MaterialBatchDO.class) + .eq(MaterialBatchDO::getParentId, id)); + if (!exists) throw new ServiceException(1_032_160_000, "批次还未拆分,不可提交"); + batchDO.setSubmitStatus(1); + materialBatchMapper.updateById(batchDO); + return true; + } + /** * 组装物料批次树 * diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java index aae98c0..e1a454d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java @@ -238,9 +238,6 @@ public class MaterialProductServiceImpl implements MaterialProductService { // 分类 if (DataTypeConstant.DATA_TYPE_CATEGORY.equals(pdtDo.getNodeType())) { // 分类下有子分类或大类时不可删除 -// boolean exists = materialProductMapper.exists(Wrappers.lambdaQuery(MaterialProductDO.class) -// .like(MaterialProductDO::getIdPath, id) -// .ne(MaterialProductDO::getId, id)); boolean exists = materialProductMapper.exists(Wrappers.lambdaQuery(MaterialProductDO.class) .eq(MaterialProductDO::getParentId, id)); if (exists) throw exception(MATERIAL_CATEGORY_EXISTS_CHILDREN); @@ -249,8 +246,8 @@ public class MaterialProductServiceImpl implements MaterialProductService { else { // 大类下有批次时不可删除 // TODO 以及其他不可删除的情况,如库存记录、物料实例、使用记录等 -// boolean exists = materialBatchService.checkIsExistsDataByPdt(id); -// if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); + boolean exists = materialProductMapper.checkIsExistsBatchByPdt(id); + if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); } materialProductMapper.deleteById(id); } @@ -267,8 +264,8 @@ public class MaterialProductServiceImpl implements MaterialProductService { if (CollUtil.isNotEmpty(mtCtgList)) throw exception(MATERIAL_PRODUCTS_EXISTS_CATEGORY); // 检查是否可删除 大类下有批次时不可删除 // TODO 以及其他不可删除的情况,如库存记录、物料实例、使用记录等 -// boolean exists = materialBatchService.checkIsExistsDataByPdts(ids); -// if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); + boolean exists = materialProductMapper.checkIsExistsDataByPdts(ids); + if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH); // 删除 materialProductMapper.deleteByIds(ids); }