diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseProcessInfo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseProcessInfo.java index ee3cd5d..46e8a06 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseProcessInfo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseProcessInfo.java @@ -12,7 +12,7 @@ import java.util.List; * 工序信息对象 prod_base_process_info * * @author Yinq - * @date 2025-01-06 + * @date 2025-05-29 */ @Data @EqualsAndHashCode(callSuper = true) @@ -44,7 +44,7 @@ public class ProdBaseProcessInfo extends TenantEntity { private String processType; /** - * 工序顺序 + * 工序顺序(弃用) */ private Long processQueue; @@ -53,22 +53,87 @@ public class ProdBaseProcessInfo extends TenantEntity { */ private Long productionTime; + /** + * 车间ID + */ + private Long workshopId; + + /** + * 委外标识(1自制 2委外) + */ + private String outsourcingFlag; + + /** + * 工序生产类型(1投料 2加工 3装配) + */ + private String processProductionType; + + /** + * 默认产出率(%),公式:合格数/投入数 + */ + private Long defaultYieldRate; + + /** + * 损耗率(%),公式:废品/不可修复不良品占比 + */ + private Long lossRate; + + /** + * 返修率(%),公式:返修品/投入数 + */ + private Long reworkRate; + + /** + * 领料方式(1领料单 2申请领料 3生产叫料) + */ + private String materialMethod; + + /** + * 委外提前期(秒) + */ + private Long leadTime; + + /** + * 准备时间(秒) + */ + private Long setupTime; + + /** + * 加工时间(秒) + */ + private Long processingTime; + + /** + * 拆卸时间(秒) + */ + private Long disassemblyTime; + + /** + * 理论生产节拍(秒/件) + */ + private Long theoreticalCycleTime; + + /** + * 质检方式(1免检 2自检 3质量检验) + */ + private String inspectionMethod; + /** * 激活标识(1是 0否) */ private String activeFlag; - /** - * 备注 - */ - private String remark; - /** * 删除标志(0代表存在 2代表删除) */ @TableLogic private String delFlag; + /** + * 备注 + */ + private String remark; + /** * 工序关联产线信息 */ @@ -82,5 +147,15 @@ public class ProdBaseProcessInfo extends TenantEntity { @TableField(exist = false) private String processPercentage;//映射字段 + /** + * 车间名称 + */ + @TableField(exist = false) + private String workshopName; + /** + * 工序资源List + */ + @TableField(exist = false) + List prodBaseProcessResourceList; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseProcessResource.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseProcessResource.java new file mode 100644 index 0000000..be0bd2a --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseProcessResource.java @@ -0,0 +1,71 @@ +package org.dromara.mes.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 工序资源信息对象 prod_base_process_resource + * + * @author Yinq + * @date 2025-05-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("prod_base_process_resource") +public class ProdBaseProcessResource extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键标识 + */ + @TableId(value = "process_resource_id", type = IdType.AUTO) + private Long processResourceId; + + /** + * 工序ID + */ + private Long processId; + + /** + * 指派类型(1人员 2班组 3机台 4工位) + */ + private String assignmentType; + + /** + * 载具工装类型 + */ + private String toolingTypeCode; + + /** + * 必选标识(0可选 1必选) + */ + private String requiredFlag; + + /** + * 选择模式(0单选 1多选) + */ + private String selectionMode; + + /** + * 是否需要校验(0否 1是) + */ + private String requiresValidation; + + /** + * 是否需要准备任务(0否 1是) + */ + private String requiresPreparation; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseProcessInfoBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseProcessInfoBo.java index d9ff840..31528b9 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseProcessInfoBo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseProcessInfoBo.java @@ -1,6 +1,5 @@ package org.dromara.mes.domain.bo; -import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.mes.domain.ProdBaseProcessInfo; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; @@ -9,8 +8,7 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; -import org.dromara.mes.domain.ProdBaseProcessProdLine; -import org.dromara.mes.domain.ProdBaseProcessUser; +import org.dromara.mes.domain.ProdBaseProcessResource; import java.util.List; @@ -18,7 +16,7 @@ import java.util.List; * 工序信息业务对象 prod_base_process_info * * @author Yinq - * @date 2025-01-06 + * @date 2025-05-29 */ @Data @EqualsAndHashCode(callSuper = true) @@ -33,23 +31,23 @@ public class ProdBaseProcessInfoBo extends BaseEntity { /** * 工序编号 */ - @NotBlank(message = "工序编号不能为空", groups = {AddGroup.class, EditGroup.class}) + @NotBlank(message = "工序编号不能为空", groups = { AddGroup.class, EditGroup.class }) private String processCode; /** * 工序名称 */ - @NotBlank(message = "工序名称不能为空", groups = {AddGroup.class, EditGroup.class}) + @NotBlank(message = "工序名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String processName; /** - * 工序类别 + * 工序类别(1生产工序 2质检工序) */ - @NotBlank(message = "工序类别不能为空", groups = {AddGroup.class, EditGroup.class}) + @NotBlank(message = "工序类别(1生产工序 2质检工序)不能为空", groups = { AddGroup.class, EditGroup.class }) private String processType; /** - * 工序顺序 + * 工序顺序(弃用) */ private Long processQueue; @@ -58,10 +56,75 @@ public class ProdBaseProcessInfoBo extends BaseEntity { */ private Long productionTime; + /** + * 车间ID + */ + private Long workshopId; + + /** + * 委外标识(1自制 2委外) + */ + private String outsourcingFlag; + + /** + * 工序生产类型(1投料 2加工 3装配) + */ + private String processProductionType; + + /** + * 默认产出率(%),公式:合格数/投入数 + */ + private Long defaultYieldRate; + + /** + * 损耗率(%),公式:废品/不可修复不良品占比 + */ + private Long lossRate; + + /** + * 返修率(%),公式:返修品/投入数 + */ + private Long reworkRate; + + /** + * 领料方式(1领料单 2申请领料 3生产叫料) + */ + private String materialMethod; + + /** + * 委外提前期(秒) + */ + private Long leadTime; + + /** + * 准备时间(秒) + */ + private Long setupTime; + + /** + * 加工时间(秒) + */ + private Long processingTime; + + /** + * 拆卸时间(秒) + */ + private Long disassemblyTime; + + /** + * 理论生产节拍(秒/件) + */ + private Long theoreticalCycleTime; + + /** + * 质检方式(1免检 2自检 3质量检验) + */ + private String inspectionMethod; + /** * 激活标识(1是 0否) */ - @NotBlank(message = "激活标识", groups = {AddGroup.class, EditGroup.class}) + @NotBlank(message = "激活标识(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) private String activeFlag; /** @@ -69,7 +132,6 @@ public class ProdBaseProcessInfoBo extends BaseEntity { */ private String remark; - /** * 工序关联产线信息 */ @@ -80,4 +142,8 @@ public class ProdBaseProcessInfoBo extends BaseEntity { private String processPercentageBo;//映射字段 + /** + * 工序资源List + */ + List prodBaseProcessResourceList; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseProcessResourceBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseProcessResourceBo.java new file mode 100644 index 0000000..fca4a2a --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseProcessResourceBo.java @@ -0,0 +1,69 @@ +package org.dromara.mes.domain.bo; + +import org.dromara.mes.domain.ProdBaseProcessResource; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 工序资源信息业务对象 prod_base_process_resource + * + * @author Yinq + * @date 2025-05-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ProdBaseProcessResource.class, reverseConvertGenerate = false) +public class ProdBaseProcessResourceBo extends BaseEntity { + + /** + * 主键标识 + */ + private Long processResourceId; + + /** + * 工序ID + */ + private Long processId; + + /** + * 指派类型(1人员 2班组 3机台 4工位) + */ + private String assignmentType; + + /** + * 载具工装类型 + */ + private String toolingTypeCode; + + /** + * 必选标识(0可选 1必选) + */ + private String requiredFlag; + + /** + * 选择模式(0单选 1多选) + */ + private String selectionMode; + + /** + * 是否需要校验(0否 1是) + */ + private String requiresValidation; + + /** + * 是否需要准备任务(0否 1是) + */ + private String requiresPreparation; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseProcessInfoVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseProcessInfoVo.java index 3d0b6db..238eb31 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseProcessInfoVo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseProcessInfoVo.java @@ -1,7 +1,6 @@ package org.dromara.mes.domain.vo; import com.alibaba.excel.annotation.ExcelIgnore; -import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.mes.domain.ProdBaseProcessInfo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -9,12 +8,10 @@ import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; -import org.dromara.mes.domain.ProdBaseProcessProdLine; -import org.dromara.mes.domain.ProdBaseProcessUser; +import org.dromara.mes.domain.ProdBaseProcessResource; import java.io.Serial; import java.io.Serializable; -import java.util.Date; import java.util.List; @@ -22,7 +19,7 @@ import java.util.List; * 工序信息视图对象 prod_base_process_info * * @author Yinq - * @date 2025-01-06 + * @date 2025-05-29 */ @Data @ExcelIgnoreUnannotated @@ -38,12 +35,6 @@ public class ProdBaseProcessInfoVo implements Serializable { @ExcelProperty(value = "主键标识") private Long processId; - /** - * 租户编号 - */ - @ExcelProperty(value = "租户编号") - private String tenantId; - /** * 工序编号 */ @@ -64,9 +55,10 @@ public class ProdBaseProcessInfoVo implements Serializable { private String processType; /** - * 工序顺序 + * 工序顺序(弃用) */ - @ExcelProperty(value = "工序顺序") + @ExcelProperty(value = "工序顺序", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "弃=用") private Long processQueue; /** @@ -76,6 +68,96 @@ public class ProdBaseProcessInfoVo implements Serializable { @ExcelDictFormat(readConverterExp = "秒=") private Long productionTime; + /** + * 车间ID + */ + @ExcelProperty(value = "车间ID") + private Long workshopId; + + /** + * 委外标识(1自制 2委外) + */ + @ExcelProperty(value = "委外标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_outsourcing_flag") + private String outsourcingFlag; + + /** + * 工序生产类型(1投料 2加工 3装配) + */ + @ExcelProperty(value = "工序生产类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_process_production_type") + private String processProductionType; + + /** + * 默认产出率(%),公式:合格数/投入数 + */ + @ExcelProperty(value = "默认产出率", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "%=") + private Long defaultYieldRate; + + /** + * 损耗率(%),公式:废品/不可修复不良品占比 + */ + @ExcelProperty(value = "损耗率", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "%=") + private Long lossRate; + + /** + * 返修率(%),公式:返修品/投入数 + */ + @ExcelProperty(value = "返修率", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "%=") + private Long reworkRate; + + /** + * 领料方式(1领料单 2申请领料 3生产叫料) + */ + @ExcelProperty(value = "领料方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_material_method") + private String materialMethod; + + /** + * 委外提前期(秒) + */ + @ExcelProperty(value = "委外提前期", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "秒=") + private Long leadTime; + + /** + * 准备时间(秒) + */ + @ExcelProperty(value = "准备时间", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "秒=") + private Long setupTime; + + /** + * 加工时间(秒) + */ + @ExcelProperty(value = "加工时间", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "秒=") + private Long processingTime; + + /** + * 拆卸时间(秒) + */ + @ExcelProperty(value = "拆卸时间", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "秒=") + private Long disassemblyTime; + + /** + * 理论生产节拍(秒/件) + */ + @ExcelProperty(value = "理论生产节拍", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "秒=/件") + private Long theoreticalCycleTime; + + /** + * 质检方式(1免检 2自检 3质量检验) + */ + @ExcelProperty(value = "质检方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_inspection_method") + private String inspectionMethod; + /** * 激活标识(1是 0否) */ @@ -89,36 +171,6 @@ public class ProdBaseProcessInfoVo implements Serializable { @ExcelProperty(value = "备注") private String remark; - /** - * 创建部门 - */ - @ExcelProperty(value = "创建部门") - private Long createDept; - - /** - * 创建人 - */ - @ExcelProperty(value = "创建人") - private Long createBy; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - private Date createTime; - - /** - * 更新人 - */ - @ExcelProperty(value = "更新人") - private Long updateBy; - - /** - * 更新时间 - */ - @ExcelProperty(value = "更新时间") - private Date updateTime; - /** * 工序关联产线信息 */ @@ -132,4 +184,13 @@ public class ProdBaseProcessInfoVo implements Serializable { @ExcelIgnore private String processPercentageVo;//映射字段 + /** + * 车间名称 + */ + private String workshopName; + + /** + * 工序资源List + */ + List prodBaseProcessResourceList; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseProcessResourceVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseProcessResourceVo.java new file mode 100644 index 0000000..f27c418 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseProcessResourceVo.java @@ -0,0 +1,91 @@ +package org.dromara.mes.domain.vo; + +import org.dromara.mes.domain.ProdBaseProcessResource; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 工序资源信息视图对象 prod_base_process_resource + * + * @author Yinq + * @date 2025-05-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ProdBaseProcessResource.class) +public class ProdBaseProcessResourceVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键标识 + */ + @ExcelProperty(value = "主键标识") + private Long processResourceId; + + /** + * 工序ID + */ + private Long processId; + + /** + * 指派类型(1人员 2班组 3机台 4工位) + */ + @ExcelProperty(value = "指派类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_assignment_type") + private String assignmentType; + + /** + * 载具工装类型 + */ + @ExcelProperty(value = "载具工装类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "tooling_type_code") + private String toolingTypeCode; + + /** + * 必选标识(0可选 1必选) + */ + @ExcelProperty(value = "必选标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_required_flag") + private String requiredFlag; + + /** + * 选择模式(0单选 1多选) + */ + @ExcelProperty(value = "选择模式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_selection_mode") + private String selectionMode; + + /** + * 是否需要校验(0否 1是) + */ + @ExcelProperty(value = "是否需要校验", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_requires_validation") + private String requiresValidation; + + /** + * 是否需要准备任务(0否 1是) + */ + @ExcelProperty(value = "是否需要准备任务", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_requires_preparation") + private String requiresPreparation; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdBaseProcessResourceMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdBaseProcessResourceMapper.java new file mode 100644 index 0000000..9a7a5cc --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdBaseProcessResourceMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mes.mapper; + +import org.dromara.mes.domain.ProdBaseProcessResource; +import org.dromara.mes.domain.vo.ProdBaseProcessResourceVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 工序资源信息Mapper接口 + * + * @author Yinq + * @date 2025-05-29 + */ +public interface ProdBaseProcessResourceMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java index 16456f4..ba62653 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseProcessInfoServiceImpl.java @@ -12,26 +12,23 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.mes.domain.ProdBaseProcessProdLine; -import org.dromara.mes.domain.ProdBaseProcessUser; +import org.dromara.mes.domain.*; import org.dromara.mes.domain.bo.ProdBaseProcessProdLineBo; import org.dromara.mes.domain.bo.ProdBaseProcessUserBo; import org.dromara.mes.domain.vo.ProdBaseProcessProdLineVo; import org.dromara.mes.domain.vo.ProdBaseProcessUserVo; import org.dromara.mes.mapper.ProdBaseProcessProdLineMapper; +import org.dromara.mes.mapper.ProdBaseProcessResourceMapper; import org.dromara.mes.mapper.ProdBaseProcessUserMapper; import org.springframework.stereotype.Service; import org.dromara.mes.domain.bo.ProdBaseProcessInfoBo; import org.dromara.mes.domain.vo.ProdBaseProcessInfoVo; -import org.dromara.mes.domain.ProdBaseProcessInfo; import org.dromara.mes.mapper.ProdBaseProcessInfoMapper; import org.dromara.mes.service.IProdBaseProcessInfoService; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; /** * 工序信息Service业务层处理 @@ -52,7 +49,7 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi private final ProdBaseProcessUserMapper prodBaseProcessUserMapper; private final ProdBaseProcessProdLineMapper prodBaseProcessProdlineMapper; - + private final ProdBaseProcessResourceMapper processResourceMapper; /** @@ -62,7 +59,7 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi * @return 工序信息 */ @Override - public ProdBaseProcessInfoVo queryById(Long processId){ + public ProdBaseProcessInfoVo queryById(Long processId) { ProdBaseProcessInfoVo prodBaseProcessInfoVo = baseMapper.selectVoById(processId); if (ObjectUtil.isNotEmpty(prodBaseProcessInfoVo)) { // 关联人员 @@ -70,14 +67,21 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi prodBaseProcessUserBo.setProcessId(processId); List prodBaseProcessUserVoList = prodBaseProcessUserService.queryList(prodBaseProcessUserBo); // 关联人员若有数据,则赋值给prodBaseProcessInfoVo - if(ObjectUtil.isNotEmpty(prodBaseProcessUserVoList)) prodBaseProcessInfoVo.setProdBaseProcessUserVoList(prodBaseProcessUserVoList); + if (ObjectUtil.isNotEmpty(prodBaseProcessUserVoList)) + prodBaseProcessInfoVo.setProdBaseProcessUserVoList(prodBaseProcessUserVoList); // 关联产线 ProdBaseProcessProdLineBo prodBaseProcessProdlineBo = new ProdBaseProcessProdLineBo(); prodBaseProcessProdlineBo.setProcessId(processId); List prodBaseProcessProdlineVoList = prodBaseProcessProdlineService.queryList(prodBaseProcessProdlineBo); // 关联产线若有数据,则赋值给prodBaseProcessInfoVo - if(ObjectUtil.isNotEmpty(prodBaseProcessProdlineVoList)) prodBaseProcessInfoVo.setProdBaseProcessProdlineVoList(prodBaseProcessProdlineVoList); + if (ObjectUtil.isNotEmpty(prodBaseProcessProdlineVoList)) + prodBaseProcessInfoVo.setProdBaseProcessProdlineVoList(prodBaseProcessProdlineVoList); + // 关联工序资源 + MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdBaseProcessResource.class); + lqw.eq(ProdBaseProcessResource::getProcessId, processId); + List prodBaseProcessResourceList = processResourceMapper.selectList(lqw); + prodBaseProcessInfoVo.setProdBaseProcessResourceList(prodBaseProcessResourceList); } return prodBaseProcessInfoVo; } @@ -111,26 +115,24 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi private MPJLambdaWrapper buildQueryWrapper(ProdBaseProcessInfoBo bo) { Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdBaseProcessInfo.class) - .selectAll(ProdBaseProcessInfo.class) - + .selectAll(ProdBaseProcessInfo.class) + .select(ProdBaseWorkshopInfo::getWorkshopName) + .leftJoin(ProdBaseWorkshopInfo.class, ProdBaseWorkshopInfo::getWorkshopId, ProdBaseProcessInfo::getWorkshopId) /* // 关联人员 .select(ProdBaseProcessUser::getUserId) .select(ProdBaseProcessUser::getUserName) .leftJoin(ProdBaseProcessUser.class, ProdBaseProcessUser::getProcessId, ProdBaseProcessInfo::getProcessId) - // 关联产线 .select(ProdBaseProcessProdLine::getProdLineId) .leftJoin(ProdBaseProcessProdLine.class, ProdBaseProcessProdLine::getProcessId, ProdBaseProcessInfo::getProcessId)*/ - - - .eq(bo.getProcessId() != null, ProdBaseProcessInfo::getProcessId, bo.getProcessId()) - .eq(StringUtils.isNotBlank(bo.getProcessCode()), ProdBaseProcessInfo::getProcessCode, bo.getProcessCode()) - .like(StringUtils.isNotBlank(bo.getProcessName()), ProdBaseProcessInfo::getProcessName, bo.getProcessName()) - .eq(StringUtils.isNotBlank(bo.getProcessType()), ProdBaseProcessInfo::getProcessType, bo.getProcessType()) - .eq(bo.getProcessQueue() != null, ProdBaseProcessInfo::getProcessQueue, bo.getProcessQueue()) - .eq(bo.getProductionTime() != null, ProdBaseProcessInfo::getProductionTime, bo.getProductionTime()) - .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ProdBaseProcessInfo::getActiveFlag, bo.getActiveFlag()) - .orderByAsc(ProdBaseProcessInfo::getProcessQueue); + .eq(bo.getProcessId() != null, ProdBaseProcessInfo::getProcessId, bo.getProcessId()) + .eq(StringUtils.isNotBlank(bo.getProcessCode()), ProdBaseProcessInfo::getProcessCode, bo.getProcessCode()) + .like(StringUtils.isNotBlank(bo.getProcessName()), ProdBaseProcessInfo::getProcessName, bo.getProcessName()) + .eq(StringUtils.isNotBlank(bo.getProcessType()), ProdBaseProcessInfo::getProcessType, bo.getProcessType()) + .eq(bo.getProcessQueue() != null, ProdBaseProcessInfo::getProcessQueue, bo.getProcessQueue()) + .eq(bo.getProductionTime() != null, ProdBaseProcessInfo::getProductionTime, bo.getProductionTime()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ProdBaseProcessInfo::getActiveFlag, bo.getActiveFlag()) + .orderByAsc(ProdBaseProcessInfo::getProcessQueue); return lqw; } @@ -143,10 +145,17 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi @Override public Boolean insertByBo(ProdBaseProcessInfoBo bo) { ProdBaseProcessInfo add = MapstructUtils.convert(bo, ProdBaseProcessInfo.class); + List processResourceList = bo.getProdBaseProcessResourceList(); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setProcessId(add.getProcessId()); + if (!processResourceList.isEmpty()) { + for (ProdBaseProcessResource processResource : processResourceList) { + processResource.setProcessId(add.getProcessId()); + processResourceMapper.insert(processResource); + } + } } return flag; } @@ -157,34 +166,49 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi * @param bo 工序信息 * @return 是否修改成功 */ - @Transactional @Override + @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(ProdBaseProcessInfoBo bo) { ProdBaseProcessInfo update = MapstructUtils.convert(bo, ProdBaseProcessInfo.class); - - String tenantId = LoginHelper.getTenantId(); - Long deptId = LoginHelper.getDeptId(); - Long userId = LoginHelper.getUserId(); - if (ObjectUtil.isNotEmpty(tenantId)) update.setTenantId(tenantId); - if (ObjectUtil.isNotEmpty(deptId)) update.setCreateDept(deptId); - if (ObjectUtil.isNotEmpty(userId)) update.setCreateBy(userId); - update.setCreateTime(DateUtils.getNowDate()); - - +// String tenantId = LoginHelper.getTenantId(); +// Long deptId = LoginHelper.getDeptId(); +// Long userId = LoginHelper.getUserId(); +// if (ObjectUtil.isNotEmpty(tenantId)) update.setTenantId(tenantId); +// if (ObjectUtil.isNotEmpty(deptId)) update.setCreateDept(deptId); +// if (ObjectUtil.isNotEmpty(userId)) update.setCreateBy(userId); +// update.setCreateTime(DateUtils.getNowDate()); validEntityBeforeSave(update); - - List prodBaseProcessProdlineList = new ArrayList<>(); List prodBaseProcessProdlineBoList = bo.getProdBaseProcessProdlineBoList(); - if(ObjectUtil.isNotEmpty(prodBaseProcessProdlineBoList)){ - prodBaseProcessProdlineList = MapstructUtils.convert(prodBaseProcessProdlineBoList, ProdBaseProcessProdLine.class); + if (ObjectUtil.isNotEmpty(prodBaseProcessProdlineBoList)) { + List prodBaseProcessProdlineList = MapstructUtils.convert(prodBaseProcessProdlineBoList, ProdBaseProcessProdLine.class); update.setProdBaseProcessProdlineList(prodBaseProcessProdlineList); } baseMapper.deleteProdBaseProcessProdlineByProcessId(update.getProcessId()); try { insertProdBaseProcessProdline(update); - }catch (Exception e){ + } catch (Exception e) { throw new ServiceException("该工序已关联产线!"); } + + //更新工序关联资源 + List processResourceList = bo.getProdBaseProcessResourceList(); + MPJLambdaWrapper lqwRecord = JoinWrappers.lambda(ProdBaseProcessResource.class); + lqwRecord.eq(ProdBaseProcessResource::getProcessId, bo.getProcessId()); + List dataFieldList = processResourceMapper.selectList(lqwRecord); + if (!processResourceList.isEmpty()) { + for (ProdBaseProcessResource dataField : processResourceList) { + processResourceMapper.insertOrUpdate(dataField); + } + Set existingIds = processResourceList.stream() + .map(ProdBaseProcessResource::getProcessResourceId) + .collect(Collectors.toSet()); + List filteredIds = dataFieldList.stream() + .filter(field -> !existingIds.contains(field.getProcessResourceId())) + .toList(); + for (ProdBaseProcessResource dataField : filteredIds) { + processResourceMapper.deleteById(dataField.getProcessResourceId()); + } + } return baseMapper.updateById(update) > 0; } @@ -211,14 +235,14 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi List prodBaseProcessUserList = new ArrayList<>(); List prodBaseProcessUserBoList = bo.getProdBaseProcessUserBoList(); - if(ObjectUtil.isNotEmpty(prodBaseProcessUserBoList)){ + if (ObjectUtil.isNotEmpty(prodBaseProcessUserBoList)) { prodBaseProcessUserList = MapstructUtils.convert(prodBaseProcessUserBoList, ProdBaseProcessUser.class); } baseMapper.deleteProdBaseProcessUserByProcessId(update.getProcessId()); update.setProdBaseProcessUserList(prodBaseProcessUserList); try { insertProdBaseProcessUser(update); - }catch (Exception e){ + } catch (Exception e) { System.out.println(e.getMessage()); throw new ServiceException("该工序已关联用户!"); } @@ -226,18 +250,17 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi } - /** * 保存前的数据校验 */ - private void validEntityBeforeSave(ProdBaseProcessInfo entity){ + private void validEntityBeforeSave(ProdBaseProcessInfo entity) { //TODO 做一些数据校验,如唯一约束 // 判断编码是否重复 if (StringUtils.isNotBlank(entity.getProcessCode())) { ProdBaseProcessInfoBo query = new ProdBaseProcessInfoBo(); query.setProcessCode(entity.getProcessCode()); MPJLambdaWrapper lqw = buildQueryWrapper(query); - ProdBaseProcessInfo prodBaseProcessInfo = baseMapper.selectOne(lqw); + ProdBaseProcessInfo prodBaseProcessInfo = baseMapper.selectOne(lqw); if (prodBaseProcessInfo != null && !prodBaseProcessInfo.getProcessId().equals(entity.getProcessId())) { throw new ServiceException("编码已存在"); } @@ -253,7 +276,7 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; @@ -279,32 +302,32 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi if (!list.isEmpty()) { prodBaseProcessProdlineMapper.insertBatch(list); } + } + } + + /** + * 新增工序关联用户信息 + * + * @param prodBaseProcessInfo 工序信息对象 + */ + public void insertProdBaseProcessUser(ProdBaseProcessInfo prodBaseProcessInfo) { + List prodBaseProcessUserList = prodBaseProcessInfo.getProdBaseProcessUserList(); + Long processId = prodBaseProcessInfo.getProcessId(); + if (ObjectUtil.isNotNull(prodBaseProcessUserList)) { + List list = new ArrayList(); + for (ProdBaseProcessUser prodBaseProcessUser : prodBaseProcessUserList) { + prodBaseProcessUser.setCreateBy(prodBaseProcessInfo.getCreateBy()); + prodBaseProcessUser.setCreateTime(prodBaseProcessInfo.getCreateTime()); + prodBaseProcessUser.setCreateDept(prodBaseProcessInfo.getCreateDept()); + prodBaseProcessUser.setTenantId(prodBaseProcessInfo.getTenantId()); + + list.add(prodBaseProcessUser); + } + if (!list.isEmpty()) { + prodBaseProcessUserMapper.insertBatch(list); } } - /** - * 新增工序关联用户信息 - * - * @param prodBaseProcessInfo 工序信息对象 - */ - public void insertProdBaseProcessUser(ProdBaseProcessInfo prodBaseProcessInfo) { - List prodBaseProcessUserList = prodBaseProcessInfo.getProdBaseProcessUserList(); - Long processId = prodBaseProcessInfo.getProcessId(); - if (ObjectUtil.isNotNull(prodBaseProcessUserList)) { - List list = new ArrayList(); - for (ProdBaseProcessUser prodBaseProcessUser : prodBaseProcessUserList) { - prodBaseProcessUser.setCreateBy(prodBaseProcessInfo.getCreateBy()); - prodBaseProcessUser.setCreateTime(prodBaseProcessInfo.getCreateTime()); - prodBaseProcessUser.setCreateDept(prodBaseProcessInfo.getCreateDept()); - prodBaseProcessUser.setTenantId(prodBaseProcessInfo.getTenantId()); - - list.add(prodBaseProcessUser); - } - if (!list.isEmpty()) { - prodBaseProcessUserMapper.insertBatch(list); - } - } - } - + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdBaseProcessResourceMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdBaseProcessResourceMapper.xml new file mode 100644 index 0000000..99b4919 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdBaseProcessResourceMapper.xml @@ -0,0 +1,7 @@ + + + + +