From c560897b89c70b4c5bf7a4386dca38c06ca26e38 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Mon, 12 Jan 2026 20:08:20 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E6=9C=89=E8=A2=AB=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E4=B8=8D=E8=83=BD=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/iot/enums/ErrorCodeConstants.java | 1 + .../admin/device/DeviceController.java | 24 ++--- .../DeviceAttributeTypeServiceImpl.java | 54 +++++++++-- .../module/mes/enums/ErrorCodeConstants.java | 10 +- .../CriticalComponentServiceImpl.java | 92 ++++++++++++++++++- .../devicetype/DeviceTypeServiceImpl.java | 28 +++++- .../dvsubject/DvSubjectServiceImpl.java | 36 +++++++- .../PlanMaintenanceServiceImpl.java | 37 ++++++-- 8 files changed, 241 insertions(+), 41 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java index 8e0c092126..da286cccc3 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java @@ -44,6 +44,7 @@ public interface ErrorCodeConstants { ErrorCode DEVICE_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_000, "设备属性不存在"); ErrorCode DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS = new ErrorCode(1_003_000_000, "采集点分类不存在"); ErrorCode DEVICE_CODE_EXISTS = new ErrorCode(1_003_000_000, "采集点编码已存在"); + ErrorCode DEVICE_ATTRIBUTE_TYPE_REFERENCES_EXISTS = new ErrorCode(1_003_000_000, "存在采集点类型已被引用,请先删除对应引用"); ErrorCode ENDPOINT_DOES_NOT_EXIS = new ErrorCode(1_003_000_000, "暂未设置设备端点"); ErrorCode DEVICE_DOES_NOT_EXIST= new ErrorCode(1_003_000_000, "该采集设备不存在"); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java index 3f3fca4045..f7674579f7 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java @@ -59,18 +59,18 @@ public class DeviceController { tDengineService.initDatabaseAndTable(device.getId()); //添加定时任务 // 创建 JobSaveReqVO 对象实例 - JobSaveReqVO jobSaveReqVO = new JobSaveReqVO(); - // 设置任务属性(根据您的业务需求设置具体值) - jobSaveReqVO.setName("deviceJob_" + device.getId()); // 处理器名称唯一 - jobSaveReqVO.setHandlerName("deviceJob"); // 处理器名称唯一 - jobSaveReqVO.setHandlerParam("{\"deviceId\": \"" + device.getId() + "\"}"); // 使用设备ID作为参数值 - jobSaveReqVO.setCronExpression("*/5 * * * * ?"); // CRON表达式,每5秒执行一次[1,3](@ref) - jobSaveReqVO.setRetryCount(3); // 重试次数 - jobSaveReqVO.setRetryInterval(5000); // 重试间隔(毫秒) - jobSaveReqVO.setMonitorTimeout(30000); // 监控超时时间(毫秒) - jobSaveReqVO.setDeviceId(device.getId()); - - jobService.createJob(jobSaveReqVO); +// JobSaveReqVO jobSaveReqVO = new JobSaveReqVO(); +// // 设置任务属性(根据您的业务需求设置具体值) +// jobSaveReqVO.setName("deviceJob_" + device.getId()); // 处理器名称唯一 +// jobSaveReqVO.setHandlerName("deviceJob"); // 处理器名称唯一 +// jobSaveReqVO.setHandlerParam("{\"deviceId\": \"" + device.getId() + "\"}"); // 使用设备ID作为参数值 +// jobSaveReqVO.setCronExpression("*/5 * * * * ?"); // CRON表达式,每5秒执行一次[1,3](@ref) +// jobSaveReqVO.setRetryCount(3); // 重试次数 +// jobSaveReqVO.setRetryInterval(5000); // 重试间隔(毫秒) +// jobSaveReqVO.setMonitorTimeout(30000); // 监控超时时间(毫秒) +// jobSaveReqVO.setDeviceId(device.getId()); +// +// jobService.createJob(jobSaveReqVO); return success(device); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java index 610c00185d..f5c9aae5d6 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java @@ -1,7 +1,13 @@ package cn.iocoder.yudao.module.iot.service.deviceattributetype; import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO; +import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO; +import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper; +import cn.iocoder.yudao.module.iot.dal.mysql.devicemodel.DeviceModelMapper; +import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelattribute.DeviceModelAttributeMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.validation.constraints.NotEmpty; @@ -33,6 +39,12 @@ public class DeviceAttributeTypeServiceImpl implements DeviceAttributeTypeServic @Resource private DeviceAttributeTypeMapper deviceAttributeTypeMapper; + @Resource + private DeviceModelAttributeMapper deviceModelAttributeMapper; + + @Resource + private DeviceContactModelMapper deviceContactModelMapper; + @Override public Long createDeviceAttributeType(DeviceAttributeTypeSaveReqVO createReqVO) { // 重复判断 @@ -62,8 +74,10 @@ public class DeviceAttributeTypeServiceImpl implements DeviceAttributeTypeServic if (count > 0) { throw exception(DEVICE_CODE_EXISTS); } + + DeviceAttributeTypeDO deviceAttributeTypeDO = deviceAttributeTypeMapper.selectById(updateReqVO.getId()); // 校验存在 - validateDeviceAttributeTypeExists(updateReqVO.getId()); + validateDeviceAttributeTypeExists(deviceAttributeTypeDO); // 更新 DeviceAttributeTypeDO updateObj = BeanUtils.toBean(updateReqVO, DeviceAttributeTypeDO.class); deviceAttributeTypeMapper.updateById(updateObj); @@ -71,17 +85,41 @@ public class DeviceAttributeTypeServiceImpl implements DeviceAttributeTypeServic @Override @Transactional(rollbackFor = Exception.class) - public void deleteDeviceAttributeType( List ids) { - for (Long id : ids) { - // 校验存在 - validateDeviceAttributeTypeExists(id); + public void deleteDeviceAttributeType(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return; + } + + // 批量校验存在性 + List existList = deviceAttributeTypeMapper.selectBatchIds(ids); + if (existList.size() != ids.size()) { + throw exception(DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS); } - // 删除 + + // 批量校验引用 + validateBatchReferences(ids); + + // 批量删除 deviceAttributeTypeMapper.deleteByIds(ids); } - private void validateDeviceAttributeTypeExists(Long id) { - if (deviceAttributeTypeMapper.selectById(id) == null) { + private void validateBatchReferences(List ids) { + // 批量查询引用 + boolean hasModelRef = deviceModelAttributeMapper.exists( + Wrappers.lambdaQuery() + .in(DeviceModelAttributeDO::getAttributeType, ids)); + + boolean hasContactRef = deviceContactModelMapper.exists( + Wrappers.lambdaQuery() + .in(DeviceContactModelDO::getAttributeType, ids)); + + if (hasModelRef || hasContactRef) { + throw exception(DEVICE_ATTRIBUTE_TYPE_REFERENCES_EXISTS); + } + } + + private void validateDeviceAttributeTypeExists(DeviceAttributeTypeDO deviceAttributeTypeDO) { + if (deviceAttributeTypeDO == null) { throw exception(DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS); } } diff --git a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index da3ef9d026..e9d24d6235 100644 --- a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -76,7 +76,9 @@ public interface ErrorCodeConstants { ErrorCode DV_CHECK_NOT_EXISTS = new ErrorCode(5_0087, "维保计划不存在"); - ErrorCode DV_SUBJECT_NOT_EXISTS = new ErrorCode(5_0087, "维保项目不存在"); + ErrorCode DV_SUBJECT_NOT_EXISTS = new ErrorCode(5_0087, "项目不存在"); + ErrorCode DV_SUBJECT_REFERENCES = new ErrorCode(5_0087, "存在项目已被引用,请先删除所引用"); + ErrorCode DV_REPAIR_NOT_EXISTS = new ErrorCode(5_0087, "设备维修记录不存在"); ErrorCode DV_REPAIR_CODE_EXISTS = new ErrorCode(5_0087, "设备维修记录编码已存在"); @@ -90,6 +92,8 @@ public interface ErrorCodeConstants { //======================================设备管理相关 1002000000================================================= ErrorCode DEVICE_TYPE_NOT_EXISTS = new ErrorCode(1002000000, "设备类型不存在"); + ErrorCode DEVICE_TYPE_REFERENCES = new ErrorCode(1002000000, "该设备类型已被引用,请先删除相关引用"); + ErrorCode DEVICE_TYPE_PARENT_NOT_EXISTS = new ErrorCode(1002000001, "父级设备类型不存在"); ErrorCode DEVICE_TYPE_PARENT_IS_SELF = new ErrorCode(1002000002, "不能设置自己为父级"); ErrorCode DEVICE_TYPE_PARENT_IS_CHILD = new ErrorCode(1002000003, "不能设置子节点为父级"); @@ -97,6 +101,8 @@ public interface ErrorCodeConstants { ErrorCode DEVICE_LEDGER_NOT_EXISTS = new ErrorCode(1002000005, "该设备不存在"); ErrorCode DEVICE_LEDGER_CODE_NOT_ONLY = new ErrorCode(1002000006, "设备类型编码已存在"); ErrorCode PLAN_MAINTENANCE_NOT_EXISTS = new ErrorCode(1002000007, "方案维护不存在"); + ErrorCode PLAN_MAINTENANCE_REFERENCES = new ErrorCode(1002000007, "该方案维护已被引用,请先删除引用"); + ErrorCode SUBJECT_PLAN_NOT_EXISTS = new ErrorCode(1002000008, "项目方案关联不存在"); ErrorCode SUBJECT_ID_NOT_EXISTS = new ErrorCode(1002000009, "项目Id不存在"); ErrorCode DEVICE_LEDGER_EXISTS = new ErrorCode(1002000010, "设备台账编码已存在"); @@ -106,6 +112,8 @@ public interface ErrorCodeConstants { ErrorCode TICKET_RESULTS_NOT_EXISTS = new ErrorCode(1002000013, "工单检验结果不存在"); ErrorCode TICKET_RESULTS_ID_NOT_NULL = new ErrorCode(1002000014, "工单检验结果Id不存在"); ErrorCode CRITICAL_COMPONENT_NOT_EXISTS = new ErrorCode(1002000015, "设备关键件不存在"); + ErrorCode CRITICAL_COMPONENT_REFERENCES= new ErrorCode(1002000015, "存在设备关键件已被引用,请先删除引用"); + ErrorCode REPAIR_TEMS_NOT_EXISTS = new ErrorCode(1002000016, "维修项目不存在"); ErrorCode REPAIR_TEMS_CODE_EXISTS = new ErrorCode(1002000016, "维修项目编码已存在"); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java index 6ba5377764..c74c20ace4 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java @@ -1,11 +1,23 @@ package cn.iocoder.yudao.module.mes.service.criticalcomponent; +import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO; +import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.repairtems.RepairTemsDO; +import cn.iocoder.yudao.module.mes.dal.mysql.deviceledger.DeviceLedgerMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.repairtems.RepairTemsMapper; +import com.alibaba.excel.util.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import cn.iocoder.yudao.module.mes.controller.admin.criticalcomponent.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.criticalcomponent.CriticalComponentDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -15,6 +27,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.dal.mysql.criticalcomponent.CriticalComponentMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_ATTRIBUTE_TYPE_REFERENCES_EXISTS; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -29,6 +43,13 @@ public class CriticalComponentServiceImpl implements CriticalComponentService { @Resource private CriticalComponentMapper criticalComponentMapper; + @Resource + private DeviceLedgerMapper deviceLedgerMapper; + + @Resource + private RepairTemsMapper repairTemsMapper; + + @Override public Long createCriticalComponent(CriticalComponentSaveReqVO createReqVO) { // 插入 @@ -48,14 +69,75 @@ public class CriticalComponentServiceImpl implements CriticalComponentService { } @Override - public void deleteCriticalComponent(List idList) { - for (Long id : idList) { - // 校验存在 - validateCriticalComponentExists(id); + public void deleteCriticalComponent(List ids) { + + if (CollectionUtils.isEmpty(ids)) { + return; } + // 批量校验存在性 + List existList = criticalComponentMapper.selectBatchIds(ids); + if (existList.size() != ids.size()) { + throw exception(CRITICAL_COMPONENT_NOT_EXISTS); + } + + // 检验设备台账引用 + validateDeviceLedgerBatchReferences(ids); + + //检验项目维护引用 + validateDvjectBatchReferences(ids); + // 删除 - criticalComponentMapper.deleteByIds(idList); + criticalComponentMapper.deleteByIds(ids); + + } + + private void validateDvjectBatchReferences(List ids) { + + + boolean isExists = repairTemsMapper.exists( + Wrappers.lambdaQuery() + .in(RepairTemsDO::getComponentId, ids)); + + if (isExists){ + throw exception(CRITICAL_COMPONENT_REFERENCES); + } + + + } + + private void validateDeviceLedgerBatchReferences(List ids) { + // 查询所有包含这些ID的记录 + List ledgers = deviceLedgerMapper.selectList( + Wrappers.lambdaQuery() + .isNotNull(DeviceLedgerDO::getComponentId) + .select(DeviceLedgerDO::getComponentId) + ); + + if (CollectionUtils.isEmpty(ledgers)) { + return; + } + + // 检查每个componentId字段是否包含目标ID + for (DeviceLedgerDO ledger : ledgers) { + if (StringUtils.isBlank(ledger.getComponentId())) { + continue; + } + + // 将逗号分隔的ID转换为Set + Set componentIds = Arrays.stream(ledger.getComponentId().split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .collect(Collectors.toSet()); + + // 检查是否有交集 + for (Long id : ids) { + if (componentIds.contains(id)) { + throw exception(CRITICAL_COMPONENT_REFERENCES); + } + } + } } private void validateCriticalComponentExists(Long id) { diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeServiceImpl.java index ef4d676301..50512c3439 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeServiceImpl.java @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.mes.service.devicetype; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO; import cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo.DeviceTypeTreeRespVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; +import cn.iocoder.yudao.module.mes.dal.mysql.deviceledger.DeviceLedgerMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; @@ -41,6 +43,9 @@ public class DeviceTypeServiceImpl implements DeviceTypeService { @Resource private DeviceTypeMapper deviceTypeMapper; + @Resource + private DeviceLedgerMapper deviceLedgerMapper; + @Override public Long createDeviceType(DeviceTypeSaveReqVO createReqVO) { @@ -79,7 +84,8 @@ public class DeviceTypeServiceImpl implements DeviceTypeService { @Override public void updateDeviceType(DeviceTypeSaveReqVO updateReqVO) { // 1. 校验存在 - validateDeviceTypeExists(updateReqVO.getId()); + DeviceTypeDO deviceTypeDO = deviceTypeMapper.selectById(updateReqVO.getId()); + validateDeviceTypeExists(deviceTypeDO); //编码重复判断 Long count = deviceTypeMapper.selectCount(new LambdaQueryWrapper() .eq(DeviceTypeDO::getCode, updateReqVO.getCode()) @@ -123,17 +129,29 @@ public class DeviceTypeServiceImpl implements DeviceTypeService { @Override public void deleteDeviceType(Long id) { // 1. 校验存在 - validateDeviceTypeExists(id); + DeviceTypeDO deviceTypeDO = deviceTypeMapper.selectById(id); + validateDeviceTypeExists(deviceTypeDO); // 2. 校验是否有子节点 if (hasChildren(id)) { throw exception(DEVICE_TYPE_EXITS_CHILDREN); } + // 3. 校验是否有引用 + validateReferences(deviceTypeDO); - // 3. 删除 + // 4. 删除 deviceTypeMapper.deleteById(id); } + private void validateReferences(DeviceTypeDO deviceTypeDO) { + + boolean isExists = deviceLedgerMapper.exists(Wrappers.lambdaQuery().eq(DeviceLedgerDO::getDeviceType,deviceTypeDO.getId())); + if (isExists){ + throw exception(DEVICE_TYPE_REFERENCES); + + } + } + @Override @Transactional(rollbackFor = Exception.class) public void deleteDeviceTypeBatch(List ids) { @@ -142,8 +160,8 @@ public class DeviceTypeServiceImpl implements DeviceTypeService { } } - private void validateDeviceTypeExists(Long id) { - if (deviceTypeMapper.selectById(id) == null) { + private void validateDeviceTypeExists(DeviceTypeDO deviceTypeDO) { + if (deviceTypeDO == null) { throw exception(DEVICE_TYPE_NOT_EXISTS); } } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java index 7746371a9d..7a86d2d7e6 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java @@ -7,10 +7,14 @@ import cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo.DvSubjectPageRe import cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo.DvSubjectSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; import cn.iocoder.yudao.module.mes.dal.mysql.dvsubject.DvSubjectMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.subjectplan.SubjectPlanMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; @@ -33,6 +37,9 @@ public class DvSubjectServiceImpl implements DvSubjectService { @Resource private DvSubjectMapper dvSubjectMapper; + @Resource + private SubjectPlanMapper subjectPlanMapper; + @Override public Long createDvSubject(DvSubjectSaveReqVO createReqVO) { @@ -70,17 +77,38 @@ public class DvSubjectServiceImpl implements DvSubjectService { } @Override + @Transactional(rollbackFor = Exception.class) public void deleteDvSubject(List idList) { + if (CollectionUtils.isEmpty(idList)) { + return; + } - for (Long id : idList) { - // 校验存在 - validateDvSubjectExists(id); + // 批量校验存在性 + List existList = dvSubjectMapper.selectBatchIds(idList); + if (existList.size() != idList.size()) { + throw exception(DV_SUBJECT_NOT_EXISTS); } - // 删除 + // 批量校验引用 + validateBatchReferences(idList); + + // 批量删除 dvSubjectMapper.deleteByIds(idList); } + private void validateBatchReferences(List idList) { + boolean exists = subjectPlanMapper.exists( + Wrappers.lambdaQuery() + .in(SubjectPlanDO::getSubjectId, idList) + ); + + if (exists) { + throw exception(DV_SUBJECT_REFERENCES); + } + } + + + private void validateDvSubjectExists(Long id) { if (dvSubjectMapper.selectById(id) == null) { throw exception(DV_SUBJECT_NOT_EXISTS); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceServiceImpl.java index da715510c4..a07f7821be 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceServiceImpl.java @@ -2,10 +2,13 @@ package cn.iocoder.yudao.module.mes.service.planmaintenance; import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.taskmanagement.TaskManagementDO; import cn.iocoder.yudao.module.mes.dal.mysql.dvsubject.DvSubjectMapper; import cn.iocoder.yudao.module.mes.dal.mysql.subjectplan.SubjectPlanMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.taskmanagement.TaskManagementMapper; import cn.iocoder.yudao.module.mes.service.subjectplan.SubjectPlanService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; @@ -44,6 +47,9 @@ public class PlanMaintenanceServiceImpl implements PlanMaintenanceService { @Resource private DvSubjectMapper dvSubjectMapper; + @Resource + private TaskManagementMapper taskManagementMapper; + @Override @Transactional(rollbackFor = Exception.class) @@ -118,17 +124,36 @@ public class PlanMaintenanceServiceImpl implements PlanMaintenanceService { @Override @Transactional(rollbackFor = Exception.class) - public void deletePlanMaintenance( List idList) { - for (Long id : idList) { - // 校验存在 - validatePlanMaintenanceExists(id); + public void deletePlanMaintenance(List idList) { + if (CollectionUtils.isEmpty(idList)) { + return; + } + // 批量校验存在性 + List existList = planMaintenanceMapper.selectBatchIds(idList); + if (existList.size() != idList.size()) { + throw exception(PLAN_MAINTENANCE_NOT_EXISTS); } - // 删除 + + // 批量校验引用 + validateBatchReferences(idList); + + // 删除主表 planMaintenanceMapper.deleteByIds(idList); - //删除关联表数据 + + // 删除关联表数据 deleteSubjectPlan(idList); + } + private void validateBatchReferences(List idList) { + boolean exists = taskManagementMapper.exists( + Wrappers.lambdaQuery() + .in(TaskManagementDO::getProjectForm, idList) + ); + + if (exists) { + throw exception(PLAN_MAINTENANCE_REFERENCES); + } } private void deleteSubjectPlan(List idList) { From 820efaa232915f8553b29860946b88cc6fbcd7d5 Mon Sep 17 00:00:00 2001 From: 86158 <461356067@qq.com> Date: Tue, 13 Jan 2026 18:10:18 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E6=A8=A1?= =?UTF-8?q?=E5=85=B7=E7=82=B9=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/mold/vo/MoldPageReqVO.java | 9 +- .../admin/mold/vo/MoldSaveReqVO.java | 11 +- .../erp/dal/dataobject/mold/MoldDO.java | 3 + .../erp/dal/mysql/mold/MoldBrandMapper.java | 14 -- .../module/erp/dal/mysql/mold/MoldMapper.java | 15 +- .../MoldPlanMaintenanceController.java | 140 +++++++++++++ .../vo/MoldPlanMaintenancePageReqVO.java | 34 ++++ .../vo/MoldPlanMaintenanceRespVO.java | 42 ++++ .../vo/MoldPlanMaintenanceSaveReqVO.java | 28 +++ .../moldsubject/MoldSubjectController.java | 187 +++++++++++++++++ .../moldsubject/vo/MoldSubjectPageReqVO.java | 53 +++++ .../moldsubject/vo/MoldSubjectRespVO.java | 70 +++++++ .../moldsubject/vo/MoldSubjectSaveReqVO.java | 50 +++++ .../MoldTaskManagementController.java | 136 +++++++++++++ .../vo/MoldTaskManagementPageReqVO.java | 54 +++++ .../vo/MoldTaskManagementRespVO.java | 77 +++++++ .../vo/MoldTaskManagementSaveReqVO.java | 53 +++++ .../MoldTicketManagementController.java | 127 ++++++++++++ .../enums/MoldPlanTypeEnum.java | 87 ++++++++ .../MoldTicketManagementBatchUpdateReqVO.java | 20 ++ .../vo/MoldTicketManagementPageReqVO.java | 66 ++++++ .../vo/MoldTicketManagementRespVO.java | 92 +++++++++ .../vo/MoldTicketManagementSaveReqVO.java | 42 ++++ .../MoldTicketResultsController.java | 104 ++++++++++ .../enums/MoldJobResultEnum.java | 109 ++++++++++ .../vo/MoldTicketResultsPageReqVO.java | 47 +++++ .../vo/MoldTicketResultsRespVO.java | 56 +++++ .../vo/MoldTicketResultsSaveReqVO.java | 44 ++++ .../SubjectMoldPlanController.java | 95 +++++++++ .../vo/SubjectMoldPlanPageReqVO.java | 28 +++ .../vo/SubjectMoldPlanRespVO.java | 31 +++ .../vo/SubjectMoldPlanSaveReqVO.java | 23 +++ .../MoldPlanMaintenanceDO.java | 48 +++++ .../dataobject/moldsubject/MoldSubjectDO.java | 70 +++++++ .../MoldTaskManagementDO.java | 84 ++++++++ .../MoldTicketManagementDO.java | 91 +++++++++ .../MoldTicketResultsDO.java | 68 +++++++ .../subjectmoldplan/SubjectMoldPlanDO.java | 39 ++++ .../MoldPlanMaintenanceMapper.java | 47 +++++ .../mysql/moldsubject/MoldSubjectMapper.java | 52 +++++ .../MoldTaskManagementMapper.java | 53 +++++ .../MoldTicketManagementMapper.java | 63 ++++++ .../MoldTicketResultsMapper.java | 36 ++++ .../SubjectMoldPlanMapper.java | 35 ++++ .../MoldPlanMaintenanceService.java | 59 ++++++ .../MoldPlanMaintenanceServiceImpl.java | 192 ++++++++++++++++++ .../moldsubject/MoldSubjectService.java | 56 +++++ .../moldsubject/MoldSubjectServiceImpl.java | 101 +++++++++ .../MoldTaskManagementService.java | 56 +++++ .../MoldTaskManagementServiceImpl.java | 178 ++++++++++++++++ .../MoldTicketManagementService.java | 56 +++++ .../MoldTicketManagementServiceImpl.java | 107 ++++++++++ .../MoldTicketResultsService.java | 62 ++++++ .../MoldTicketResultsServiceImpl.java | 182 +++++++++++++++++ .../SubjectMoldPlanService.java | 55 +++++ .../SubjectMoldPlanServiceImpl.java | 75 +++++++ .../mapper/moldsubject/MoldSubjectMapper.xml | 12 ++ .../MoldTicketManagementMapper.xml | 21 ++ .../MoldTicketResultsMapper.xml | 30 +++ 59 files changed, 3852 insertions(+), 23 deletions(-) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/MoldPlanMaintenanceController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenancePageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/MoldSubjectController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/MoldTicketManagementController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/enums/MoldPlanTypeEnum.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementBatchUpdateReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/MoldTicketResultsController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/enums/MoldJobResultEnum.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/SubjectMoldPlanController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldplanmaintenance/MoldPlanMaintenanceDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldsubject/MoldSubjectDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldtaskmanagement/MoldTaskManagementDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketmanagement/MoldTicketManagementDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketresults/MoldTicketResultsDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/subjectmoldplan/SubjectMoldPlanDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldplanmaintenance/MoldPlanMaintenanceMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldsubject/MoldSubjectMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldtaskmanagement/MoldTaskManagementMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketmanagement/MoldTicketManagementMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketresults/MoldTicketResultsMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/subjectmoldplan/SubjectMoldPlanMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldsubject/MoldSubjectMapper.xml create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketmanagement/MoldTicketManagementMapper.xml create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketresults/MoldTicketResultsMapper.xml diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java index fbeaffc7a8..fb721bc093 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java @@ -29,7 +29,7 @@ public class MoldPageReqVO extends PageParam { @Schema(description = "机台ID", example = "24428") private Long machineId; - @Schema(description = "使用时间(小时)") + @Schema(description = "使用次数/次") private BigDecimal useTime; @Schema(description = "入库时间") @@ -58,7 +58,10 @@ public class MoldPageReqVO extends PageParam { @Schema(description = "id集合导出用") private String ids; -// @Schema(description = "机台名字") -// private String machineName; + @Schema(description = "机台名字") + private String machineName; + + @Schema(description = "附件地址") + private String fileUrl; } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldSaveReqVO.java index 4f19a0aae0..2cbee9216a 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldSaveReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldSaveReqVO.java @@ -24,13 +24,13 @@ public class MoldSaveReqVO { private String name; @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19527") - @NotNull(message = "单位ID不能为空") +// @NotNull(message = "单位ID不能为空") private Long unitId; @Schema(description = "机台ID", example = "24428") private Long machineId; - @Schema(description = "使用时间(小时)") + @Schema(description = "使用次数/次") private BigDecimal useTime; @Schema(description = "入库时间", requiredMode = Schema.RequiredMode.REQUIRED) @@ -47,11 +47,14 @@ public class MoldSaveReqVO { private String remark; @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "是否启用不能为空") +// @NotNull(message = "是否启用不能为空") private Boolean isEnable; @Schema(description = "型号id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15258") - @NotNull(message = "型号id不能为空") +// @NotNull(message = "型号id不能为空") private Long brandId; + @Schema(description = "附件地址") + private String fileUrl; + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/mold/MoldDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/mold/MoldDO.java index 55b52f5b9c..92a1715df2 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/mold/MoldDO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/mold/MoldDO.java @@ -76,4 +76,7 @@ public class MoldDO extends BaseDO { */ private Long brandId; + + private String fileUrl; + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java index 600066aafe..bed90f0819 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java @@ -22,20 +22,6 @@ import java.util.stream.Collectors; public interface MoldBrandMapper extends BaseMapperX { default PageResult selectPage(MoldBrandPageReqVO reqVO) { -// return selectPage(reqVO, new LambdaQueryWrapperX() -// .eqIfPresent(MoldBrandDO::getCode, reqVO.getCode()) -// .likeIfPresent(MoldBrandDO::getName, reqVO.getName()) -// .eqIfPresent(MoldBrandDO::getMoldType, reqVO.getMoldType()) -// .eqIfPresent(MoldBrandDO::getProductId, reqVO.getProductId()) -// .eqIfPresent(MoldBrandDO::getUseTime, reqVO.getUseTime()) -// .eqIfPresent(MoldBrandDO::getMaintainType, reqVO.getMaintainType()) -// .eqIfPresent(MoldBrandDO::getMaintainTime, reqVO.getMaintainTime()) -// .eqIfPresent(MoldBrandDO::getMoldSize, reqVO.getMoldSize()) -// .eqIfPresent(MoldBrandDO::getRemark, reqVO.getRemark()) -// .eqIfPresent(MoldBrandDO::getIsEnable, reqVO.getIsEnable()) -// .eqIfPresent(MoldBrandDO::getOrgType, reqVO.getOrgType()) -// .betweenIfPresent(MoldBrandDO::getCreateTime, reqVO.getCreateTime()) -// .orderByDesc(MoldBrandDO::getId)); LambdaQueryWrapperX moldBrandDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); moldBrandDOLambdaQueryWrapperX diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldMapper.java index 2f47c628c3..f20c5284eb 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldMapper.java @@ -6,6 +6,8 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -19,13 +21,14 @@ public interface MoldMapper extends BaseMapperX { default PageResult selectPage(PageParam reqVO, Long brandId) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eq(MoldDO::getBrandId, brandId) - .orderByDesc(MoldDO::getId)); + .eq(MoldDO::getBrandId, brandId) + .orderByDesc(MoldDO::getId)); } default int deleteByBrandId(Long brandId) { return delete(MoldDO::getBrandId, brandId); } + default List selectBy(MoldDO reqVO) { return selectList(new LambdaQueryWrapperX() .eqIfPresent(MoldDO::getCode, reqVO.getCode()) @@ -33,4 +36,12 @@ public interface MoldMapper extends BaseMapperX { .eq(MoldDO::getBrandId, reqVO.getBrandId()) .orderByDesc(MoldDO::getId)); } + + default List selectBy(Long brandId) { + return selectList(new LambdaQueryWrapperX() + .eq(MoldDO::getBrandId, brandId) + .orderByDesc(MoldDO::getId)); + } + + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/MoldPlanMaintenanceController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/MoldPlanMaintenanceController.java new file mode 100644 index 0000000000..2bb8e3ac47 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/MoldPlanMaintenanceController.java @@ -0,0 +1,140 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance; + +import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.vo.TicketManagementRespVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; +import cn.iocoder.yudao.module.mes.service.subjectmoldplan.SubjectMoldPlanService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; +import cn.iocoder.yudao.module.mes.service.moldplanmaintenance.MoldPlanMaintenanceService; + +@Tag(name = "管理后台 - 方案维护") +@RestController +@RequestMapping("/mes/mold-plan-maintenance") +@Validated +public class MoldPlanMaintenanceController { + + @Resource + private MoldPlanMaintenanceService moldplanMaintenanceService; + + @Resource + private SubjectMoldPlanService subjectMoldPlanService; + + @Resource + private AdminUserApi adminUserApi; + + @PostMapping("/create") + @Operation(summary = "创建方案维护") + @PreAuthorize("@ss.hasPermission('mes:mold-plan-maintenance:create')") + public CommonResult createMoldPlanMaintenance(@Valid @RequestBody MoldPlanMaintenanceSaveReqVO createReqVO) { + return success(moldplanMaintenanceService.createMoldPlanMaintenance(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新方案维护") + @PreAuthorize("@ss.hasPermission('mes:mold-plan-maintenance:update')") + public CommonResult updateMoldPlanMaintenance(@Valid @RequestBody MoldPlanMaintenanceSaveReqVO updateReqVO) { + moldplanMaintenanceService.updateMoldPlanMaintenance(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除方案维护") + @Parameter(name = "ids", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:mold-plan-maintenance:delete')") + public CommonResult deleteMoldPlanMaintenance(@RequestParam("ids") String ids) { + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + moldplanMaintenanceService.deleteMoldPlanMaintenance(idList); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得方案维护") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:mold-plan-maintenance:query')") + public CommonResult getMoldPlanMaintenance(@RequestParam("id") Long id) { + MoldPlanMaintenanceDO moldplanMaintenance = moldplanMaintenanceService.getMoldPlanMaintenance(id); + return success(BeanUtils.toBean(moldplanMaintenance, MoldPlanMaintenanceRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得方案维护分页") + @PreAuthorize("@ss.hasPermission('mes:mold-plan-maintenance:query')") + public CommonResult> getMoldPlanMaintenancePage(@Valid MoldPlanMaintenancePageReqVO pageReqVO) { + PageResult pageResult = moldplanMaintenanceService.getMoldPlanMaintenancePage(pageReqVO); + PageResult moldplanMaintenanceRespVOPageResult = BeanUtils.toBean(pageResult, MoldPlanMaintenanceRespVO.class); + + return success(buildPageCreatorName(moldplanMaintenanceRespVOPageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出方案维护 Excel") + @PreAuthorize("@ss.hasPermission('mes:mold-plan-maintenance:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMoldPlanMaintenanceExcel(@Valid MoldPlanMaintenancePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = moldplanMaintenanceService.getMoldPlanMaintenancePage(pageReqVO).getList(); + + List moldplanMaintenanceRespVOS = BeanUtils.toBean(list, MoldPlanMaintenanceRespVO.class); + for (MoldPlanMaintenanceRespVO moldplanMaintenanceRespVO : moldplanMaintenanceRespVOS) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldplanMaintenanceRespVO.getCreator())); + moldplanMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname()); + } + + // 导出 Excel + ExcelUtils.write(response, "方案维护.xls", "数据", MoldPlanMaintenanceRespVO.class,moldplanMaintenanceRespVOS); + } + + + @GetMapping("/getSubjectList") + @Operation(summary = "查询项目集合列表") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:mold-plan-maintenance:query')") + public CommonResult> getSubjectList(@RequestParam("id") Long id) { + List subjectMoldPlanDOList = moldplanMaintenanceService.getSubjectList(id); + return success(subjectMoldPlanDOList); + } + + + private PageResult buildPageCreatorName(PageResult moldplanMaintenanceRespVOPageResult) { + for (MoldPlanMaintenanceRespVO moldplanMaintenanceRespVO : moldplanMaintenanceRespVOPageResult.getList()) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldplanMaintenanceRespVO.getCreator())); + moldplanMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname()); + } + return moldplanMaintenanceRespVOPageResult; + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenancePageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenancePageReqVO.java new file mode 100644 index 0000000000..1e0f07cb51 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenancePageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 方案维护分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldPlanMaintenancePageReqVO extends PageParam { + + @Schema(description = "名称", example = "王五") + private String planName; + + @Schema(description = "名称", example = "1") + private Integer planType; + + @Schema(description = "描述", example = "你猜") + private String description; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "id集合导出用") + private String ids; +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceRespVO.java new file mode 100644 index 0000000000..e5cab10f70 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceRespVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance.vo; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 方案维护 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldPlanMaintenanceRespVO extends BaseDO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19033") + @ExcelProperty("id") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @ExcelProperty("名称") + private String planName; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("名称") + private int planType; + + @Schema(description = "描述", example = "你猜") + @ExcelProperty("描述") + private String description; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "项目集合ids") + private List subjectIds; + + @Schema(description = "创建人名字") + @ExcelProperty("创建人名字") + private String creatorName; +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceSaveReqVO.java new file mode 100644 index 0000000000..679c1a440f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldplanmaintenance/vo/MoldPlanMaintenanceSaveReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 方案维护新增/修改 Request VO") +@Data +public class MoldPlanMaintenanceSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19033") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "名称不能为空") + private String planName; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "名称不能为空") + private String planType; + + @Schema(description = "描述") + private String description; + + @Schema(description = "项目id集合", example = "1") + private String subjectIdS; +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/MoldSubjectController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/MoldSubjectController.java new file mode 100644 index 0000000000..99e4e81c15 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/MoldSubjectController.java @@ -0,0 +1,187 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldsubject; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo.DeviceLedgerRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import cn.iocoder.yudao.module.mes.service.moldsubject.MoldSubjectService; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import com.alibaba.excel.util.StringUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 维保项目") +@RestController +@RequestMapping("/mes/mold-subject") +@Validated +public class MoldSubjectController { + + @Resource + private MoldSubjectService moldSubjectService; + + @Resource + private AdminUserApi adminUserApi; + + @Resource + private DictDataApi dictDataApi; + + + + @PostMapping("/create") + @Operation(summary = "创建维保项目") + @PreAuthorize("@ss.hasPermission('mes:mold-subject:create')") + public CommonResult createMoldSubject(@Valid @RequestBody MoldSubjectSaveReqVO createReqVO) { + return success(moldSubjectService.createMoldSubject(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新维保项目") + @PreAuthorize("@ss.hasPermission('mes:mold-subject:update')") + public CommonResult updateMoldSubject(@Valid @RequestBody MoldSubjectSaveReqVO updateReqVO) { + moldSubjectService.updateMoldSubject(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除维保项目") + @Parameter(name = "ids", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:mold-subject:delete')") + public CommonResult deleteMoldSubject(@RequestParam("ids") String ids) { + + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + moldSubjectService.deleteMoldSubject(idList); + + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得维保项目") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:mold-subject:query')") + public CommonResult getMoldSubject(@RequestParam("id") Long id) { + MoldSubjectDO moldSubject = moldSubjectService.getMoldSubject(id); + return success(BeanUtils.toBean(moldSubject, MoldSubjectRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得维保项目分页") + @PreAuthorize("@ss.hasPermission('mes:mold-subject:query')") + public CommonResult> getMoldSubjectPage(@Valid MoldSubjectPageReqVO pageReqVO) { + PageResult pageResult = moldSubjectService.getMoldSubjectPage(pageReqVO); + PageResult moldSubjectRespVOPageResult = BeanUtils.toBean(pageResult, MoldSubjectRespVO.class); + return success(buildCreatorName(moldSubjectRespVOPageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出维保项目 Excel") + @PreAuthorize("@ss.hasPermission('mes:mold-subject:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMoldSubjectExcel(@Valid MoldSubjectPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = moldSubjectService.getMoldSubjectPage(pageReqVO).getList(); + + List moldSubjectRespVOList = BeanUtils.toBean(list, MoldSubjectRespVO.class); + // 1. 获取字典数据 + Map> dictData = getDictData(); + + for (MoldSubjectRespVO moldSubjectRespVO : moldSubjectRespVOList) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldSubjectRespVO.getCreator())); + moldSubjectRespVO.setCreatorName("(" + user.getUsername()+ ")" + user.getNickname()); + + // 转换检验方式字典值 + if (StringUtils.isNotBlank(moldSubjectRespVO.getInspectionMethod())) { + String inspectionMethodLabel = dictData.get("Inspection_method") + .get(moldSubjectRespVO.getInspectionMethod()); + if (StringUtils.isNotBlank(inspectionMethodLabel)) { + // 可以创建一个临时字段存储,或者直接替换原字段 + moldSubjectRespVO.setInspectionMethod(inspectionMethodLabel); + } + } + + // 转换值类型字典值 + if (StringUtils.isNotBlank(moldSubjectRespVO.getValueType())) { + String valueTypeLabel = dictData.get("value_types") + .get(moldSubjectRespVO.getValueType()); + if (StringUtils.isNotBlank(valueTypeLabel)) { + moldSubjectRespVO.setValueType(valueTypeLabel); + } + } + + } + // 导出 Excel + ExcelUtils.write(response, "维保项目.xls", "数据", MoldSubjectRespVO.class, + moldSubjectRespVOList ); + } + + + private PageResult buildCreatorName(PageResult moldSubjectRespVOPageResult) { + for (MoldSubjectRespVO moldSubjectRespVO : moldSubjectRespVOPageResult.getList()) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldSubjectRespVO.getCreator())); + moldSubjectRespVO.setCreatorName("(" + user.getUsername()+ ")" + user.getNickname()); + } + + return moldSubjectRespVOPageResult; + } + + /** + * 获取字典数据 + */ + private Map> getDictData() { + Map> dictData = new HashMap<>(); + + try { + // 获取检验方式字典 + Map inspectionMethodDict = new HashMap<>(); + List inspectionMethods = dictDataApi.getDictDataList("Inspection_method"); + for (DictDataRespDTO dict : inspectionMethods) { + inspectionMethodDict.put(dict.getValue(), dict.getLabel()); + } + dictData.put("Inspection_method", inspectionMethodDict); + + // 获取值类型字典 + Map valueTypeDict = new HashMap<>(); + List valueTypes = dictDataApi.getDictDataList("value_types"); + for (DictDataRespDTO dict : valueTypes) { + valueTypeDict.put(dict.getValue(), dict.getLabel()); + } + dictData.put("value_types", valueTypeDict); + } catch (Exception e) { + throw new RuntimeException("获取字典数据异常:" + e); + } + + return dictData; + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectPageReqVO.java new file mode 100644 index 0000000000..2baa87c670 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectPageReqVO.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 维保项目分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldSubjectPageReqVO extends PageParam { + + @Schema(description = "项目编码") + private String subjectCode; + + @Schema(description = "项目名称", example = "李四") + private String subjectName; + + @Schema(description = "项目类型", example = "2") + private String subjectType; + + @Schema(description = "项目内容") + private String subjectContent; + + @Schema(description = "标准") + private String subjectStandard; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "检验方式") + private String inspectionMethod; + + @Schema(description = "值类型") + private String valueType; + + @Schema(description = "判定基准") + private String judgmentCriteria; + + @Schema(description = "id集合导出用") + private String ids; +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectRespVO.java new file mode 100644 index 0000000000..0b584ac822 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectRespVO.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 维保项目 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldSubjectRespVO extends BaseDO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24679") +// @ExcelProperty("ID") + private Long id; + + @Schema(description = "项目编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("项目编码") + private String subjectCode; + + @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @ExcelProperty("项目名称") + private String subjectName; + + @Schema(description = "项目类型", example = "2") +// @ExcelProperty("项目类型") + private String subjectType; + + @Schema(description = "项目内容", requiredMode = Schema.RequiredMode.REQUIRED) +// @ExcelProperty("项目内容") + private String subjectContent; + + @Schema(description = "标准") +// @ExcelProperty("标准") + private String subjectStandard; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "是否启用", converter = DictConvert.class) + @DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Boolean isEnable; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + @ColumnWidth(20) + private LocalDateTime createTime; + + @Schema(description = "检验方式") + @ExcelProperty("检验方式") + private String inspectionMethod; + + @Schema(description = "值类型") + @ExcelProperty("值类型") + private String valueType; + + @Schema(description = "判定基准") + @ExcelProperty("判定基准") + private String judgmentCriteria; + + @Schema(description = "创建人名字") + @ExcelProperty("创建人名字") + private String creatorName; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectSaveReqVO.java new file mode 100644 index 0000000000..5b1dfd2c38 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldsubject/vo/MoldSubjectSaveReqVO.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 维保项目新增/修改 Request VO") +@Data +public class MoldSubjectSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24679") + private Long id; + + @Schema(description = "项目编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "项目编码不能为空") + private String subjectCode; + + @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @NotEmpty(message = "项目名称不能为空") + private String subjectName; + + @Schema(description = "项目类型", example = "2") + private String subjectType; + + @Schema(description = "项目内容", requiredMode = Schema.RequiredMode.REQUIRED) +// @NotEmpty(message = "项目内容不能为空") + private String subjectContent; + + @Schema(description = "标准") + private String subjectStandard; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isEnable; + + @Schema(description = "检验方式", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "检验方式") + private String inspectionMethod; + + @Schema(description = "值类型", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "值类型") + private String valueType; + + @Schema(description = "判定基准", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "判定基准") + private String judgmentCriteria; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java new file mode 100644 index 0000000000..5d4dd8dd67 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/MoldTaskManagementController.java @@ -0,0 +1,136 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement; + +import cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.vo.PlanMaintenanceRespVO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement.MoldTaskManagementDO; +import cn.iocoder.yudao.module.mes.service.moldtaskmanagement.MoldTaskManagementService; + +@Tag(name = "管理后台 - 任务管理") +@RestController +@RequestMapping("/mes/mold-task-management") +@Validated +public class MoldTaskManagementController { + + @Resource + private MoldTaskManagementService moldtaskManagementService; + @Resource + private AdminUserApi adminUserApi; + + + @PostMapping("/create") + @Operation(summary = "创建任务管理") + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:create')") + public CommonResult createMoldTaskManagement(@Valid @RequestBody MoldTaskManagementSaveReqVO createReqVO) { + return success(moldtaskManagementService.createMoldTaskManagement(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新任务管理") + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:update')") + public CommonResult updateMoldTaskManagement(@Valid @RequestBody MoldTaskManagementSaveReqVO updateReqVO) { + moldtaskManagementService.updateMoldTaskManagement(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除任务管理") + @Parameter(name = "ids", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:delete')") + public CommonResult deleteMoldTaskManagement(@RequestParam("ids") String ids) { + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + moldtaskManagementService.deleteMoldTaskManagement(idList); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得任务管理") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:query')") + public CommonResult getMoldTaskManagement(@RequestParam("id") Long id) { + MoldTaskManagementDO moldtaskManagement = moldtaskManagementService.getMoldTaskManagement(id); + return success(BeanUtils.toBean(moldtaskManagement, MoldTaskManagementRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得任务管理分页") + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:query')") + public CommonResult> getMoldTaskManagementPage(@Valid MoldTaskManagementPageReqVO pageReqVO) { + PageResult pageResult = moldtaskManagementService.getMoldTaskManagementPage(pageReqVO); + + PageResult moldtaskManagementRespVOPageResult = BeanUtils.toBean(pageResult, MoldTaskManagementRespVO.class); + buildPageCreatorName(moldtaskManagementRespVOPageResult); + return success(moldtaskManagementRespVOPageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出任务管理 Excel") + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMoldTaskManagementExcel(@Valid MoldTaskManagementPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = moldtaskManagementService.getMoldTaskManagementPage(pageReqVO).getList(); + List moldtaskManagementRespVOList = BeanUtils.toBean(list, MoldTaskManagementRespVO.class); + + for (MoldTaskManagementRespVO planMaintenanceRespVO : moldtaskManagementRespVOList) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator())); + planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname()); + } + // 导出 Excel + ExcelUtils.write(response, "模具类型.xls", "数据", MoldTaskManagementRespVO.class,moldtaskManagementRespVOList); + } + + + @PostMapping("/createMoldTicket") + @Operation(summary = "创建工单管理") + @PreAuthorize("@ss.hasPermission('mes:mold-task-management:create')") + public CommonResult createTicket(@RequestParam("id") Long id) { + moldtaskManagementService.createMoldTicket(id); + return success(true); + } + + + private PageResult buildPageCreatorName(PageResult planMaintenanceRespVOPageResult) { + for (MoldTaskManagementRespVO planMaintenanceRespVO : planMaintenanceRespVOPageResult.getList()) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator())); + planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname()); + + } + + + return planMaintenanceRespVOPageResult; + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementPageReqVO.java new file mode 100644 index 0000000000..b1eab71f91 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementPageReqVO.java @@ -0,0 +1,54 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 模具类型分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldTaskManagementPageReqVO extends PageParam { + + @Schema(description = "名称", example = "李四") + private String name; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + private Integer taskType; + + @Schema(description = "模具列表") + private String moldList; + + @Schema(description = "项目表单") + private Long projectForm; + + @Schema(description = "起止开始日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] startDate; + + @Schema(description = "起止结束日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] endDate; + + @Schema(description = "cron表达式") + private String cronExpression; + + @Schema(description = "可操作人") + private String operableUsers; + + @Schema(description = "是否启用") + private Boolean enabled; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "id集合导出用") + private String ids; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementRespVO.java new file mode 100644 index 0000000000..7e9e94478f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementRespVO.java @@ -0,0 +1,77 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.time.LocalDate; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 模具类型 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldTaskManagementRespVO extends BaseDO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26348") + @ExcelProperty("id") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @ExcelProperty("名称") + private String name; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + @ExcelProperty("类型(1-点检 2-保养)") + private Integer taskType; + + @Schema(description = "模具列表") + @ExcelProperty("模具列表") + private String moldList; + + @Schema(description = "项目表单") + @ExcelProperty("项目表单") + private Long projectForm; + + @Schema(description = "起止开始日期") + @ExcelProperty("起止开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @Schema(description = "起止结束日期") + @ExcelProperty("起止结束日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @Schema(description = "cron表达式") + @ExcelProperty("cron表达式") + private String cronExpression; + + @Schema(description = "可操作人") + @ExcelProperty("可操作人") + private String operableUsers; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean enabled; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "创建人名字") + @ExcelProperty("创建人名字") + private String creatorName; + + @Schema(description = "项目表单名称") + @ExcelProperty("项目表单名称") + private String projectFormName; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementSaveReqVO.java new file mode 100644 index 0000000000..6b02e2dfe5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldtaskmanagement/vo/MoldTaskManagementSaveReqVO.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 模具类型新增/修改 Request VO") +@Data +public class MoldTaskManagementSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26348") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + private Integer taskType; + + @Schema(description = "模具列表") + private String moldList; + + @Schema(description = "项目表单") + private Long projectForm; + + @Schema(description = "起止开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private String startDate; + + @Schema(description = "起止结束日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private String endDate; + + @Schema(description = "cron表达式") + private String cronExpression; + + @Schema(description = "可操作人") + private String operableUsers; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean enabled; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/MoldTicketManagementController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/MoldTicketManagementController.java new file mode 100644 index 0000000000..a67dfce9b4 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/MoldTicketManagementController.java @@ -0,0 +1,127 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement; + +import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldRespVO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; +import cn.iocoder.yudao.module.mes.service.moldticketmanagement.MoldTicketManagementService; + +@Tag(name = "管理后台 - 工单管理") +@RestController +@RequestMapping("/mes/mold-ticket-management") +@Validated +public class MoldTicketManagementController { + + @Resource + private MoldTicketManagementService moldticketManagementService; + + @Resource + private AdminUserApi adminUserApi; + + @PostMapping("/create") + @Operation(summary = "创建工单管理") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-management:create')") + public CommonResult createMoldTicketManagement(@Valid @RequestBody MoldTicketManagementSaveReqVO createReqVO) { + return success(moldticketManagementService.createMoldTicketManagement(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新工单管理") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-management:update')") + public CommonResult updateMoldTicketManagement(@Valid @RequestBody MoldTicketManagementSaveReqVO updateReqVO) { + moldticketManagementService.updateMoldTicketManagement(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除工单管理") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-management:delete')") + public CommonResult deleteMoldTicketManagement(@RequestParam("id") Long id) { + moldticketManagementService.deleteMoldTicketManagement(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得工单管理") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-management:query')") + public CommonResult getMoldTicketManagement(@RequestParam("id") Long id) { + MoldTicketManagementDO moldticketManagement = moldticketManagementService.getMoldTicketManagement(id); + return success(BeanUtils.toBean(moldticketManagement, MoldTicketManagementRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得工单管理分页") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-management:query')") + public CommonResult> getMoldTicketManagementPage(@Valid MoldTicketManagementPageReqVO pageReqVO) { + PageResult pageResult = moldticketManagementService.getMoldTicketManagementPage(pageReqVO); + return success(buildPageCreatorName(BeanUtils.toBean(pageResult, MoldTicketManagementRespVO.class))); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出工单管理 Excel") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-management:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMoldTicketManagementExcel(@Valid MoldTicketManagementPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = moldticketManagementService.getMoldTicketManagementPage(pageReqVO).getList(); + List moldticketManagementRespVOList = BeanUtils.toBean(list, MoldTicketManagementRespVO.class); + for (MoldTicketManagementRespVO moldticketManagementRespVO : moldticketManagementRespVOList) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldticketManagementRespVO.getCreator())); + moldticketManagementRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname()); + } + + // 导出 Excel + ExcelUtils.write(response, "工单管理.xls", "数据", MoldTicketManagementRespVO.class, + moldticketManagementRespVOList); + } + + + @PutMapping("/batchUpdateStatus") + @Operation(summary = "批量取消工单") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-management:update')") + public CommonResult batchUpdateMoldTicketStatus(@Valid @RequestBody MoldTicketManagementBatchUpdateReqVO reqVO) { + moldticketManagementService.batchUpdateJobStatus(reqVO); + return success(true); + } + + private PageResult buildPageCreatorName(PageResult moldticketManagementRespVOPageResult) { + for (MoldTicketManagementRespVO moldticketManagementRespVO : moldticketManagementRespVOPageResult.getList()) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldticketManagementRespVO.getCreator())); + moldticketManagementRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname()); + if (moldticketManagementRespVO.getOperator()!=null){ + AdminUserRespDTO operator = adminUserApi.getUser(Long.valueOf(moldticketManagementRespVO.getOperator())); + moldticketManagementRespVO.setOperatorName("(" + operator.getUsername()+ ")" + operator.getNickname()); + } + } + return moldticketManagementRespVOPageResult; + } +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/enums/MoldPlanTypeEnum.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/enums/MoldPlanTypeEnum.java new file mode 100644 index 0000000000..964e28803d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/enums/MoldPlanTypeEnum.java @@ -0,0 +1,87 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.enums; + +import lombok.Getter; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 计划类型枚举 + * 1-点检 2-保养 + */ +@Getter +public enum MoldPlanTypeEnum { + + INSPECTION(1, "点检"), + MAINTENANCE(2, "保养"); + + private final Integer code; + private final String description; + + MoldPlanTypeEnum(Integer code, String description) { + this.code = code; + this.description = description; + } + + /** + * 根据code获取枚举 + */ + public static MoldPlanTypeEnum getByCode(Integer code) { + if (code == null) { + return null; + } + for (MoldPlanTypeEnum type : values()) { + if (type.getCode().equals(code)) { + return type; + } + } + return null; + } + + /** + * 根据code获取描述 + */ + public static String getDescriptionByCode(Integer code) { + MoldPlanTypeEnum type = getByCode(code); + return type != null ? type.getDescription() : "未知"; + } + + /** + * 检查code是否有效 + */ + public static boolean isValidCode(Integer code) { + return getByCode(code) != null; + } + + /** + * 获取所有code列表 + */ + public static List getAllCodes() { + return Arrays.stream(values()) + .map(MoldPlanTypeEnum::getCode) + .collect(Collectors.toList()); + } + + /** + * 获取所有描述列表 + */ + public static List getAllDescriptions() { + return Arrays.stream(values()) + .map(MoldPlanTypeEnum::getDescription) + .collect(Collectors.toList()); + } + + /** + * 获取code和描述的映射 + */ + public static Map getCodeDescriptionMap() { + Map map = new LinkedHashMap<>(); + for (MoldPlanTypeEnum type : values()) { + map.put(type.getCode(), type.getDescription()); + } + return map; + } +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementBatchUpdateReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementBatchUpdateReqVO.java new file mode 100644 index 0000000000..897e835d4a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementBatchUpdateReqVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +// 1. 新增请求VO +@Data +public class MoldTicketManagementBatchUpdateReqVO { + + @Schema(description = "工单ID列表,用逗号分隔", example = "1,2,3") + @NotBlank(message = "工单ID不能为空") + private String ids; + + @Schema(description = "作业状态", example = "2") + @NotNull(message = "作业状态不能为空") + private Integer jobStatus ; // 默认值为2 +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementPageReqVO.java new file mode 100644 index 0000000000..a4afba546b --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementPageReqVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 项目方案关联分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldTicketManagementPageReqVO extends PageParam { + + @Schema(description = "项目ID", example = "21368") + private Long taskId; + + @Schema(description = "方案ID", example = "20459") + private Long planId; + + @Schema(description = "单号") + private String planNo; + + @Schema(description = "设备名称", example = "张三") + private String moldName; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + private String planType; + + @Schema(description = "计划配置名称", example = "赵六") + private String configName; + + @Schema(description = "作业状态", example = "1") + private Integer jobStatus; + + @Schema(description = "作业结果") + private String jobResult; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "id集合导出用") + private String ids; + + + /** + * 作业开始时间 + */ + private String taskTime; + + /** + * 作业结束时间 + */ + private String taskEndTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementRespVO.java new file mode 100644 index 0000000000..e0c6fe1c9d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementRespVO.java @@ -0,0 +1,92 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.github.xiaoymin.knife4j.annotations.Ignore; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 项目方案关联 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldTicketManagementRespVO extends BaseDO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6566") + @ExcelProperty("id") + private Long id; + + @Schema(description = "任务Id", example = "21368") +// @ExcelProperty("项目ID") + private Long taskId; + + @Schema(description = "方案ID", example = "20459") +// @ExcelProperty("方案ID") + private Long planId; + + @Schema(description = "单号") + @ExcelProperty("单号") + private String planNo; + + @Schema(description = "设备名称", example = "张三") + @ExcelProperty("设备名称") + private String moldName; + + @Schema(description = "类型", example = "2") + @ExcelProperty("类型") + private String planType; + + @Schema(description = "计划配置名称", example = "赵六") + @ExcelProperty("计划配置名称") + private String configName; + + @Schema(description = "作业状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("作业状态") + private Integer jobStatus; + + @Schema(description = "作业结果") + @ExcelProperty("作业结果") + private Integer jobResult; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + + + /** + * 作业开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime taskTime; + + /** + * 作业结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime taskEndTime; + + + @Schema(description = "创建人名字") + @ExcelProperty("创建人名字") + private String creatorName; + + @Schema(description = "作业人") + private String operator; + @Schema(description = "作业人名称") + @ExcelProperty("作业人名称") + private String operatorName; + + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementSaveReqVO.java new file mode 100644 index 0000000000..e4c38de3b9 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketmanagement/vo/MoldTicketManagementSaveReqVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 项目方案关联新增/修改 Request VO") +@Data +public class MoldTicketManagementSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6566") + private Long id; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21368") + @NotNull(message = "项目ID不能为空") + private Long subjectId; + + @Schema(description = "方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20459") + @NotNull(message = "方案ID不能为空") + private Long planId; + + @Schema(description = "单号") + private String planNo; + + @Schema(description = "设备名称", example = "张三") + private String moldName; + + @Schema(description = "类型", example = "2") + private String planType; + + @Schema(description = "计划配置名称", example = "赵六") + private String configName; + + @Schema(description = "作业状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "作业状态不能为空") + private Integer jobStatus; + + @Schema(description = "作业结果") + private Integer jobResult; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/MoldTicketResultsController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/MoldTicketResultsController.java new file mode 100644 index 0000000000..84e160f28d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/MoldTicketResultsController.java @@ -0,0 +1,104 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketresults; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketresults.MoldTicketResultsDO; +import cn.iocoder.yudao.module.mes.service.moldticketresults.MoldTicketResultsService; + +@Tag(name = "管理后台 - 工单检验结果") +@RestController +@RequestMapping("/mes/mold-ticket-results") +@Validated +public class MoldTicketResultsController { + + @Resource + private MoldTicketResultsService moldticketResultsService; + + @PostMapping("/create") + @Operation(summary = "创建工单检验结果") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-results:create')") + public CommonResult createMoldTicketResults(@Valid @RequestBody MoldTicketResultsSaveReqVO createReqVO) { + return success(moldticketResultsService.createMoldTicketResults(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新工单检验结果") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-results:update')") + public CommonResult updateMoldTicketResults(@Valid @RequestBody MoldTicketResultsSaveReqVO updateReqVO) { + moldticketResultsService.updateMoldTicketResults(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除工单检验结果") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-results:delete')") + public CommonResult deleteMoldTicketResults(@RequestParam("id") Long id) { + moldticketResultsService.deleteMoldTicketResults(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得工单检验结果") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-results:query')") + public CommonResult getMoldTicketResults(@RequestParam("id") Long id) { + MoldTicketResultsDO moldticketResults = moldticketResultsService.getMoldTicketResults(id); + return success(BeanUtils.toBean(moldticketResults, MoldTicketResultsRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得工单检验结果分页") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-results:query')") + public CommonResult> getMoldTicketResultsPage(@Valid MoldTicketResultsPageReqVO pageReqVO) { + PageResult pageResult = moldticketResultsService.getMoldTicketResultsPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MoldTicketResultsRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出工单检验结果 Excel") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-results:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMoldTicketResultsExcel(@Valid MoldTicketResultsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = moldticketResultsService.getMoldTicketResultsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "工单检验结果.xls", "数据", MoldTicketResultsRespVO.class, + BeanUtils.toBean(list, MoldTicketResultsRespVO.class)); + } + + @PutMapping("/batchUpdate") + @Operation(summary = "批量更新工单检验结果") + @PreAuthorize("@ss.hasPermission('mes:mold-ticket-results:update')") + public CommonResult batchUpdateMoldTicketResults( + @Valid @RequestBody List updateReqVOList) { + moldticketResultsService.batchUpdateMoldTicketResults(updateReqVOList); + return success(true); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/enums/MoldJobResultEnum.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/enums/MoldJobResultEnum.java new file mode 100644 index 0000000000..7c9b3be922 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/enums/MoldJobResultEnum.java @@ -0,0 +1,109 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 作业结果枚举 + */ +@Getter +@AllArgsConstructor +public enum MoldJobResultEnum { + + /** + * 待完成 + */ + PENDING(0, "待完成"), + + /** + * 通过 + */ + PASS(1, "通过"), + + /** + * 不通过 + */ + FAIL(2, "不通过"); + + /** + * 结果编码 + */ + private final Integer code; + + /** + * 结果描述 + */ + private final String description; + + /** + * 根据编码获取枚举 + */ + public static MoldJobResultEnum getByCode(Integer code) { + if (code == null) { + return null; + } + for (MoldJobResultEnum status : values()) { + if (status.getCode().equals(code)) { + return status; + } + } + return null; + } + + /** + * 判断编码是否有效 + */ + public static boolean isValidCode(Integer code) { + return getByCode(code) != null; + } + + /** + * 获取所有编码 + */ + public static List getAllCodes() { + return Arrays.stream(values()) + .map(MoldJobResultEnum::getCode) + .collect(Collectors.toList()); + } + + /** + * 获取所有描述 + */ + public static List getAllDescriptions() { + return Arrays.stream(values()) + .map(MoldJobResultEnum::getDescription) + .collect(Collectors.toList()); + } + + /** + * 是否为待完成 + */ + public boolean isPending() { + return this == PENDING; + } + + /** + * 是否为通过 + */ + public boolean isPass() { + return this == PASS; + } + + /** + * 是否为不通过 + */ + public boolean isFail() { + return this == FAIL; + } + + /** + * 是否已完成(通过或不通过都算完成) + */ + public boolean isCompleted() { + return this == PASS || this == FAIL; + } +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsPageReqVO.java new file mode 100644 index 0000000000..6465eef9f9 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsPageReqVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工单检验结果分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldTicketResultsPageReqVO extends PageParam { + + @Schema(description = "检验项名称", example = "赵六") + private String inspectionItemName; + + @Schema(description = "检验方式") + private String inspectionMethod; + + @Schema(description = "判定基准") + private String judgmentCriteria; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer inspectionResult; + + @Schema(description = "图片路径") + private String images; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "检验时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] inspectionTime; + + @Schema(description = "工单管理Id") + private Long managementId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsRespVO.java new file mode 100644 index 0000000000..0963ec6869 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsRespVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 工单检验结果 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldTicketResultsRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30557") + @ExcelProperty("id") + private Long id; + + @Schema(description = "检验项名称", example = "赵六") + @ExcelProperty("检验项名称") + private String inspectionItemName; + + @Schema(description = "检验方式") + @ExcelProperty("检验方式") + private String inspectionMethod; + + @Schema(description = "判定基准") + @ExcelProperty("判定基准") + private String judgmentCriteria; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + @ExcelProperty("检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer inspectionResult; + + @Schema(description = "图片路径") + @ExcelProperty("图片路径") + private String images; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "检验时间") + @ExcelProperty("检验时间") + private LocalDateTime inspectionTime; + + @Schema(description = "工单管理Id") + private Long managementId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "模具Id") + private Long moldId; +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsSaveReqVO.java new file mode 100644 index 0000000000..dd26428993 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldticketresults/vo/MoldTicketResultsSaveReqVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 工单检验结果新增/修改 Request VO") +@Data +public class MoldTicketResultsSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30557") + private Long id; + + @Schema(description = "检验项名称", example = "赵六") + private String inspectionItemName; + + @Schema(description = "工单管理Id") + private Long managementId; + + @Schema(description = "检验方式") + private String inspectionMethod; + + @Schema(description = "判定基准") + private String judgmentCriteria; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer inspectionResult; + + @Schema(description = "图片路径") + private String images; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "检验时间") + private LocalDateTime inspectionTime; + + @Schema(description = "检验人") + private String inspector; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/SubjectMoldPlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/SubjectMoldPlanController.java new file mode 100644 index 0000000000..c166400b44 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/SubjectMoldPlanController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; +import cn.iocoder.yudao.module.mes.service.subjectmoldplan.SubjectMoldPlanService; + +@Tag(name = "管理后台 - 项目方案关联") +@RestController +@RequestMapping("/mes/subject-mold-plan") +@Validated +public class SubjectMoldPlanController { + + @Resource + private SubjectMoldPlanService subjectPlanService; + + @PostMapping("/create") + @Operation(summary = "创建项目方案关联") + @PreAuthorize("@ss.hasPermission('mes:subject-mold-plan:create')") + public CommonResult createSubjectMoldPlan(@Valid @RequestBody SubjectMoldPlanSaveReqVO createReqVO) { + return success(subjectPlanService.createSubjectMoldPlan(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新项目方案关联") + @PreAuthorize("@ss.hasPermission('mes:subject-mold-plan:update')") + public CommonResult updateSubjectMoldPlan(@Valid @RequestBody SubjectMoldPlanSaveReqVO updateReqVO) { + subjectPlanService.updateSubjectMoldPlan(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除项目方案关联") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:subject-mold-plan:delete')") + public CommonResult deleteSubjectMoldPlan(@RequestParam("id") Long id) { + subjectPlanService.deleteSubjectMoldPlan(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得项目方案关联") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:subject-mold-plan:query')") + public CommonResult getSubjectMoldPlan(@RequestParam("id") Long id) { + SubjectMoldPlanDO subjectPlan = subjectPlanService.getSubjectMoldPlan(id); + return success(BeanUtils.toBean(subjectPlan, SubjectMoldPlanRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得项目方案关联分页") + @PreAuthorize("@ss.hasPermission('mes:subject-mold-plan:query')") + public CommonResult> getSubjectMoldPlanPage(@Valid SubjectMoldPlanPageReqVO pageReqVO) { + PageResult pageResult = subjectPlanService.getSubjectMoldPlanPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SubjectMoldPlanRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出项目方案关联 Excel") + @PreAuthorize("@ss.hasPermission('mes:subject-mold-plan:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSubjectMoldPlanExcel(@Valid SubjectMoldPlanPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = subjectPlanService.getSubjectMoldPlanPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "项目方案关联.xls", "数据", SubjectMoldPlanRespVO.class, + BeanUtils.toBean(list, SubjectMoldPlanRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanPageReqVO.java new file mode 100644 index 0000000000..fc6057560d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanPageReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 项目方案关联分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectMoldPlanPageReqVO extends PageParam { + + @Schema(description = "项目ID", example = "21197") + private String subjectId; + + @Schema(description = "方案ID", example = "19398") + private String planId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanRespVO.java new file mode 100644 index 0000000000..20e165a15b --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 项目方案关联 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SubjectMoldPlanRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29831") + @ExcelProperty("id") + private Long id; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21197") + @ExcelProperty("项目ID") + private String subjectId; + + @Schema(description = "方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19398") + @ExcelProperty("方案ID") + private String planId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanSaveReqVO.java new file mode 100644 index 0000000000..32c5638a80 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectmoldplan/vo/SubjectMoldPlanSaveReqVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 项目方案关联新增/修改 Request VO") +@Data +public class SubjectMoldPlanSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29831") + private Long id; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21197") + @NotEmpty(message = "项目ID不能为空") + private String subjectId; + + @Schema(description = "方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19398") + @NotEmpty(message = "方案ID不能为空") + private String planId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldplanmaintenance/MoldPlanMaintenanceDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldplanmaintenance/MoldPlanMaintenanceDO.java new file mode 100644 index 0000000000..a386a41173 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldplanmaintenance/MoldPlanMaintenanceDO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 方案维护 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_plan_maintenance") +@KeySequence("mes_mold_plan_maintenance_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MoldPlanMaintenanceDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 名称 + */ + private String planName; + /** + * 类型 1-保养 2-维护 + */ + private int planType; + /** + * 描述 + */ + private String description; + + /** + * 项目id集合 + */ + @TableField(exist = false) + private List subjectIds; +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldsubject/MoldSubjectDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldsubject/MoldSubjectDO.java new file mode 100644 index 0000000000..c52d1ae06f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldsubject/MoldSubjectDO.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 维保项目 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_subject") +@KeySequence("mes_mold_subject_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MoldSubjectDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 项目编码 + */ + private String subjectCode; + /** + * 项目名称 + */ + private String subjectName; + /** + * 项目类型 + */ + private String subjectType; + /** + * 项目内容 + */ + private String subjectContent; + /** + * 标准 + */ + private String subjectStandard; + /** + * 是否启用 + * + * 枚举 {@link TODO infra_boolean_string 对应的类} + */ + private Boolean isEnable; + + /** + * 检验方式 + */ + private String inspectionMethod; + /** + * 值类型 + */ + private String valueType; + /** + * 判定基准 + */ + private String judgmentCriteria; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldtaskmanagement/MoldTaskManagementDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldtaskmanagement/MoldTaskManagementDO.java new file mode 100644 index 0000000000..d1694dd2e2 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldtaskmanagement/MoldTaskManagementDO.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.*; + +import java.time.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 模具类型 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_task_management") +@KeySequence("mes_mold_task_management_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MoldTaskManagementDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 名称 + */ + private String name; + /** + * 类型(1-点检 2-保养) + */ + private Integer taskType; + /** + * 模具列表 + */ + private String moldList; + /** + * 项目表单 + */ + private Long projectForm; + /** + * 起止开始日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDate startDate; + /** + * 起止结束日期 + */ + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDate endDate; + /** + * cron表达式 + */ + private String cronExpression; + /** + * 可操作人 + */ + private String operableUsers; + /** + * 是否启用 + */ + private Boolean enabled; + + @TableField(exist = false) + private String projectFormName; + + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketmanagement/MoldTicketManagementDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketmanagement/MoldTicketManagementDO.java new file mode 100644 index 0000000000..98f8ba13e2 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketmanagement/MoldTicketManagementDO.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.*; + +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 工单管理 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_ticket_management") +@KeySequence("mes_mold_ticket_management_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MoldTicketManagementDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 任务ID + */ + private Long taskId; + /** + * 方案ID + */ + private Long planId; + /** + * 单号 + */ + private String planNo; + /** + * 模具名称 + */ + private String moldName; + /** + * 类型(1-点检 2-保养) + */ + private int planType; + /** + * 计划配置名称 + */ + private String configName; + /** + * 作业状态 0-待完成 1-已完成 2-已取消 + */ + private Integer jobStatus; + /** + * 作业结果 0-待完成 1-通过 2-不通过 + */ + private int jobResult; + /** + * 作业人 + */ + private String operator; + /** + * 作业开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime taskTime; + + /** + * 作业结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime taskEndTime; + + + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketresults/MoldTicketResultsDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketresults/MoldTicketResultsDO.java new file mode 100644 index 0000000000..847a6c85d4 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldticketresults/MoldTicketResultsDO.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.moldticketresults; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 工单检验结果 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_ticket_results") +@KeySequence("mes_mold_ticket_results_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MoldTicketResultsDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 检验项名称 + */ + private String inspectionItemName; + /** + * 检验方式 + */ + private String inspectionMethod; + /** + * 判定基准 + */ + private String judgmentCriteria; + /** + * 检验结果 0-待检测 1-检测通过 2-检测不通过 + */ + private Integer inspectionResult; + /** + * 图片路径 + */ + private String images; + /** + * 备注 + */ + private String remark; + /** + * 检验时间 + */ + private LocalDateTime inspectionTime; + /** + * 检验人 + */ + private Long managementId; + /** + * 模具id + */ + private Long moldId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/subjectmoldplan/SubjectMoldPlanDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/subjectmoldplan/SubjectMoldPlanDO.java new file mode 100644 index 0000000000..220b9e1a1e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/subjectmoldplan/SubjectMoldPlanDO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 项目方案关联 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_subject_mold_plan") +@KeySequence("mes_subject_mold_plan_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SubjectMoldPlanDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 项目ID + */ + private Long subjectId; + /** + * 方案ID + */ + private Long planId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldplanmaintenance/MoldPlanMaintenanceMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldplanmaintenance/MoldPlanMaintenanceMapper.java new file mode 100644 index 0000000000..e14795434b --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldplanmaintenance/MoldPlanMaintenanceMapper.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.moldplanmaintenance; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance.vo.*; + +/** + * 方案维护 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface MoldPlanMaintenanceMapper extends BaseMapperX { + + default PageResult selectPage(MoldPlanMaintenancePageReqVO reqVO) { + + LambdaQueryWrapperX moldplanMaintenanceDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + moldplanMaintenanceDOLambdaQueryWrapperX + .likeIfPresent(MoldPlanMaintenanceDO::getPlanName, reqVO.getPlanName()) + .eqIfPresent(MoldPlanMaintenanceDO::getPlanType, reqVO.getPlanType()) + .eqIfPresent(MoldPlanMaintenanceDO::getDescription, reqVO.getDescription()) + .betweenIfPresent(MoldPlanMaintenanceDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MoldPlanMaintenanceDO::getCreateTime); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + moldplanMaintenanceDOLambdaQueryWrapperX.in(MoldPlanMaintenanceDO::getId, idList); + } + PageResult moldplanMaintenanceDOPageResult = selectPage(reqVO, moldplanMaintenanceDOLambdaQueryWrapperX); + + + return moldplanMaintenanceDOPageResult; + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldsubject/MoldSubjectMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldsubject/MoldSubjectMapper.java new file mode 100644 index 0000000000..bc2c5420f6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldsubject/MoldSubjectMapper.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.moldsubject; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.*; + +/** + * 维保项目 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface MoldSubjectMapper extends BaseMapperX { + + default PageResult selectPage(MoldSubjectPageReqVO reqVO) { + + + LambdaQueryWrapperX moldSubjectDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + moldSubjectDOLambdaQueryWrapperX + .likeIfPresent(MoldSubjectDO::getInspectionMethod, reqVO.getInspectionMethod()) + .likeIfPresent(MoldSubjectDO::getValueType, reqVO.getValueType()) + .likeIfPresent(MoldSubjectDO::getJudgmentCriteria, reqVO.getJudgmentCriteria()) + .likeIfPresent(MoldSubjectDO::getSubjectCode, reqVO.getSubjectCode()) + .likeIfPresent(MoldSubjectDO::getSubjectName, reqVO.getSubjectName()) + .eqIfPresent(MoldSubjectDO::getSubjectType, reqVO.getSubjectType()) + .eqIfPresent(MoldSubjectDO::getSubjectContent, reqVO.getSubjectContent()) + .eqIfPresent(MoldSubjectDO::getSubjectStandard, reqVO.getSubjectStandard()) + .eqIfPresent(MoldSubjectDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(MoldSubjectDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MoldSubjectDO::getCreateTime); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + moldSubjectDOLambdaQueryWrapperX.in(MoldSubjectDO::getId, idList); + } + + return selectPage(reqVO, moldSubjectDOLambdaQueryWrapperX); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldtaskmanagement/MoldTaskManagementMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldtaskmanagement/MoldTaskManagementMapper.java new file mode 100644 index 0000000000..e8a8299d6c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldtaskmanagement/MoldTaskManagementMapper.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.moldtaskmanagement; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement.MoldTaskManagementDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.*; + +/** + * 模具类型 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface MoldTaskManagementMapper extends BaseMapperX { + + default PageResult selectPage(MoldTaskManagementPageReqVO reqVO) { + + + LambdaQueryWrapperX moldtaskManagementDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + moldtaskManagementDOLambdaQueryWrapperX + .likeIfPresent(MoldTaskManagementDO::getName, reqVO.getName()) + .eqIfPresent(MoldTaskManagementDO::getTaskType, reqVO.getTaskType()) + .eqIfPresent(MoldTaskManagementDO::getMoldList, reqVO.getMoldList()) + .eqIfPresent(MoldTaskManagementDO::getProjectForm, reqVO.getProjectForm()) + .betweenIfPresent(MoldTaskManagementDO::getStartDate, reqVO.getStartDate()) + .betweenIfPresent(MoldTaskManagementDO::getEndDate, reqVO.getEndDate()) + .eqIfPresent(MoldTaskManagementDO::getCronExpression, reqVO.getCronExpression()) + .eqIfPresent(MoldTaskManagementDO::getOperableUsers, reqVO.getOperableUsers()) + .eqIfPresent(MoldTaskManagementDO::getEnabled, reqVO.getEnabled()) + .betweenIfPresent(MoldTaskManagementDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MoldTaskManagementDO::getId); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + moldtaskManagementDOLambdaQueryWrapperX.in(MoldTaskManagementDO::getId, idList); + } + + + return selectPage(reqVO, moldtaskManagementDOLambdaQueryWrapperX); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketmanagement/MoldTicketManagementMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketmanagement/MoldTicketManagementMapper.java new file mode 100644 index 0000000000..9fc3001949 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketmanagement/MoldTicketManagementMapper.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.moldticketmanagement; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement.MoldTaskManagementDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo.*; +import org.apache.ibatis.annotations.Param; + +/** + * 项目方案关联 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface MoldTicketManagementMapper extends BaseMapperX { + + default PageResult selectPage(MoldTicketManagementPageReqVO reqVO) { + + LambdaQueryWrapperX ticketManagementDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + ticketManagementDOLambdaQueryWrapperX + .eqIfPresent(MoldTicketManagementDO::getTaskId, reqVO.getTaskId()) + .eqIfPresent(MoldTicketManagementDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(MoldTicketManagementDO::getPlanNo, reqVO.getPlanNo()) + .likeIfPresent(MoldTicketManagementDO::getMoldName, reqVO.getMoldName()) + .eqIfPresent(MoldTicketManagementDO::getPlanType, reqVO.getPlanType()) + .likeIfPresent(MoldTicketManagementDO::getConfigName, reqVO.getConfigName()) + .eqIfPresent(MoldTicketManagementDO::getJobStatus, reqVO.getJobStatus()) + .eqIfPresent(MoldTicketManagementDO::getJobResult, reqVO.getJobResult()) + .orderByDesc(MoldTicketManagementDO::getCreateTime); + + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + ticketManagementDOLambdaQueryWrapperX.in(MoldTicketManagementDO::getId, idList); + } + + + return selectPage(reqVO,ticketManagementDOLambdaQueryWrapperX); + } + + + /** + * 批量更新作业状态 + * + * @param idList 工单ID列表 + * @param jobStatus 作业状态 + * @return 更新记录数 + */ + int batchUpdateJobStatus(@Param("idList") List idList, + @Param("jobStatus") Integer jobStatus); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketresults/MoldTicketResultsMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketresults/MoldTicketResultsMapper.java new file mode 100644 index 0000000000..4511b61bd7 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldticketresults/MoldTicketResultsMapper.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.moldticketresults; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketresults.MoldTicketResultsDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.vo.*; +import org.apache.ibatis.annotations.Param; + +/** + * 工单检验结果 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface MoldTicketResultsMapper extends BaseMapperX { + + default PageResult selectPage(MoldTicketResultsPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(MoldTicketResultsDO::getInspectionItemName, reqVO.getInspectionItemName()) + .eqIfPresent(MoldTicketResultsDO::getInspectionMethod, reqVO.getInspectionMethod()) + .eqIfPresent(MoldTicketResultsDO::getJudgmentCriteria, reqVO.getJudgmentCriteria()) + .eqIfPresent(MoldTicketResultsDO::getInspectionResult, reqVO.getInspectionResult()) + .eqIfPresent(MoldTicketResultsDO::getImages, reqVO.getImages()) + .eqIfPresent(MoldTicketResultsDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MoldTicketResultsDO::getInspectionTime, reqVO.getInspectionTime()) + .eqIfPresent(MoldTicketResultsDO::getManagementId, reqVO.getManagementId()) + .betweenIfPresent(MoldTicketResultsDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MoldTicketResultsDO::getId)); + } + + List findByDeviceIdAndPlanType(@Param("deviceId") Long deviceId,@Param("planType") Integer planType); +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/subjectmoldplan/SubjectMoldPlanMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/subjectmoldplan/SubjectMoldPlanMapper.java new file mode 100644 index 0000000000..ef0a613b6d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/subjectmoldplan/SubjectMoldPlanMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.subjectmoldplan; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan.vo.*; + +/** + * 项目方案关联 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface SubjectMoldPlanMapper extends BaseMapperX { + + default PageResult selectPage(SubjectMoldPlanPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SubjectMoldPlanDO::getSubjectId, reqVO.getSubjectId()) + .eqIfPresent(SubjectMoldPlanDO::getPlanId, reqVO.getPlanId()) + .betweenIfPresent(SubjectMoldPlanDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SubjectMoldPlanDO::getId)); + } + + /** + * 物理删除指定计划的关联 + * + * @param planId 计划ID + */ + @Delete("DELETE FROM besure.mes_subject_mold_plan WHERE plan_id = #{planId}") + void deleteByPlanId(Long planId); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceService.java new file mode 100644 index 0000000000..736e2b552a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceService.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.mes.service.moldplanmaintenance; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; + +/** + * 方案维护 Service 接口 + * + * @author 内蒙必硕 + */ +public interface MoldPlanMaintenanceService { + + /** + * 创建方案维护 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMoldPlanMaintenance(@Valid MoldPlanMaintenanceSaveReqVO createReqVO); + + /** + * 更新方案维护 + * + * @param updateReqVO 更新信息 + */ + void updateMoldPlanMaintenance(@Valid MoldPlanMaintenanceSaveReqVO updateReqVO); + + /** + * 删除方案维护 + * + * @param id 编号 + */ + void deleteMoldPlanMaintenance( List idList); + + /** + * 获得方案维护 + * + * @param id 编号 + * @return 方案维护 + */ + MoldPlanMaintenanceDO getMoldPlanMaintenance(Long id); + + /** + * 获得方案维护分页 + * + * @param pageReqVO 分页查询 + * @return 方案维护分页 + */ + PageResult getMoldPlanMaintenancePage(MoldPlanMaintenancePageReqVO pageReqVO); + + List getSubjectList(Long id); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceServiceImpl.java new file mode 100644 index 0000000000..93410d4d96 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldplanmaintenance/MoldPlanMaintenanceServiceImpl.java @@ -0,0 +1,192 @@ +package cn.iocoder.yudao.module.mes.service.moldplanmaintenance; + +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; +import cn.iocoder.yudao.module.mes.dal.mysql.moldsubject.MoldSubjectMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.subjectmoldplan.SubjectMoldPlanMapper; +import cn.iocoder.yudao.module.mes.service.moldplanmaintenance.MoldPlanMaintenanceService; +import cn.iocoder.yudao.module.mes.service.subjectmoldplan.SubjectMoldPlanService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.mes.controller.admin.moldplanmaintenance.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.moldplanmaintenance.MoldPlanMaintenanceMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 方案维护 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class MoldPlanMaintenanceServiceImpl implements MoldPlanMaintenanceService { + + @Resource + private MoldPlanMaintenanceMapper moldplanMaintenanceMapper; + @Resource + private SubjectMoldPlanMapper subjectMoldPlanMapper; + + @Resource + private MoldSubjectMapper moldSubjectMapper; + + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createMoldPlanMaintenance(MoldPlanMaintenanceSaveReqVO createReqVO) { + // 插入 + MoldPlanMaintenanceDO moldplanMaintenance = BeanUtils.toBean(createReqVO, MoldPlanMaintenanceDO.class); + moldplanMaintenanceMapper.insert(moldplanMaintenance); + + if (StringUtils.isNotBlank(createReqVO.getSubjectIdS())){ + + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream( createReqVO.getSubjectIdS().split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + + + //插入关联表 + insertSubjectMoldPlan(moldplanMaintenance.getId(),idList); + } + // 返回 + return moldplanMaintenance.getId(); + } + + private void insertSubjectMoldPlan(Long id, List idList) { + + List subjectMoldPlanDOArrayList = new ArrayList<>(); + for (Long subjectId : idList) { + SubjectMoldPlanDO subjectMoldPlanDO = new SubjectMoldPlanDO(); + subjectMoldPlanDO.setPlanId(id); + subjectMoldPlanDO.setSubjectId(subjectId); + subjectMoldPlanDOArrayList.add(subjectMoldPlanDO); + } + subjectMoldPlanMapper.insertBatch(subjectMoldPlanDOArrayList); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateMoldPlanMaintenance(MoldPlanMaintenanceSaveReqVO updateReqVO) { + // 校验存在 + validateMoldPlanMaintenanceExists(updateReqVO.getId()); + // 更新 + MoldPlanMaintenanceDO updateObj = BeanUtils.toBean(updateReqVO, MoldPlanMaintenanceDO.class); + moldplanMaintenanceMapper.updateById(updateObj); + + + if (StringUtils.isNotBlank(updateReqVO.getSubjectIdS())) { + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream( updateReqVO.getSubjectIdS().split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + //更新关联表 + updateSubjectMoldPlan(updateObj.getId(),idList); + } + } + + private void updateSubjectMoldPlan(Long id, List idList) { + + subjectMoldPlanMapper.deleteByPlanId(id); + List subjectMoldPlanDOArrayList = new ArrayList<>(); + for (Long subjectId : idList) { + SubjectMoldPlanDO subjectMoldPlanDO = new SubjectMoldPlanDO(); + subjectMoldPlanDO.setPlanId(id); + subjectMoldPlanDO.setSubjectId(subjectId); + subjectMoldPlanDOArrayList.add(subjectMoldPlanDO); + } + subjectMoldPlanMapper.insertBatch(subjectMoldPlanDOArrayList); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteMoldPlanMaintenance( List idList) { + for (Long id : idList) { + // 校验存在 + validateMoldPlanMaintenanceExists(id); + + } + // 删除 + moldplanMaintenanceMapper.deleteByIds(idList); + //删除关联表数据 + deleteSubjectMoldPlan(idList); + + } + + private void deleteSubjectMoldPlan(List idList) { + for (Long id : idList) { + if (id != null ){ + subjectMoldPlanMapper.delete(Wrappers.lambdaQuery() + .eq(SubjectMoldPlanDO::getPlanId, id)); + } + } + + } + + private void validateMoldPlanMaintenanceExists(Long id) { + if (moldplanMaintenanceMapper.selectById(id) == null) { + throw exception(PLAN_MAINTENANCE_NOT_EXISTS); + } + } + + @Override + public MoldPlanMaintenanceDO getMoldPlanMaintenance(Long id) { + return moldplanMaintenanceMapper.selectById(id); + } + + @Override + public PageResult getMoldPlanMaintenancePage(MoldPlanMaintenancePageReqVO pageReqVO) { + PageResult moldplanMaintenanceDOPageResult = moldplanMaintenanceMapper.selectPage(pageReqVO); + for (MoldPlanMaintenanceDO moldplanMaintenanceDO : moldplanMaintenanceDOPageResult.getList()) { + List ids = new ArrayList<>(); + List subjectMoldPlanDOList = subjectMoldPlanMapper.selectList(Wrappers.lambdaQuery() + .eq(SubjectMoldPlanDO::getPlanId, moldplanMaintenanceDO.getId())); + for (SubjectMoldPlanDO subjectMoldPlanDO : subjectMoldPlanDOList) { + ids.add(subjectMoldPlanDO.getSubjectId()); + } + moldplanMaintenanceDO.setSubjectIds(ids); + } + + + return moldplanMaintenanceDOPageResult; + } + + @Override + public List getSubjectList(Long id) { + if (id == null ){ + throw exception(SUBJECT_ID_NOT_EXISTS); + } + //查询对应的设备列表 + List moldSubjectDOList = new ArrayList<>(); + List subjectMoldPlanDOList = subjectMoldPlanMapper.selectList(Wrappers.lambdaQuery() + .eq(SubjectMoldPlanDO::getPlanId, id)); + for (SubjectMoldPlanDO subjectMoldPlanDO : subjectMoldPlanDOList) { + MoldSubjectDO moldSubjectDO = moldSubjectMapper.selectById(subjectMoldPlanDO.getSubjectId()); + if (moldSubjectDO!=null){ + moldSubjectDOList.add(moldSubjectDO); + } + } + + return moldSubjectDOList; + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectService.java new file mode 100644 index 0000000000..69c0aeb4cb --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.service.moldsubject; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 维保项目 Service 接口 + * + * @author 内蒙必硕 + */ +public interface MoldSubjectService { + + /** + * 创建维保项目 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMoldSubject(@Valid MoldSubjectSaveReqVO createReqVO); + + /** + * 更新维保项目 + * + * @param updateReqVO 更新信息 + */ + void updateMoldSubject(@Valid MoldSubjectSaveReqVO updateReqVO); + + /** + * 删除维保项目 + * + * @param id 编号 + */ + void deleteMoldSubject(List idList); + + /** + * 获得维保项目 + * + * @param id 编号 + * @return 维保项目 + */ + MoldSubjectDO getMoldSubject(Long id); + + /** + * 获得维保项目分页 + * + * @param pageReqVO 分页查询 + * @return 维保项目分页 + */ + PageResult getMoldSubjectPage(MoldSubjectPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectServiceImpl.java new file mode 100644 index 0000000000..37993f26b8 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldsubject/MoldSubjectServiceImpl.java @@ -0,0 +1,101 @@ +package cn.iocoder.yudao.module.mes.service.moldsubject; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import cn.iocoder.yudao.module.mes.dal.mysql.moldsubject.MoldSubjectMapper; +import cn.iocoder.yudao.module.mes.service.moldsubject.MoldSubjectService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_MODEL_CODE_EXISTS; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 维保项目 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class MoldSubjectServiceImpl implements MoldSubjectService { + + @Resource + private MoldSubjectMapper moldSubjectMapper; + + @Override + public Long createMoldSubject(MoldSubjectSaveReqVO createReqVO) { + + validateCodeOnly(createReqVO.getSubjectCode()); + // 插入 + MoldSubjectDO moldSubject = BeanUtils.toBean(createReqVO, MoldSubjectDO.class); + moldSubjectMapper.insert(moldSubject); + // 返回 + return moldSubject.getId(); + } + + private void validateCodeOnly( String code) { + if (moldSubjectMapper.exists(Wrappers.lambdaQuery() + .eq(MoldSubjectDO::getSubjectCode, code))) { + throw exception(SUBJECT_EXISTS); + } + } + + @Override + public void updateMoldSubject(MoldSubjectSaveReqVO updateReqVO) { + // 校验存在 + validateMoldSubjectExists(updateReqVO.getId()); + + //编码重复判断 + Long count = moldSubjectMapper.selectCount(new LambdaQueryWrapper() + .eq(MoldSubjectDO::getSubjectCode, updateReqVO.getSubjectCode()) + .ne(MoldSubjectDO::getId, updateReqVO.getId()) + ); + if (count > 0) { + throw exception(SUBJECT_EXISTS); + } + // 更新 + MoldSubjectDO updateObj = BeanUtils.toBean(updateReqVO, MoldSubjectDO.class); + moldSubjectMapper.updateById(updateObj); + } + + @Override + public void deleteMoldSubject(List idList) { + + for (Long id : idList) { + // 校验存在 + validateMoldSubjectExists(id); + } + + // 删除 + moldSubjectMapper.deleteByIds(idList); + } + + private void validateMoldSubjectExists(Long id) { + if (moldSubjectMapper.selectById(id) == null) { + throw exception(DV_SUBJECT_NOT_EXISTS); + } + } + + @Override + public MoldSubjectDO getMoldSubject(Long id) { + return moldSubjectMapper.selectById(id); + } + + @Override + public PageResult getMoldSubjectPage(MoldSubjectPageReqVO pageReqVO) { + return moldSubjectMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java new file mode 100644 index 0000000000..5f1023103d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.service.moldtaskmanagement; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement.MoldTaskManagementDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 设备类型 Service 接口 + * + * @author 内蒙必硕 + */ +public interface MoldTaskManagementService { + + /** + * 创建设备类型 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMoldTaskManagement(@Valid MoldTaskManagementSaveReqVO createReqVO); + + /** + * 更新设备类型 + * + * @param updateReqVO 更新信息 + */ + void updateMoldTaskManagement(@Valid MoldTaskManagementSaveReqVO updateReqVO); + + /** + * 删除设备类型 + * + * @param id 编号 + */ + void deleteMoldTaskManagement(List idList ); + + /** + * 获得设备类型 + * + * @param id 编号 + * @return 设备类型 + */ + MoldTaskManagementDO getMoldTaskManagement(Long id); + + /** + * 获得设备类型分页 + * + * @param pageReqVO 分页查询 + * @return 设备类型分页 + */ + PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO); + + void createMoldTicket(Long id); +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java new file mode 100644 index 0000000000..0fed43f2c7 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java @@ -0,0 +1,178 @@ +package cn.iocoder.yudao.module.mes.service.moldtaskmanagement; + +import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketresults.MoldTicketResultsDO; +import cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.dvsubject.DvSubjectMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.moldplanmaintenance.MoldPlanMaintenanceMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.subjectplan.SubjectPlanMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.moldticketmanagement.MoldTicketManagementMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.moldticketresults.MoldTicketResultsMapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.mes.controller.admin.moldtaskmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldtaskmanagement.MoldTaskManagementDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.moldtaskmanagement.MoldTaskManagementMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 设备类型 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class MoldTaskManagementServiceImpl implements MoldTaskManagementService { + + @Resource + private MoldTaskManagementMapper moldtaskManagementMapper; + + @Resource + private MoldTicketManagementMapper moldticketManagementMapper; + + @Resource + private MoldTicketResultsMapper moldticketResultsMapper; + + @Resource + private MoldMapper moldMapper; + + @Resource + private MoldPlanMaintenanceMapper moldplanMaintenanceMapper; + + @Resource + private SubjectPlanMapper subjectPlanMapper; + + + @Resource + private DvSubjectMapper dvSubjectMapper; + + @Override + public Long createMoldTaskManagement(MoldTaskManagementSaveReqVO createReqVO) { + // 插入 + MoldTaskManagementDO moldtaskManagement = BeanUtils.toBean(createReqVO, MoldTaskManagementDO.class); + moldtaskManagementMapper.insert(moldtaskManagement); + // 返回 + return moldtaskManagement.getId(); + } + + @Override + public void updateMoldTaskManagement(MoldTaskManagementSaveReqVO updateReqVO) { + // 校验存在 + validateMoldTaskManagementExists(updateReqVO.getId()); + // 更新 + MoldTaskManagementDO updateObj = BeanUtils.toBean(updateReqVO, MoldTaskManagementDO.class); + moldtaskManagementMapper.updateById(updateObj); + } + + @Override + public void deleteMoldTaskManagement(List idList ) { + for (Long id : idList) { + // 校验存在 + validateMoldTaskManagementExists(id); + } + // 删除 + moldtaskManagementMapper.deleteByIds(idList); + } + + private void validateMoldTaskManagementExists(Long id) { + if (moldtaskManagementMapper.selectById(id) == null) { + throw exception(TASK_MANAGEMENT_NOT_EXISTS); + } + } + + @Override + public MoldTaskManagementDO getMoldTaskManagement(Long id) { + return moldtaskManagementMapper.selectById(id); + } + + @Override + public PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) { + + PageResult moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO); + for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) { + MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(moldtaskManagementDO.getProjectForm()); + moldtaskManagementDO.setProjectFormName(moldplanMaintenanceDO.getPlanName()); + } + + + return moldtaskManagementDOPageResult; + } + + @Override + public void createMoldTicket(Long id) { + + List moldticketManagementDOS = new ArrayList<>(); + + //检验数据是否存在 + validateMoldTaskManagementExists(id); + MoldTaskManagementDO moldtaskManagementDO = moldtaskManagementMapper.selectById(id); + if (moldtaskManagementDO == null){ + throw exception(TASK_MANAGEMENT_NOT_EXISTS); + } + + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(moldtaskManagementDO.getMoldList().split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + + + for (Long moldId : idList) { + MoldTicketManagementDO moldticketManagementDO = new MoldTicketManagementDO(); + MoldDO moldDO = moldMapper.selectById(moldId); + moldticketManagementDO.setTaskId(moldtaskManagementDO.getId()); + moldticketManagementDO.setPlanNo(generatePrefixedOrderNo()); + moldticketManagementDO.setPlanId(moldtaskManagementDO.getProjectForm()); + moldticketManagementDO.setMoldName(moldDO.getName()); + moldticketManagementDO.setPlanType(moldtaskManagementDO.getTaskType()); + moldticketManagementDO.setConfigName(moldtaskManagementDO.getName()); + moldticketManagementDO.setTaskEndTime(moldtaskManagementDO.getEndDate().atStartOfDay()); + moldticketManagementMapper.insert(moldticketManagementDO); + + List dvSubjectDOList = new ArrayList<>(); + List subjectPlanDOList = subjectPlanMapper.selectList(Wrappers.lambdaQuery().eq(SubjectPlanDO::getPlanId, moldticketManagementDO.getPlanId())); + for (SubjectPlanDO subjectPlanDO : subjectPlanDOList) { + DvSubjectDO dvSubjectDO = dvSubjectMapper.selectById(subjectPlanDO.getSubjectId()); + + MoldTicketResultsDO moldticketResultsDO = new MoldTicketResultsDO(); + moldticketResultsDO.setInspectionItemName(dvSubjectDO.getSubjectName()); + moldticketResultsDO.setInspectionMethod(dvSubjectDO.getInspectionMethod()); + moldticketResultsDO.setJudgmentCriteria(dvSubjectDO.getJudgmentCriteria()); + moldticketResultsDO.setManagementId(moldticketManagementDO.getId()); + moldticketResultsDO.setMoldId(moldId); + moldticketResultsMapper.insert(moldticketResultsDO); + } + + } + + } + + + /** + * 带前缀的时间戳单号 + */ + public static String generatePrefixedOrderNo() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String date = sdf.format(new Date()); + String randomNum = String.format("%06d", new Random().nextInt(1000000)); + return "E" + date + randomNum; + } +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementService.java new file mode 100644 index 0000000000..454271fbc5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.service.moldticketmanagement; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 项目方案关联 Service 接口 + * + * @author 内蒙必硕 + */ +public interface MoldTicketManagementService { + + /** + * 创建项目方案关联 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMoldTicketManagement(@Valid MoldTicketManagementSaveReqVO createReqVO); + + /** + * 更新项目方案关联 + * + * @param updateReqVO 更新信息 + */ + void updateMoldTicketManagement(@Valid MoldTicketManagementSaveReqVO updateReqVO); + + /** + * 删除项目方案关联 + * + * @param id 编号 + */ + void deleteMoldTicketManagement(Long id); + + /** + * 获得项目方案关联 + * + * @param id 编号 + * @return 项目方案关联 + */ + MoldTicketManagementDO getMoldTicketManagement(Long id); + + /** + * 获得项目方案关联分页 + * + * @param pageReqVO 分页查询 + * @return 项目方案关联分页 + */ + PageResult getMoldTicketManagementPage(MoldTicketManagementPageReqVO pageReqVO); + + void batchUpdateJobStatus(@Valid MoldTicketManagementBatchUpdateReqVO reqVO); +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementServiceImpl.java new file mode 100644 index 0000000000..3b59884286 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketmanagement/MoldTicketManagementServiceImpl.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.mes.service.moldticketmanagement; + +import cn.iocoder.yudao.module.mes.service.moldticketmanagement.MoldTicketManagementService; +import com.alibaba.excel.util.StringUtils; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.mes.controller.admin.moldticketmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.moldticketmanagement.MoldTicketManagementMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 项目方案关联 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class MoldTicketManagementServiceImpl implements MoldTicketManagementService { + + @Resource + private MoldTicketManagementMapper moldticketManagementMapper; + + @Override + public Long createMoldTicketManagement(MoldTicketManagementSaveReqVO createReqVO) { + // 插入 + MoldTicketManagementDO moldticketManagement = BeanUtils.toBean(createReqVO, MoldTicketManagementDO.class); + moldticketManagementMapper.insert(moldticketManagement); + // 返回 + return moldticketManagement.getId(); + } + + @Override + public void updateMoldTicketManagement(MoldTicketManagementSaveReqVO updateReqVO) { + // 校验存在 + validateMoldTicketManagementExists(updateReqVO.getId()); + // 更新 + MoldTicketManagementDO updateObj = BeanUtils.toBean(updateReqVO, MoldTicketManagementDO.class); + moldticketManagementMapper.updateById(updateObj); + } + + @Override + public void deleteMoldTicketManagement(Long id) { + // 校验存在 + validateMoldTicketManagementExists(id); + // 删除 + moldticketManagementMapper.deleteById(id); + } + + private void validateMoldTicketManagementExists(Long id) { + if (moldticketManagementMapper.selectById(id) == null) { + throw exception(TICKET_MANAGEMENT_NOT_EXISTS); + } + } + + @Override + public MoldTicketManagementDO getMoldTicketManagement(Long id) { + return moldticketManagementMapper.selectById(id); + } + + @Override + public PageResult getMoldTicketManagementPage(MoldTicketManagementPageReqVO pageReqVO) { + return moldticketManagementMapper.selectPage(pageReqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchUpdateJobStatus(MoldTicketManagementBatchUpdateReqVO reqVO) { + // 1. 解析ID列表 + List idList = parseIds(reqVO.getIds()); + if (idList.isEmpty()) { + throw exception(TICKET_MANAGEMENT_NOT_EXISTS); + } + + // 2. 批量更新 + moldticketManagementMapper.batchUpdateJobStatus(idList, reqVO.getJobStatus()); + } + + /** + * 解析逗号分隔的ID字符串 + */ + private List parseIds(String ids) { + if (StringUtils.isBlank(ids)) { + return Collections.emptyList(); + } + + return Arrays.stream(ids.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .distinct() + .collect(Collectors.toList()); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsService.java new file mode 100644 index 0000000000..a3553c0ddb --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsService.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.mes.service.moldticketresults; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketresults.MoldTicketResultsDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 工单检验结果 Service 接口 + * + * @author 内蒙必硕 + */ +public interface MoldTicketResultsService { + + /** + * 创建工单检验结果 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMoldTicketResults(@Valid MoldTicketResultsSaveReqVO createReqVO); + + /** + * 更新工单检验结果 + * + * @param updateReqVO 更新信息 + */ + void updateMoldTicketResults(@Valid MoldTicketResultsSaveReqVO updateReqVO); + + /** + * 删除工单检验结果 + * + * @param id 编号 + */ + void deleteMoldTicketResults(Long id); + + /** + * 获得工单检验结果 + * + * @param id 编号 + * @return 工单检验结果 + */ + MoldTicketResultsDO getMoldTicketResults(Long id); + + /** + * 获得工单检验结果分页 + * + * @param pageReqVO 分页查询 + * @return 工单检验结果分页 + */ + PageResult getMoldTicketResultsPage(MoldTicketResultsPageReqVO pageReqVO); + + /** + * 工单检验结果批量更新 + * + * @param updateReqVOList 批量更新 + * @return 工单检验结果批量更新 + */ + void batchUpdateMoldTicketResults(@Valid List updateReqVOList); +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsServiceImpl.java new file mode 100644 index 0000000000..0c60ec24e3 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldticketresults/MoldTicketResultsServiceImpl.java @@ -0,0 +1,182 @@ +package cn.iocoder.yudao.module.mes.service.moldticketresults; + +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.enums.MoldJobResultEnum; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; +import cn.iocoder.yudao.module.mes.dal.mysql.moldticketmanagement.MoldTicketManagementMapper; +import cn.iocoder.yudao.module.mes.service.moldticketresults.MoldTicketResultsService; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketresults.MoldTicketResultsDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.moldticketresults.MoldTicketResultsMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 工单检验结果 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class MoldTicketResultsServiceImpl implements MoldTicketResultsService { + + @Resource + private MoldTicketResultsMapper moldticketResultsMapper; + + @Resource + @Lazy + private MoldTicketManagementMapper moldticketManagementMapper; + + + @Override + public Long createMoldTicketResults(MoldTicketResultsSaveReqVO createReqVO) { + // 插入 + MoldTicketResultsDO moldticketResults = BeanUtils.toBean(createReqVO, MoldTicketResultsDO.class); + moldticketResultsMapper.insert(moldticketResults); + // 返回 + return moldticketResults.getId(); + } + + @Override + public void updateMoldTicketResults(MoldTicketResultsSaveReqVO updateReqVO) { + // 校验存在 + validateMoldTicketResultsExists(updateReqVO.getId()); + // 更新 + MoldTicketResultsDO updateObj = BeanUtils.toBean(updateReqVO, MoldTicketResultsDO.class); + moldticketResultsMapper.updateById(updateObj); + } + + @Override + public void deleteMoldTicketResults(Long id) { + // 校验存在 + validateMoldTicketResultsExists(id); + // 删除 + moldticketResultsMapper.deleteById(id); + } + + private void validateMoldTicketResultsExists(Long id) { + if (moldticketResultsMapper.selectById(id) == null) { + throw exception(TICKET_RESULTS_NOT_EXISTS); + } + } + + @Override + public MoldTicketResultsDO getMoldTicketResults(Long id) { + return moldticketResultsMapper.selectById(id); + } + + @Override + public PageResult getMoldTicketResultsPage(MoldTicketResultsPageReqVO pageReqVO) { + return moldticketResultsMapper.selectPage(pageReqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchUpdateMoldTicketResults(List updateReqVOList) { + if (CollectionUtils.isEmpty(updateReqVOList)) { + return; + } + + // 1. 数据验证 + validateBatchUpdateData(updateReqVOList); + + // 2. 批量更新 + List updateList = new ArrayList<>(); + LocalDateTime now = LocalDateTime.now(); + + for (MoldTicketResultsSaveReqVO vo : updateReqVOList) { + // 转换为DO + MoldTicketResultsDO updateDO = BeanUtils.toBean(vo, MoldTicketResultsDO.class); + updateDO.setUpdateTime(now); + updateList.add(updateDO); + } + + // 3. 执行批量更新 + moldticketResultsMapper.updateBatch(updateList); + + //4. 判断是否全部已检验 + handleInspectionResult(updateReqVOList); + + + } + + /** + * 验证批量更新数据 + */ + private void validateBatchUpdateData(List updateReqVOList) { + if (CollectionUtils.isEmpty(updateReqVOList)) { + return; + } + + Set idSet = new HashSet<>(); + + for (int i = 0; i < updateReqVOList.size(); i++) { + MoldTicketResultsSaveReqVO vo = updateReqVOList.get(i); + + // 验证ID不能为空 + if (vo.getId() == null) { + throw exception(TICKET_RESULTS_ID_NOT_NULL); + } + + idSet.add(vo.getId()); + + // 调用单个验证逻辑 + validateMoldTicketResultsExists(vo.getId()); + } + } + + + /** + * 处理检验结果 + */ + private void handleInspectionResult(List updateReqVOList) { + if (CollectionUtils.isEmpty(updateReqVOList)) { + return; + } + + // 检查是否有未填写的 + boolean hasPending = updateReqVOList.stream() + .anyMatch(vo -> vo.getInspectionResult() == null || vo.getInspectionResult().equals(MoldJobResultEnum.PENDING.getCode())); + + if (hasPending) { + return; + } + MoldTicketManagementDO moldticketManagementDO = moldticketManagementMapper.selectById(updateReqVOList.get(0).getManagementId()); + if (moldticketManagementDO == null ){ + throw exception(TICKET_MANAGEMENT_NOT_EXISTS); + } + moldticketManagementDO.setTaskTime(LocalDateTime.now()); + //设置为已完成 + moldticketManagementDO.setJobStatus(1); + // 检查是否有不通过的 + boolean hasFail = updateReqVOList.stream() + .anyMatch(vo -> vo.getInspectionResult() != null && vo.getInspectionResult().equals(MoldJobResultEnum.FAIL.getCode())); + if (hasFail) { + moldticketManagementDO.setJobResult(MoldJobResultEnum.FAIL.getCode()); + + } else { + moldticketManagementDO.setJobResult(MoldJobResultEnum.PASS.getCode()); + } + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + moldticketManagementDO.setOperator(String.valueOf(loginUser.getId())); + + moldticketManagementMapper.updateById(moldticketManagementDO); + + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanService.java new file mode 100644 index 0000000000..9f30881df1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.subjectmoldplan; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 项目方案关联 Service 接口 + * + * @author 内蒙必硕 + */ +public interface SubjectMoldPlanService { + + /** + * 创建项目方案关联 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSubjectMoldPlan(@Valid SubjectMoldPlanSaveReqVO createReqVO); + + /** + * 更新项目方案关联 + * + * @param updateReqVO 更新信息 + */ + void updateSubjectMoldPlan(@Valid SubjectMoldPlanSaveReqVO updateReqVO); + + /** + * 删除项目方案关联 + * + * @param id 编号 + */ + void deleteSubjectMoldPlan(Long id); + + /** + * 获得项目方案关联 + * + * @param id 编号 + * @return 项目方案关联 + */ + SubjectMoldPlanDO getSubjectMoldPlan(Long id); + + /** + * 获得项目方案关联分页 + * + * @param pageReqVO 分页查询 + * @return 项目方案关联分页 + */ + PageResult getSubjectMoldPlanPage(SubjectMoldPlanPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanServiceImpl.java new file mode 100644 index 0000000000..cc4cf9e76c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectmoldplan/SubjectMoldPlanServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.service.subjectmoldplan; + +import cn.iocoder.yudao.module.mes.service.subjectmoldplan.SubjectMoldPlanService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.subjectmoldplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.subjectmoldplan.SubjectMoldPlanMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 项目方案关联 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class SubjectMoldPlanServiceImpl implements SubjectMoldPlanService { + + @Resource + private SubjectMoldPlanMapper subjectMoldPlanMapper; + + @Override + public Long createSubjectMoldPlan(SubjectMoldPlanSaveReqVO createReqVO) { + // 插入 + SubjectMoldPlanDO subjectMoldPlan = BeanUtils.toBean(createReqVO, SubjectMoldPlanDO.class); + subjectMoldPlanMapper.insert(subjectMoldPlan); + // 返回 + return subjectMoldPlan.getId(); + } + + @Override + public void updateSubjectMoldPlan(SubjectMoldPlanSaveReqVO updateReqVO) { + // 校验存在 + validateSubjectMoldPlanExists(updateReqVO.getId()); + // 更新 + SubjectMoldPlanDO updateObj = BeanUtils.toBean(updateReqVO, SubjectMoldPlanDO.class); + subjectMoldPlanMapper.updateById(updateObj); + } + + @Override + public void deleteSubjectMoldPlan(Long id) { + // 校验存在 + validateSubjectMoldPlanExists(id); + // 删除 + subjectMoldPlanMapper.deleteById(id); + } + + private void validateSubjectMoldPlanExists(Long id) { + if (subjectMoldPlanMapper.selectById(id) == null) { + throw exception(SUBJECT_PLAN_NOT_EXISTS); + } + } + + @Override + public SubjectMoldPlanDO getSubjectMoldPlan(Long id) { + return subjectMoldPlanMapper.selectById(id); + } + + @Override + public PageResult getSubjectMoldPlanPage(SubjectMoldPlanPageReqVO pageReqVO) { + return subjectMoldPlanMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldsubject/MoldSubjectMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldsubject/MoldSubjectMapper.xml new file mode 100644 index 0000000000..402d1a1139 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldsubject/MoldSubjectMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketmanagement/MoldTicketManagementMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketmanagement/MoldTicketManagementMapper.xml new file mode 100644 index 0000000000..6c3dc38784 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketmanagement/MoldTicketManagementMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + UPDATE mes_mold_ticket_management + SET job_status = #{jobStatus}, + update_time = NOW() + WHERE id IN + + #{id} + + \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketresults/MoldTicketResultsMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketresults/MoldTicketResultsMapper.xml new file mode 100644 index 0000000000..17217e3e3d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldticketresults/MoldTicketResultsMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file From be869fa98554112785ef05430d27824946de3a01 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Tue, 13 Jan 2026 18:17:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat=EF=BC=9A=E5=AE=8C=E6=88=90=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=A1=A8=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/service/device/TDengineService.java | 10 +- .../module/mes/enums/ErrorCodeConstants.java | 17 + .../energydevice/EnergyDeviceController.java | 14 +- .../energydevice/vo/EnergyDeviceRespVO.java | 41 +- .../vo/EnergyDeviceSaveReqVO.java | 6 + .../energydevice/vo/OperationRulesVO.java | 23 ++ .../energyrecord/EnergyRecordController.java | 95 +++++ .../vo/EnergyRecordPageReqVO.java | 31 ++ .../energyrecord/vo/EnergyRecordRespVO.java | 35 ++ .../vo/EnergyRecordSaveReqVO.java | 25 ++ .../organization/vo/LineAnalysisTreeDTO.java | 1 + .../energydevice/EnergyDeviceDO.java | 6 +- .../energyrecord/EnergyRecordDO.java | 43 +++ .../energyrecord/EnergyRecordMapper.java | 29 ++ .../energydevice/EnergyDeviceService.java | 8 +- .../energydevice/EnergyDeviceServiceImpl.java | 142 ++++++- .../energyrecord/EnergyRecordService.java | 55 +++ .../energyrecord/EnergyRecordServiceImpl.java | 74 ++++ .../energytype/EnergyTypeServiceImpl.java | 16 + .../organization/OrganizationServiceImpl.java | 362 +++++++++++------- .../energyrecord/EnergyRecordMapper.xml | 12 + 21 files changed, 885 insertions(+), 160 deletions(-) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/OperationRulesVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/EnergyRecordController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energyrecord/EnergyRecordDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energyrecord/EnergyRecordMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energyrecord/EnergyRecordMapper.xml diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java index 7b3cbc7387..c52ccc51c9 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java @@ -308,20 +308,20 @@ public class TDengineService { * @return 设备数据列表,按时间戳倒序排列 */ @DS("tdengine") - public List> getstDeviceDataOrderByTimeDesc(Long id,String collectionStartTime, String collectionEndTime) { + public List> getstDeviceDataOrderByTimeDesc(Long id,String StartTime, String EndTime) { String tableName = "d_" + id; StringBuilder sqlBuilder = new StringBuilder(); List params = new ArrayList<>(); sqlBuilder.append("SELECT ts, query_data FROM besure.").append(tableName).append(" WHERE 1=1"); - if (collectionStartTime != null) { + if (StartTime != null) { // 直接将时间字符串拼接到SQL中 - sqlBuilder.append(" AND ts >= '").append(collectionStartTime).append("'"); + sqlBuilder.append(" AND ts >= '").append(StartTime).append("'"); } - if (collectionEndTime != null) { - sqlBuilder.append(" AND ts <= '").append(collectionEndTime).append("'"); + if (EndTime != null) { + sqlBuilder.append(" AND ts <= '").append(EndTime).append("'"); } sqlBuilder.append(" ORDER BY ts DESC"); diff --git a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index e9d24d6235..2122cb24dd 100644 --- a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -67,6 +67,19 @@ public interface ErrorCodeConstants { ErrorCode ENERGY_TYPE_NOT_EXISTS = new ErrorCode(5_0084, "能耗类型不存在"); ErrorCode ENERGY_DEVICE_NOT_EXISTS = new ErrorCode(5_0084, "能耗设备不存在"); ErrorCode ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS = new ErrorCode(5_0085, "能耗抄表记录不存在"); + ErrorCode ENERGY_DEVICE_CHECK_CODE_EXISTS = new ErrorCode(5_0086, "能耗类型编码已存在"); + ErrorCode CALCULATION_RULE_NOT_EXISTS = new ErrorCode(5_0087, "运算规则不能为空"); + ErrorCode CALCULATION_LAST_RULE_NO_OPERATOR = new ErrorCode(5_0088, "最后一个运算规则不能有运算符"); + ErrorCode CALCULATION_OPERATOR_MISSING = new ErrorCode(5_0089, "运算规则缺少运算符"); + ErrorCode CALCULATION_OPERATOR_INVALID = new ErrorCode(5_0090, "运算符不合法"); + ErrorCode CALCULATION_CONSECUTIVE_OPERATORS = new ErrorCode(5_0081, "不能连续出现运算符"); + ErrorCode CALCULATION_CONSECUTIVE_NOT_EXISTS = new ErrorCode(5_0082, "运算规则不存在"); + ErrorCode ENERGY_LIST_NOT_EXISTS = new ErrorCode(5_0082, "能耗设备列表不存在"); + ErrorCode ENERGY_DEVICE_CODE_DUPLICATE = new ErrorCode(5_0082, "能耗设备编码已存在"); + + + + ErrorCode MOLD_RECORD_SUBJECT_NOT_EXISTS = new ErrorCode(5_0086, "维保项目不存在"); ErrorCode MOLD_RECORD_ITEM_NOT_EXISTS = new ErrorCode(5_0087, "维保方案不存在"); @@ -117,4 +130,8 @@ public interface ErrorCodeConstants { ErrorCode REPAIR_TEMS_NOT_EXISTS = new ErrorCode(1002000016, "维修项目不存在"); ErrorCode REPAIR_TEMS_CODE_EXISTS = new ErrorCode(1002000016, "维修项目编码已存在"); + + //======================================能源设相关 1002010000================================================= + + ErrorCode ENERGY_RECORD_NOT_EXISTS = new ErrorCode(1002010000, "能源设备历史记录不存在"); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceController.java index 3d7d3c14da..138cdb8109 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceController.java @@ -66,8 +66,8 @@ public class EnergyDeviceController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:energy-device:query')") public CommonResult getEnergyDevice(@RequestParam("id") Long id) { - EnergyDeviceDO energyDevice = energyDeviceService.getEnergyDevice(id); - return success(BeanUtils.toBean(energyDevice, EnergyDeviceRespVO.class)); + EnergyDeviceRespVO energyDeviceRespVO = energyDeviceService.getEnergyDevice(id); + return success(energyDeviceRespVO); } @GetMapping("/getList") @Operation(summary = "获得能源设备列表") @@ -97,6 +97,16 @@ public class EnergyDeviceController { BeanUtils.toBean(list, EnergyDeviceRespVO.class)); } + @PostMapping("/queryDataRecords") + @Operation(summary = "查询数据记录") + @PreAuthorize("@ss.hasPermission('mes:energy-device:create')") + public CommonResult> queryDataRecords(@RequestParam(name = "startTime", required = false ) String startTime, + @RequestParam(name = "endTime", required = false ) String endTime) { + return success(energyDeviceService.queryDataRecords(startTime,endTime)); + } + + + // ==================== 子表(抄表记录) ==================== @GetMapping("/energy-device-check-record/page") diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceRespVO.java index 2e8123a633..a71495d550 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceRespVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -17,7 +18,7 @@ import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; public class EnergyDeviceRespVO { @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25931") - @ExcelProperty("ID") +// @ExcelProperty("ID") private Long id; @Schema(description = "名称", example = "芋艿") @@ -34,23 +35,23 @@ public class EnergyDeviceRespVO { // private String deviceType; @Schema(description = "信息资料") - @ExcelProperty("信息资料") +// @ExcelProperty("信息资料") private String info; @Schema(description = "抄表周期cron") - @ExcelProperty("抄表周期cron") +// @ExcelProperty("抄表周期cron") private String checkCron; @Schema(description = "最后抄表时间") - @ExcelProperty("最后抄表时间") +// @ExcelProperty("最后抄表时间") private LocalDateTime lastCheckTime; @Schema(description = "最后抄表值") - @ExcelProperty("最后抄表值") +// @ExcelProperty("最后抄表值") private BigDecimal lastCheckValue; @Schema(description = "单位", example = "赵六") - @ExcelProperty("单位") +// @ExcelProperty("单位") private String unitName; @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) @@ -59,10 +60,15 @@ public class EnergyDeviceRespVO { @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") + @ColumnWidth(20) private LocalDateTime createTime; + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("更新时间") + private LocalDateTime updateTime; + @Schema(description = "能耗类型ID", example = "1") - @ExcelProperty("能耗类型ID") +// @ExcelProperty("能耗类型ID") private Long deviceTypeId; @Schema(description = "能耗类型名称", example = "水") @@ -70,7 +76,7 @@ public class EnergyDeviceRespVO { private String deviceTypeName; @Schema(description = "所属区域ID", example = "1") - @ExcelProperty("所属区域ID") +// @ExcelProperty("所属区域ID") private Long orgId; @Schema(description = "所属区域名称", example = "车间1") @@ -78,6 +84,23 @@ public class EnergyDeviceRespVO { private String orgName; @Schema(description = "计算规则", example = "车间1") - @ExcelProperty("计算规则") +// @ExcelProperty("计算规则") private String rules; + + @Schema(description = "计算规则集合") + private List operationRulesVOList; + + + @Schema(description = "能耗总用量") + @ExcelProperty("能耗总用量") + private String energyConsumption; + + + @Schema(description = "子列表点位参数值") + @ExcelProperty("子列表点位参数值") + private Map sublistPointList; + + @Schema(description = "列表") + Map> operationRulesVOMap; + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceSaveReqVO.java index 27ea480095..4878561648 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceSaveReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceSaveReqVO.java @@ -6,6 +6,7 @@ import lombok.*; import javax.validation.constraints.*; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 能源设备新增/修改 Request VO") @Data @@ -54,4 +55,9 @@ public class EnergyDeviceSaveReqVO { @Schema(description = "计算规则", example = "车间1") private String rules; + + @Schema(description = "计算规则集合") + private List operationRulesVOList; + + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/OperationRulesVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/OperationRulesVO.java new file mode 100644 index 0000000000..c3e6c462e0 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/OperationRulesVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 能耗设备运算规则 VO") +@Data +public class OperationRulesVO { + + @Schema(description = "设备Id") + private Long deviceId; + + @Schema(description = "点位Id") + private Long pointId; + + @Schema(description = "运算符号") + private String operator; + + @Schema(description = "点位参数值") + private String pointValue; + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/EnergyRecordController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/EnergyRecordController.java new file mode 100644 index 0000000000..591d82db3e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/EnergyRecordController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energyrecord; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.energyrecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.energyrecord.EnergyRecordDO; +import cn.iocoder.yudao.module.mes.service.energyrecord.EnergyRecordService; + +@Tag(name = "管理后台 - 能源设备历史记录") +@RestController +@RequestMapping("/mes/energy-record") +@Validated +public class EnergyRecordController { + + @Resource + private EnergyRecordService energyRecordService; + + @PostMapping("/create") + @Operation(summary = "创建能源设备历史记录") + @PreAuthorize("@ss.hasPermission('mes:energy-record:create')") + public CommonResult createEnergyRecord(@Valid @RequestBody EnergyRecordSaveReqVO createReqVO) { + return success(energyRecordService.createEnergyRecord(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新能源设备历史记录") + @PreAuthorize("@ss.hasPermission('mes:energy-record:update')") + public CommonResult updateEnergyRecord(@Valid @RequestBody EnergyRecordSaveReqVO updateReqVO) { + energyRecordService.updateEnergyRecord(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除能源设备历史记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:energy-record:delete')") + public CommonResult deleteEnergyRecord(@RequestParam("id") Long id) { + energyRecordService.deleteEnergyRecord(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得能源设备历史记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:energy-record:query')") + public CommonResult getEnergyRecord(@RequestParam("id") Long id) { + EnergyRecordDO energyRecord = energyRecordService.getEnergyRecord(id); + return success(BeanUtils.toBean(energyRecord, EnergyRecordRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得能源设备历史记录分页") + @PreAuthorize("@ss.hasPermission('mes:energy-record:query')") + public CommonResult> getEnergyRecordPage(@Valid EnergyRecordPageReqVO pageReqVO) { + PageResult pageResult = energyRecordService.getEnergyRecordPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, EnergyRecordRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出能源设备历史记录 Excel") + @PreAuthorize("@ss.hasPermission('mes:energy-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportEnergyRecordExcel(@Valid EnergyRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = energyRecordService.getEnergyRecordPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "能源设备历史记录.xls", "数据", EnergyRecordRespVO.class, + BeanUtils.toBean(list, EnergyRecordRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordPageReqVO.java new file mode 100644 index 0000000000..9cbaa41db5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordPageReqVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energyrecord.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 能源设备历史记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class EnergyRecordPageReqVO extends PageParam { + + @Schema(description = "能源设备id", example = "25594") + private Long energyDeviceId; + + @Schema(description = "能耗历史数据") + private String recordData; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordRespVO.java new file mode 100644 index 0000000000..de5225fd51 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordRespVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energyrecord.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 能源设备历史记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class EnergyRecordRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14404") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "能源设备id", example = "25594") + @ExcelProperty("能源设备id") + private Long energyDeviceId; + + @Schema(description = "能耗历史数据") + @ExcelProperty("能耗历史数据") + private String recordData; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean isEnable; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordSaveReqVO.java new file mode 100644 index 0000000000..434c251b85 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energyrecord/vo/EnergyRecordSaveReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energyrecord.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 能源设备历史记录新增/修改 Request VO") +@Data +public class EnergyRecordSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14404") + private Long id; + + @Schema(description = "能源设备id", example = "25594") + private Long energyDeviceId; + + @Schema(description = "能耗历史数据") + private String recordData; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isEnable; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/organization/vo/LineAnalysisTreeDTO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/organization/vo/LineAnalysisTreeDTO.java index 25b89dda3c..b897c9ed77 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/organization/vo/LineAnalysisTreeDTO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/organization/vo/LineAnalysisTreeDTO.java @@ -27,6 +27,7 @@ public class LineAnalysisTreeDTO { public static class LineNode { private Long id; // 产线ID private String name; // 产线名称 + private Long parentId; private List equipments = new ArrayList<>(); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceDO.java index 059a168900..eeebe2745e 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceDO.java @@ -72,13 +72,13 @@ public class EnergyDeviceDO extends BaseDO { /** * 所属区域ID */ - private Long OrgId; + private Long orgId; /** * 所属区域名称 */ - private String OrgName; + private String orgName; /** * 计算规则 */ - private String Rules; + private String rules; } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energyrecord/EnergyRecordDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energyrecord/EnergyRecordDO.java new file mode 100644 index 0000000000..01a5c3d538 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energyrecord/EnergyRecordDO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.energyrecord; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 能源设备历史记录 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_energy_record") +@KeySequence("mes_energy_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EnergyRecordDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 能源设备id + */ + private Long energyDeviceId; + /** + * 能耗历史数据 + */ + private String recordData; + /** + * 是否启用 + */ + private Boolean isEnable; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energyrecord/EnergyRecordMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energyrecord/EnergyRecordMapper.java new file mode 100644 index 0000000000..f1bdb9c3da --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energyrecord/EnergyRecordMapper.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.energyrecord; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.energyrecord.EnergyRecordDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.energyrecord.vo.*; + +/** + * 能源设备历史记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface EnergyRecordMapper extends BaseMapperX { + + default PageResult selectPage(EnergyRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(EnergyRecordDO::getEnergyDeviceId, reqVO.getEnergyDeviceId()) + .eqIfPresent(EnergyRecordDO::getRecordData, reqVO.getRecordData()) + .eqIfPresent(EnergyRecordDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(EnergyRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(EnergyRecordDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceService.java index 5e7302c2d3..ecb6dc0ae8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceService.java @@ -3,9 +3,11 @@ package cn.iocoder.yudao.module.mes.service.energydevice; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDevicePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceRespVO; import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; +import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; import java.util.Collection; @@ -50,7 +52,7 @@ public interface EnergyDeviceService { * @param id 编号 * @return 能源设备 */ - EnergyDeviceDO getEnergyDevice(Long id); + EnergyDeviceRespVO getEnergyDevice(Long id); /** * 获得能源设备分页 @@ -106,4 +108,8 @@ public interface EnergyDeviceService { if (ids.isEmpty()) return new HashMap<>(); return convertMap(getList(ids), EnergyDeviceDO::getId); } + + List queryDataRecords(String startTime,String endTime); + + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java index 9a3caeb235..89a0e597ef 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java @@ -3,13 +3,20 @@ package cn.iocoder.yudao.module.mes.service.energydevice; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO; +import cn.iocoder.yudao.module.iot.service.device.TDengineService; import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDevicePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceRespVO; import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.OperationRulesVO; import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceCheckRecordMapper; import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceMapper; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -18,10 +25,11 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; +import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_ID_DOES_NOT_EXIST; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.POINT_ID_MODEL_NOT_EXISTS; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -39,6 +47,9 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { private EnergyDeviceCheckRecordMapper energyDeviceCheckRecordMapper; @Resource private MesNoRedisDAO noRedisDAO; + @Resource + private TDengineService tDengineService; + @Override public Long createEnergyDevice(EnergyDeviceSaveReqVO createReqVO) { // 插入 @@ -48,17 +59,88 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { String no = noRedisDAO.generate2(MesNoRedisDAO.ENERGY_NO_PREFIX); energyDevice.setCode(no); } + // 校验编码是否唯一 + if (StringUtils.isNotEmpty(energyDevice.getCode())) { + List existingDevice = energyDeviceMapper.selectList( + Wrappers.lambdaQuery().eq(EnergyDeviceDO::getCode,createReqVO.getCode())); + if (!existingDevice.isEmpty()) { + throw exception(ENERGY_DEVICE_CODE_DUPLICATE); + } + } + //校验运算规则 + verifiyOperationRules(createReqVO.getOperationRulesVOList()); + energyDevice.setRules(JSON.toJSONString(createReqVO.getOperationRulesVOList())); energyDeviceMapper.insert(energyDevice); // 返回 return energyDevice.getId(); } + /** + * 校验运算规则列表 + * + * 规则: + * 1. 列表不能为空 + * 2. 每个元素的设备ID和点位ID不能为空 + * 3. 运算符只能是 +、-、*、/ 四种 + * 4. 最后一个元素的运算符必须为空 + * 5. 除最后一个元素外,其他元素必须都有运算符 + * 6. 系数不能为null,除法时除数不能为0(在计算时校验) + * 7. 不能连续出现两个运算符 + */ + private void verifiyOperationRules(List operationRulesVOList) { + if (CollectionUtils.isEmpty(operationRulesVOList)) { + throw exception(CALCULATION_RULE_NOT_EXISTS); + } + + // 运算符集合 + Set validOperators = new HashSet<>(Arrays.asList("+", "-", "*", "/")); + + for (int i = 0; i < operationRulesVOList.size(); i++) { + OperationRulesVO rule = operationRulesVOList.get(i); + + // 1. 校验设备ID和点位ID + if (rule.getDeviceId() == null) { + throw exception(DEVICE_ID_DOES_NOT_EXIST); + } + if (rule.getPointId() == null) { + throw exception(POINT_ID_MODEL_NOT_EXISTS); + } + + // 2. 获取运算符 + String operator = rule.getOperator(); + boolean isLastElement = (i == operationRulesVOList.size() - 1); + + if (isLastElement) { + // 最后一个元素:运算符必须为空 + if (StringUtils.isNotBlank(operator)) { + throw exception(CALCULATION_LAST_RULE_NO_OPERATOR); + } + } else { + // 非最后一个元素:必须有运算符 + if (StringUtils.isBlank(operator)) { + throw exception(CALCULATION_OPERATOR_MISSING); + } + + // 校验运算符是否合法 + if (!validOperators.contains(operator)) { + throw exception(CALCULATION_OPERATOR_INVALID); + } + + } + } + } + @Override public void updateEnergyDevice(EnergyDeviceSaveReqVO updateReqVO) { // 校验存在 validateEnergyDeviceExists(updateReqVO.getId()); + // 校验运算规则 + verifiyOperationRules(updateReqVO.getOperationRulesVOList()); + // 更新 EnergyDeviceDO updateObj = BeanUtils.toBean(updateReqVO, EnergyDeviceDO.class); + updateObj.setRules(JSON.toJSONString(updateReqVO.getOperationRulesVOList())); + energyDeviceMapper.updateById(updateObj); } @@ -81,8 +163,12 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { } @Override - public EnergyDeviceDO getEnergyDevice(Long id) { - return energyDeviceMapper.selectById(id); + public EnergyDeviceRespVO getEnergyDevice(Long id) { + EnergyDeviceDO energyDeviceDO = energyDeviceMapper.selectById(id); + EnergyDeviceRespVO energyDeviceRespVO = BeanUtils.toBean(energyDeviceDO, EnergyDeviceRespVO.class); + List operationRulesVOList = JSON.parseArray(energyDeviceDO.getRules(), OperationRulesVO.class); + energyDeviceRespVO.setOperationRulesVOList(operationRulesVOList); + return energyDeviceRespVO; } @Override @@ -154,4 +240,52 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { public List getList(Collection ids) { return energyDeviceMapper.selectBatchIds(ids); } + + @Override + public List queryDataRecords(String startTime,String endTime) { + List energyDeviceRespVOArrayList = new ArrayList<>(); + List energyDeviceDO = energyDeviceMapper.selectList(); + if (energyDeviceDO.isEmpty()){ + throw exception(ENERGY_LIST_NOT_EXISTS); + } + for (EnergyDeviceDO deviceDO : energyDeviceDO) { + EnergyDeviceRespVO energyDeviceRespVO = new EnergyDeviceRespVO(); + if (StringUtils.isBlank(deviceDO.getRules())){ + continue; + } + + + //查询每个点位的Id + List operationRulesVOList = JSON.parseArray(deviceDO.getRules(), OperationRulesVO.class); + Map> operationRulesVOMap =new HashMap<>(); + + for (OperationRulesVO operationRulesVO : operationRulesVOList) { + List operationRulesVOS = new ArrayList<>(); + //获取Td列表 + List> maps = tDengineService.getstDeviceDataOrderByTimeDesc(operationRulesVO.getDeviceId(), startTime, endTime); + for (Map map : maps) { + String queryData = map.get("queryData").toString(); + + //获取json数据列表 + List deviceContactModelDOS = JSON.parseArray(queryData, DeviceContactModelDO.class); + for (DeviceContactModelDO deviceContactModelDO : deviceContactModelDOS) { + if (operationRulesVO.equals(deviceContactModelDO.getId())){ + OperationRulesVO operationRulesVO1 = new OperationRulesVO(); + operationRulesVO1.setPointId(deviceContactModelDO.getId()); + operationRulesVO1.setPointValue((String) deviceContactModelDO.getAddressValue()); + operationRulesVOS.add(operationRulesVO1); + } + } + + } + operationRulesVOMap.put(operationRulesVO.getPointId(),operationRulesVOS); + + } + energyDeviceRespVO.setOperationRulesVOMap(operationRulesVOMap); + energyDeviceRespVOArrayList.add(energyDeviceRespVO); + } + + + return energyDeviceRespVOArrayList; + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordService.java new file mode 100644 index 0000000000..54122c5e33 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.energyrecord; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.energyrecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.energyrecord.EnergyRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 能源设备历史记录 Service 接口 + * + * @author 内蒙必硕 + */ +public interface EnergyRecordService { + + /** + * 创建能源设备历史记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createEnergyRecord(@Valid EnergyRecordSaveReqVO createReqVO); + + /** + * 更新能源设备历史记录 + * + * @param updateReqVO 更新信息 + */ + void updateEnergyRecord(@Valid EnergyRecordSaveReqVO updateReqVO); + + /** + * 删除能源设备历史记录 + * + * @param id 编号 + */ + void deleteEnergyRecord(Long id); + + /** + * 获得能源设备历史记录 + * + * @param id 编号 + * @return 能源设备历史记录 + */ + EnergyRecordDO getEnergyRecord(Long id); + + /** + * 获得能源设备历史记录分页 + * + * @param pageReqVO 分页查询 + * @return 能源设备历史记录分页 + */ + PageResult getEnergyRecordPage(EnergyRecordPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordServiceImpl.java new file mode 100644 index 0000000000..7cd258ab28 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energyrecord/EnergyRecordServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.mes.service.energyrecord; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.energyrecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.energyrecord.EnergyRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.energyrecord.EnergyRecordMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 能源设备历史记录 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class EnergyRecordServiceImpl implements EnergyRecordService { + + @Resource + private EnergyRecordMapper energyRecordMapper; + + @Override + public Long createEnergyRecord(EnergyRecordSaveReqVO createReqVO) { + // 插入 + EnergyRecordDO energyRecord = BeanUtils.toBean(createReqVO, EnergyRecordDO.class); + energyRecordMapper.insert(energyRecord); + // 返回 + return energyRecord.getId(); + } + + @Override + public void updateEnergyRecord(EnergyRecordSaveReqVO updateReqVO) { + // 校验存在 + validateEnergyRecordExists(updateReqVO.getId()); + // 更新 + EnergyRecordDO updateObj = BeanUtils.toBean(updateReqVO, EnergyRecordDO.class); + energyRecordMapper.updateById(updateObj); + } + + @Override + public void deleteEnergyRecord(Long id) { + // 校验存在 + validateEnergyRecordExists(id); + // 删除 + energyRecordMapper.deleteById(id); + } + + private void validateEnergyRecordExists(Long id) { + if (energyRecordMapper.selectById(id) == null) { + throw exception(ENERGY_RECORD_NOT_EXISTS); + } + } + + @Override + public EnergyRecordDO getEnergyRecord(Long id) { + return energyRecordMapper.selectById(id); + } + + @Override + public PageResult getEnergyRecordPage(EnergyRecordPageReqVO pageReqVO) { + return energyRecordMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energytype/EnergyTypeServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energytype/EnergyTypeServiceImpl.java index bafa05af29..d9a9dd0756 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energytype/EnergyTypeServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energytype/EnergyTypeServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.mes.service.energytype; import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -32,6 +33,10 @@ public class EnergyTypeServiceImpl implements EnergyTypeService { @Override public Long createEnergyType(EnergyTypeSaveReqVO createReqVO) { + + // 校验编码是否重复 + validateCodeUnique(createReqVO); + // 插入 EnergyTypeDO energyType = BeanUtils.toBean(createReqVO, EnergyTypeDO.class); energyTypeMapper.insert(energyType); @@ -39,6 +44,17 @@ public class EnergyTypeServiceImpl implements EnergyTypeService { return energyType.getId(); } + private void validateCodeUnique(EnergyTypeSaveReqVO createReqVO) { + + Long count = energyTypeMapper.selectCount(Wrappers.lambdaQuery() + .eq(EnergyTypeDO::getCode, createReqVO.getCode()) + .ne(createReqVO.getId() != null, EnergyTypeDO::getId, createReqVO.getId() )); + + if (count != null && count > 0) { + throw exception(ENERGY_DEVICE_CHECK_CODE_EXISTS); + } + } + @Override public void updateEnergyType(EnergyTypeSaveReqVO updateReqVO) { // 校验存在 diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/organization/OrganizationServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/organization/OrganizationServiceImpl.java index 275fb05b43..35fcb0124a 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/organization/OrganizationServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/organization/OrganizationServiceImpl.java @@ -263,7 +263,7 @@ public class OrganizationServiceImpl implements OrganizationService { OrganizationListReqVO organizationListReqVO = new OrganizationListReqVO(); List organizationDOS = getOrganizationList(organizationListReqVO); List organizationRespVOS = buildVOList(organizationDOS); - if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(organizationRespVOS)) { + if (organizationRespVOS.isEmpty()) { return Collections.emptyList(); } @@ -306,19 +306,171 @@ public class OrganizationServiceImpl implements OrganizationService { .filter(param -> param.getDeviceId() != null) .collect(Collectors.groupingBy(DeviceContactModelDO::getDeviceId)); + + + // 获取产线与父节点的映射关系 + Map lineParentIdMap = organizationRespVOS.stream() + .collect(Collectors.toMap( + OrganizationRespVO::getId, + line -> line.getParentId() != null ? line.getParentId() : 0L, // 如果父节点为空,使用默认值0 + (existing, replacement) -> existing + )); + // 构建产线ID到产线对象的映射 + Map lineMap = organizationRespVOS.stream() + .collect(Collectors.toMap(OrganizationRespVO::getId, Function.identity())); + + // 获取所有匹配的产线(包括下级匹配的) + List matchedLines = getMatchedLinesWithAncestors( + organizationRespVOS, keyword, allDevices, paramsByDeviceId, lineParentIdMap, lineMap + ); + + // 7. 构建树结构 - return buildTreeStructureWithKeyword(organizationRespVOS, devicesByLineId, paramsByDeviceId,keyword); + return buildTreeStructureWithKeyword(matchedLines, devicesByLineId, paramsByDeviceId,keyword,lineParentIdMap); + + } + + private List getMatchedLinesWithAncestors( + List allLines, + String keyword, + List allDevices, + Map> paramsByDeviceId, + Map lineParentIdMap, + Map lineMap) { + + boolean hasKeyword = StringUtils.isNotBlank(keyword); + String lowerKeyword = hasKeyword ? keyword.toLowerCase() : ""; + + // 存储最终要包含的产线ID + Set lineIdsToInclude = new HashSet<>(); + + // 1. 首先找出直接匹配的产线 + for (OrganizationRespVO line : allLines) { + boolean lineMatch = !hasKeyword || + (line.getName() != null && line.getName().toLowerCase().contains(lowerKeyword)); + + if (lineMatch) { + // 添加到结果集 + lineIdsToInclude.add(line.getId()); + // 向上查找所有父级节点 + addAllAncestors(line.getId(), lineParentIdMap, lineMap, lineIdsToInclude); + } + } + + // 2. 查找设备匹配的产线 + if (hasKeyword) { + for (DeviceDO device : allDevices) { + boolean deviceMatch = device.getDeviceName() != null && + device.getDeviceName().toLowerCase().contains(lowerKeyword); + + if (deviceMatch) { + // 找到这个设备所属的产线 + for (OrganizationRespVO line : allLines) { + if (line.getMachineId() != null && line.getMachineId().equals(device.getId())) { + lineIdsToInclude.add(line.getId()); + addAllAncestors(line.getId(), lineParentIdMap, lineMap, lineIdsToInclude); + } + } + } + } + } + // 3. 查找参数匹配的产线 + if (hasKeyword) { + for (Map.Entry> entry : paramsByDeviceId.entrySet()) { + Long deviceId = entry.getKey(); + List params = entry.getValue(); + + boolean hasMatchingParam = params.stream() + .anyMatch(param -> param.getAttributeName() != null && + param.getAttributeName().toLowerCase().contains(lowerKeyword)); + + if (hasMatchingParam) { + // 找到这个设备所属的产线 + for (OrganizationRespVO line : allLines) { + if (line.getMachineId() != null && line.getMachineId().equals(deviceId)) { + lineIdsToInclude.add(line.getId()); + addAllAncestors(line.getId(), lineParentIdMap, lineMap, lineIdsToInclude); + } + } + } + } + } + + // 如果没有关键词,返回所有产线 + if (!hasKeyword) { + return allLines; + } + + // 只返回需要包含的产线 + return allLines.stream() + .filter(line -> lineIdsToInclude.contains(line.getId())) + .collect(Collectors.toList()); + } + + private void addAllAncestors(Long lineId, + Map lineParentIdMap, + Map lineMap, + Set lineIdsToInclude) { + Long currentParentId = lineParentIdMap.get(lineId); + + // 递归向上查找所有父级节点 + while (currentParentId != null && currentParentId != 0L) { + lineIdsToInclude.add(currentParentId); + + // 继续向上查找 + currentParentId = lineParentIdMap.get(currentParentId); + } } + private List buildTreeStructureWithKeyword(List lines, Map> devicesByLineId, Map> paramsByDeviceId, - String keyword) { + String keyword, + Map lineParentIdMap) { // 统一处理关键词 boolean hasKeyword = StringUtils.isNotBlank(keyword); String lowerKeyword = hasKeyword ? keyword.toLowerCase() : ""; + // 如果lines已经过滤过,这里不再需要复杂的匹配判断 + if (!hasKeyword) { + // 没有关键词时,返回完整的树结构 + return lines.stream().map(line -> { + Long parentId = lineParentIdMap.getOrDefault(line.getId(), 0L); + + // 获取该产线的设备 + List lineDevices = devicesByLineId.getOrDefault(line.getId(), new ArrayList<>()); + + // 构建设备节点(显示所有设备和参数) + List equipmentNodes = lineDevices.stream() + .map(device -> { + List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); + + List parameterNodes = deviceParams.stream() + .map(this::buildParameterNode) + .collect(Collectors.toList()); + + return LineAnalysisTreeDTO.EquipmentNode.builder() + .id(device.getId()) + .name(device.getDeviceName()) + .parameters(parameterNodes) + .build(); + }) + .collect(Collectors.toList()); + + return LineAnalysisTreeDTO.LineNode.builder() + .id(line.getId()) + .name(line.getName()) + .parentId(parentId) + .equipments(equipmentNodes) + .build(); + }).collect(Collectors.toList()); + } + + // 有关键词时,lines已经包含了匹配的产线及其父级产线 + // 但我们仍然需要根据关键词过滤设备和参数 + // 记录匹配情况 Map lineMatchedMap = new HashMap<>(); Map deviceMatchedMap = new HashMap<>(); @@ -326,17 +478,16 @@ public class OrganizationServiceImpl implements OrganizationService { // 第一遍:分析匹配情况 for (OrganizationRespVO line : lines) { // 产线是否匹配 - boolean lineMatch = !hasKeyword || - (line.getName() != null && line.getName().toLowerCase().contains(lowerKeyword)); + boolean lineMatch = line.getName() != null && + line.getName().toLowerCase().contains(lowerKeyword); lineMatchedMap.put(line.getId(), lineMatch); // 检查该产线的设备 List lineDevices = devicesByLineId.getOrDefault(line.getId(), new ArrayList<>()); for (DeviceDO device : lineDevices) { // 设备是否匹配 - boolean deviceMatch = !hasKeyword || - (device.getDeviceName() != null && - device.getDeviceName().toLowerCase().contains(lowerKeyword)); + boolean deviceMatch = device.getDeviceName() != null && + device.getDeviceName().toLowerCase().contains(lowerKeyword); deviceMatchedMap.put(device.getId(), deviceMatch); } } @@ -344,16 +495,7 @@ public class OrganizationServiceImpl implements OrganizationService { // 第二遍:构建树结构 return lines.stream().map(line -> { boolean lineMatch = lineMatchedMap.getOrDefault(line.getId(), false); - - // 关键修改:如果产线匹配,跳过后续的设备过滤逻辑 - if (hasKeyword && !lineMatch) { - // 检查产线下是否有匹配的设备或参数 - boolean hasMatchingDeviceOrParam = checkIfLineHasMatchingDeviceOrParam( - line, devicesByLineId, paramsByDeviceId, lowerKeyword, deviceMatchedMap); - if (!hasMatchingDeviceOrParam) { - return null; - } - } + Long parentId = lineParentIdMap.getOrDefault(line.getId(), 0L); // 获取该产线的设备 List lineDevices = devicesByLineId.getOrDefault(line.getId(), new ArrayList<>()); @@ -362,13 +504,10 @@ public class OrganizationServiceImpl implements OrganizationService { List equipmentNodes = lineDevices.stream() .map(device -> { boolean deviceMatch = deviceMatchedMap.getOrDefault(device.getId(), false); + List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); - // 关键修改:如果产线匹配,保留所有设备 + // 如果产线匹配,显示该产线下的所有设备 if (lineMatch) { - // 产线匹配时,保留该设备 - List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); - - // 产线匹配时,显示所有参数 List parameterNodes = deviceParams.stream() .map(this::buildParameterNode) .collect(Collectors.toList()); @@ -380,33 +519,30 @@ public class OrganizationServiceImpl implements OrganizationService { .build(); } - // 以下为原有逻辑:产线不匹配时的处理 - if (hasKeyword && !deviceMatch) { - boolean hasMatchingParam = checkIfDeviceHasMatchingParam( - device, paramsByDeviceId, lowerKeyword); - if (!hasMatchingParam) { - return null; - } + // 如果设备匹配,显示该设备的所有参数 + if (deviceMatch) { + List parameterNodes = deviceParams.stream() + .map(this::buildParameterNode) + .collect(Collectors.toList()); + + return LineAnalysisTreeDTO.EquipmentNode.builder() + .id(device.getId()) + .name(device.getDeviceName()) + .parameters(parameterNodes) + .build(); } - List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); + // 检查是否有匹配的参数 + boolean hasMatchingParam = deviceParams.stream() + .anyMatch(param -> isParameterMatch(param, lowerKeyword)); + + if (!hasMatchingParam) { + return null; + } - // 构建参数节点 + // 只显示匹配的参数 List parameterNodes = deviceParams.stream() - .filter(param -> { - if (!hasKeyword) { - return true; // 没有关键词,显示所有 - } - - // 有关键词时: - // 如果设备匹配,显示所有参数 - if (deviceMatch) { - return true; - } - - // 否则,只显示匹配的参数 - return isParameterMatch(param, lowerKeyword); - }) + .filter(param -> isParameterMatch(param, lowerKeyword)) .map(this::buildParameterNode) .collect(Collectors.toList()); @@ -417,83 +553,60 @@ public class OrganizationServiceImpl implements OrganizationService { .build(); }) .filter(Objects::nonNull) - .filter(equipmentNode -> !lineMatch || !equipmentNode.getParameters().isEmpty()) // 修改过滤条件 .collect(Collectors.toList()); - // 构建设备节点 return LineAnalysisTreeDTO.LineNode.builder() .id(line.getId()) .name(line.getName()) + .parentId(parentId) .equipments(equipmentNodes) .build(); }) - .filter(Objects::nonNull) - .filter(lineNode -> !hasKeyword || lineMatchedMap.getOrDefault(lineNode.getId(), false) || !lineNode.getEquipments().isEmpty()) .collect(Collectors.toList()); } - /** - * 检查产线下是否有匹配的设备或参数 - */ - private boolean checkIfLineHasMatchingDeviceOrParam(OrganizationRespVO line, - Map> devicesByLineId, - Map> paramsByDeviceId, - String lowerKeyword, - Map deviceMatchedMap) { - - List lineDevices = devicesByLineId.getOrDefault(line.getId(), new ArrayList<>()); - - for (DeviceDO device : lineDevices) { - // 检查设备是否匹配 - boolean deviceMatch = deviceMatchedMap.getOrDefault(device.getId(), false); - if (deviceMatch) { - return true; - } - - // 检查设备下的参数是否匹配 - List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); - boolean hasMatchingParam = deviceParams.stream() - .anyMatch(param -> isParameterMatch(param, lowerKeyword)); - if (hasMatchingParam) { - return true; - } - } - - return false; - } - - /** - * 检查设备下是否有匹配的参数 - */ - private boolean checkIfDeviceHasMatchingParam(DeviceDO device, - Map> paramsByDeviceId, - String lowerKeyword) { - - List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); - return deviceParams.stream() - .anyMatch(param -> isParameterMatch(param, lowerKeyword)); - } - private List buildTreeStructure(List lines, - Map> devicesByLineId, - Map> paramsByDeviceId) { - return lines.stream().map(line -> { - LineAnalysisTreeDTO.LineNode lineNode = LineAnalysisTreeDTO.LineNode.builder() - .id(line.getId()) - .name(line.getName()) - .build(); - - // 获取该产线的设备 - List lineDevices = devicesByLineId.getOrDefault(line.getId(), new ArrayList<>()); - - // 构建设备节点 - List equipmentNodes = lineDevices.stream() - .map(device -> buildEquipmentNode(device, paramsByDeviceId)) - .collect(Collectors.toList()); +// /** +// * 检查产线下是否有匹配的设备或参数 +// */ +// private boolean checkIfLineHasMatchingDeviceOrParam(OrganizationRespVO line, +// Map> devicesByLineId, +// Map> paramsByDeviceId, +// String lowerKeyword, +// Map deviceMatchedMap) { +// +// List lineDevices = devicesByLineId.getOrDefault(line.getId(), new ArrayList<>()); +// +// for (DeviceDO device : lineDevices) { +// // 检查设备是否匹配 +// boolean deviceMatch = deviceMatchedMap.getOrDefault(device.getId(), false); +// if (deviceMatch) { +// return true; +// } +// +// // 检查设备下的参数是否匹配 +// List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); +// boolean hasMatchingParam = deviceParams.stream() +// .anyMatch(param -> isParameterMatch(param, lowerKeyword)); +// if (hasMatchingParam) { +// return true; +// } +// } +// +// return false; +// } +// +// /** +// * 检查设备下是否有匹配的参数 +// */ +// private boolean checkIfDeviceHasMatchingParam(DeviceDO device, +// Map> paramsByDeviceId, +// String lowerKeyword) { +// +// List deviceParams = paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); +// return deviceParams.stream() +// .anyMatch(param -> isParameterMatch(param, lowerKeyword)); +// } - lineNode.setEquipments(equipmentNodes); - return lineNode; - }).collect(Collectors.toList()); - } /** * 判断参数是否匹配关键词 @@ -503,33 +616,10 @@ public class OrganizationServiceImpl implements OrganizationService { return true; } - return (param.getAttributeName() != null && param.getAttributeName().toLowerCase().contains(lowerKeyword)) || - (param.getAttributeCode() != null && param.getAttributeCode().toLowerCase().contains(lowerKeyword)); + return (param.getAttributeName() != null && param.getAttributeName().toLowerCase().contains(lowerKeyword)); } - /** - * 构建设备节点 - */ - private LineAnalysisTreeDTO.EquipmentNode buildEquipmentNode(DeviceDO device, - Map> paramsByDeviceId) { - LineAnalysisTreeDTO.EquipmentNode equipmentNode = LineAnalysisTreeDTO.EquipmentNode.builder() - .id(device.getId()) - .name(device.getDeviceName()) - .build(); - - // 获取设备参数 - List deviceParams = - paramsByDeviceId.getOrDefault(device.getId(), new ArrayList<>()); - - // 构建参数节点 - List parameterNodes = deviceParams.stream() - .map(this::buildParameterNode) - .collect(Collectors.toList()); - - equipmentNode.setParameters(parameterNodes); - return equipmentNode; - } /** * 构建参数节点 @@ -549,7 +639,7 @@ public class OrganizationServiceImpl implements OrganizationService { private List getAllParameters(List devices) { - if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(devices)) { + if (devices.isEmpty()) { return Collections.emptyList(); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energyrecord/EnergyRecordMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energyrecord/EnergyRecordMapper.xml new file mode 100644 index 0000000000..4e45a91530 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energyrecord/EnergyRecordMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file