diff --git a/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/DatabaseConstants.java b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/DatabaseConstants.java index c15ae45e..fbce6da5 100644 --- a/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/DatabaseConstants.java +++ b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/DatabaseConstants.java @@ -12,5 +12,10 @@ public interface DatabaseConstants { */ String TABLE_NAME_PROD_PLAN_INFO_PREFIX = "prod_plan_info"; + /** + * 生产信息表名前缀 + */ + String TABLE_NAME_PROD_PRODUCT_PLAN_DETAIL_PREFIX = "prod_product_plan_detail"; + } diff --git a/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/provider/DynamicBaseSqlProvider.java b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/provider/DynamicBaseSqlProvider.java index 97ffc215..8438b436 100644 --- a/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/provider/DynamicBaseSqlProvider.java +++ b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/provider/DynamicBaseSqlProvider.java @@ -23,6 +23,18 @@ public class DynamicBaseSqlProvider { "#{entity.processId}", "#{entity.planBeginTime}", "#{entity.planEndTime}", "#{entity.releaseType}", "#{entity.releaseId}", "#{entity.shiftId}", "#{entity.importFlag}", "#{entity.classTeamId}", "#{entity.modelCode}", "#{entity.createDept}", "#{entity.createBy}", "#{entity.createTime}"); break; + case "prod_product_plan_detail": + sql.INTO_COLUMNS("plan_detail_code", "plan_id", "plan_code", "user_id", "user_name", + "classes_id", "team_id", "complete_amount", "unit_id", "unit_name", "real_begin_time", "real_end_time", + "attach_id", "material_barcode", "return_barcode", "train_number", "tooling_id", "capsule_id", "shift_change_id", + "alarm_flag", "supple_flag", "remark", "create_dept", "create_by", "create_time"); + sql.INTO_VALUES("#{entity.planDetailCode}", "#{entity.planId}", "#{entity.planCode}", + "#{entity.userId}", "#{entity.userName}", "#{entity.classesId}", "#{entity.teamId}", "#{entity.completeAmount}", + "#{entity.unitId}", "#{entity.unitName}", "#{entity.realBeginTime}", "#{entity.realEndTime}", "#{entity.attachId}", + "#{entity.materialBarcode}", "#{entity.returnBarcode}", "#{entity.trainNumber}", "#{entity.toolingId}", + "#{entity.capsuleId}", "#{entity.shiftChangeId}", "#{entity.alarmFlag}", + "#{entity.suppleFlag}", "#{entity.remark}", "#{entity.createDept}", "#{entity.createBy}", "#{entity.createTime}"); + break; } return sql.toString(); } @@ -76,10 +88,83 @@ public class DynamicBaseSqlProvider { } sql.SET("update_by = #{entity.updateBy}"); sql.SET("update_time = #{entity.updateTime}"); + if (hasFieldValue(entity, "planId")) { + sql.WHERE("plan_id = #{entity.planId}"); + } + break; + case "prod_product_plan_detail": + if (hasFieldValue(entity, "planDetailCode")) { + sql.SET("plan_detail_code = #{entity.planDetailCode}"); + } + if (hasFieldValue(entity, "planId")) { + sql.SET("plan_id = #{entity.planId}"); + } + if (hasFieldValue(entity, "planCode")) { + sql.SET("plan_code = #{entity.planCode}"); + } + if (hasFieldValue(entity, "userId")) { + sql.SET("user_id = #{entity.userId}"); + } + if (hasFieldValue(entity, "userName")) { + sql.SET("user_name = #{entity.userName}"); + } + if (hasFieldValue(entity, "classesId")) { + sql.SET("classes_id = #{entity.classesId}"); + } + if (hasFieldValue(entity, "teamId")) { + sql.SET("team_id = #{entity.teamId}"); + } + if (hasFieldValue(entity, "completeAmount")) { + sql.SET("complete_amount = #{entity.completeAmount}"); + } + if (hasFieldValue(entity, "unitId")) { + sql.SET("unit_id = #{entity.unitId}"); + } + if (hasFieldValue(entity, "unitName")) { + sql.SET("unit_name = #{entity.unitName}"); + } + if (hasFieldValue(entity, "realBeginTime")) { + sql.SET("real_begin_time = #{entity.realBeginTime}"); + } + if (hasFieldValue(entity, "realEndTime")) { + sql.SET("real_end_time = #{entity.realEndTime}"); + } + if (hasFieldValue(entity, "attachId")) { + sql.SET("attach_id = #{entity.attachId}"); + } + if (hasFieldValue(entity, "materialBarcode")) { + sql.SET("material_barcode = #{entity.materialBarcode}"); + } + if (hasFieldValue(entity, "returnBarcode")) { + sql.SET("return_barcode = #{entity.returnBarcode}"); + } + if (hasFieldValue(entity, "trainNumber")) { + sql.SET("train_number = #{entity.trainNumber}"); + } + if (hasFieldValue(entity, "toolingId")) { + sql.SET("tooling_id = #{entity.toolingId}"); + } + if (hasFieldValue(entity, "capsuleId")) { + sql.SET("capsule_id = #{entity.capsuleId}"); + } + if (hasFieldValue(entity, "shiftChangeId")) { + sql.SET("shift_change_id = #{entity.shiftChangeId}"); + } + if (hasFieldValue(entity, "alarmFlag")) { + sql.SET("alarm_flag = #{entity.alarmFlag}"); + } + if (hasFieldValue(entity, "suppleFlag")) { + sql.SET("supple_flag = #{entity.suppleFlag}"); + } + if (hasFieldValue(entity, "remark")) { + sql.SET("remark = #{entity.remark}"); + } + sql.SET("update_by = #{entity.updateBy}"); + sql.SET("update_time = #{entity.updateTime}"); + if (hasFieldValue(entity, "planDetailId")) { + sql.WHERE("plan_detail_id = #{entity.planDetailId}"); + } break; - } - if (hasFieldValue(entity, "planId")) { - sql.WHERE("plan_id = #{entity.planId}"); } return sql.toString(); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdProductPlanDetailController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdProductPlanDetailController.java new file mode 100644 index 00000000..c8729821 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdProductPlanDetailController.java @@ -0,0 +1,116 @@ +package org.dromara.mes.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.mes.domain.vo.ProdProductPlanDetailVo; +import org.dromara.mes.domain.bo.ProdProductPlanDetailBo; +import org.dromara.mes.service.IProdProductPlanDetailService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 生产信息 + * 前端访问路由地址为:/mes/productPlanDetail + * + * @author Yinq + * @date 2025-03-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productPlanDetail") +public class ProdProductPlanDetailController extends BaseController { + + private final IProdProductPlanDetailService prodProductPlanDetailService; + + /** + * 查询生产信息列表 + */ + @SaCheckPermission("mes:productPlanDetail:list") + @GetMapping("/list") + public TableDataInfo list(ProdProductPlanDetailBo bo, PageQuery pageQuery) { + return prodProductPlanDetailService.queryPageList(bo, pageQuery); + } + + /** + * 导出生产信息列表 + */ + @SaCheckPermission("mes:productPlanDetail:export") + @Log(title = "生产信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ProdProductPlanDetailBo bo, HttpServletResponse response) { + List list = prodProductPlanDetailService.queryList(bo); + ExcelUtil.exportExcel(list, "生产信息", ProdProductPlanDetailVo.class, response); + } + + /** + * 获取生产信息详细信息 + * + * @param planDetailId 主键 + */ + @SaCheckPermission("mes:productPlanDetail:query") + @GetMapping("/{planDetailId}/{workshopId}") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long planDetailId , @PathVariable Long workshopId) { + return R.ok(prodProductPlanDetailService.queryById(planDetailId, workshopId)); + } + + /** + * 新增生产信息 + */ + @SaCheckPermission("mes:productPlanDetail:add") + @Log(title = "生产信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ProdProductPlanDetailBo bo) { + return toAjax(prodProductPlanDetailService.insertByBo(bo)); + } + + /** + * 修改生产信息 + */ + @SaCheckPermission("mes:productPlanDetail:edit") + @Log(title = "生产信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ProdProductPlanDetailBo bo) { + return toAjax(prodProductPlanDetailService.updateByBo(bo)); + } + + /** + * 删除生产信息 + * + * @param planDetailIds 主键串 + */ + @SaCheckPermission("mes:productPlanDetail:remove") + @Log(title = "生产信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{planDetailIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] planDetailIds) { + return toAjax(prodProductPlanDetailService.deleteWithValidByIds(List.of(planDetailIds), true)); + } + + + /** + * 下拉框查询生产信息列表 + */ + @GetMapping("/getProdProductPlanDetailList") + public R> getProdProductPlanDetailList(ProdProductPlanDetailBo bo) { + List list = prodProductPlanDetailService.queryList(bo); + return R.ok(list); + } + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdProductPlanDetail.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdProductPlanDetail.java new file mode 100644 index 00000000..4920d3b6 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdProductPlanDetail.java @@ -0,0 +1,173 @@ +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.util.Date; + +import java.io.Serial; + +/** + * 生产信息对象 prod_product_plan_detail + * + * @author Yinq + * @date 2025-03-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("prod_product_plan_detail") +public class ProdProductPlanDetail extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键标识 + */ + @TableId(value = "plan_detail_id", type = IdType.AUTO) + private Long planDetailId; + + /** + * 明细编号 + */ + private String planDetailCode; + + /** + * 生产计划ID + */ + private Long planId; + + /** + * 计划编号 + */ + private String planCode; + + /** + * 操作人员ID;多个人,分隔 + */ + private String userId; + + /** + * 操作人员名称;多个人,分隔 + */ + private String userName; + + /** + * 班次ID + */ + private Long classesId; + + /** + * 班组ID + */ + private Long teamId; + + /** + * 完成数量 + */ + private Long completeAmount; + + /** + * 单位ID + */ + private Long unitId; + + /** + * 单位名称 + */ + private String unitName; + + /** + * 实际开始时间 + */ + private Date realBeginTime; + + /** + * 实际完成时间 + */ + private Date realEndTime; + + /** + * 附件信息 + */ + private String attachId; + + /** + * 物料条码 + */ + private String materialBarcode; + + /** + * 流转条码;条形码 + */ + private String returnBarcode; + + /** + * 车次(顺序) + */ + private Long trainNumber; + + /** + * 工装ID;托盘ID;台车ID + */ + private Long toolingId; + + /** + * 胶囊ID + */ + private Long capsuleId; + + /** + * 接班ID + */ + private Long shiftChangeId; + + /** + * 半制品明细ID + */ + private Long sfpDetailId; + + /** + * 成型明细ID + */ + private Long formingDetailId; + + /** + * 硫化明细ID + */ + private Long vulDetailId; + + /** + * 明细状态(1未开始 2已开始 3已完成 9异常完成) + */ + private String planDetailStatus; + + /** + * 首件标识(1是 0否) + */ + private String firstFlag; + + /** + * 报警胎标识(1是 0否) + */ + private String alarmFlag; + + /** + * 补录标识(1是 0否) + */ + private String suppleFlag; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标识(1是 0否) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdProductPlanDetailBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdProductPlanDetailBo.java new file mode 100644 index 00000000..cb8322c8 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdProductPlanDetailBo.java @@ -0,0 +1,178 @@ +package org.dromara.mes.domain.bo; + +import org.dromara.mes.domain.ProdProductPlanDetail; +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.*; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 生产信息业务对象 prod_product_plan_detail + * + * @author Yinq + * @date 2025-03-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ProdProductPlanDetail.class, reverseConvertGenerate = false) +public class ProdProductPlanDetailBo extends BaseEntity { + + /** + * 主键标识 + */ + private Long planDetailId; + + /** + * 明细编号 + */ + private String planDetailCode; + + /** + * 生产计划ID + */ + @NotNull(message = "生产计划ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long planId; + + /** + * 计划编号 + */ + @NotBlank(message = "计划编号不能为空", groups = {AddGroup.class, EditGroup.class}) + private String planCode; + + /** + * 操作人员ID;多个人,分隔 + */ + private String userId; + + /** + * 操作人员名称;多个人,分隔 + */ + private String userName; + + /** + * 班次ID + */ + @NotNull(message = "班次ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long classesId; + + /** + * 班组ID + */ + @NotNull(message = "班组ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long teamId; + + /** + * 完成数量 + */ + @NotNull(message = "完成数量不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long completeAmount; + + /** + * 单位ID + */ + private Long unitId; + + /** + * 单位名称 + */ + private String unitName; + + /** + * 实际开始时间 + */ + private Date realBeginTime; + + /** + * 实际完成时间 + */ + private Date realEndTime; + + /** + * 附件信息 + */ + private String attachId; + + /** + * 物料条码 + */ + private String materialBarcode; + + /** + * 流转条码;条形码 + */ + private String returnBarcode; + + /** + * 车次(顺序) + */ + private Long trainNumber; + + /** + * 工装ID;托盘ID;台车ID + */ + private Long toolingId; + + /** + * 胶囊ID + */ + private Long capsuleId; + + /** + * 接班ID + */ + private Long shiftChangeId; + + /** + * 半制品明细ID + */ + private Long sfpDetailId; + + /** + * 成型明细ID + */ + private Long formingDetailId; + + /** + * 硫化明细ID + */ + private Long vulDetailId; + + /** + * 明细状态(1未开始 2已开始 3已完成 9异常完成) + */ + private String planDetailStatus; + + /** + * 首件标识(1是 0否) + */ + private String firstFlag; + + /** + * 报警胎标识(1是 0否) + */ + private String alarmFlag; + + /** + * 补录标识(1是 0否) + */ + private String suppleFlag; + + /** + * 备注 + */ + private String remark; + + /** + * 车间ID + */ + private Long workshopId; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdProductPlanDetailVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdProductPlanDetailVo.java new file mode 100644 index 00000000..124cf5fe --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdProductPlanDetailVo.java @@ -0,0 +1,207 @@ +package org.dromara.mes.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.mes.domain.ProdProductPlanDetail; +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_product_plan_detail + * + * @author Yinq + * @date 2025-03-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ProdProductPlanDetail.class) +public class ProdProductPlanDetailVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键标识 + */ + @ExcelProperty(value = "主键标识") + private Long planDetailId; + + /** + * 明细编号 + */ + @ExcelProperty(value = "明细编号") + private String planDetailCode; + + /** + * 生产计划ID + */ + @ExcelProperty(value = "生产计划ID") + private Long planId; + + /** + * 计划编号 + */ + @ExcelProperty(value = "计划编号") + private String planCode; + + /** + * 操作人员ID;多个人,分隔 + */ + @ExcelProperty(value = "操作人员ID;多个人,分隔") + private String userId; + + /** + * 操作人员名称;多个人,分隔 + */ + @ExcelProperty(value = "操作人员名称;多个人,分隔") + private String userName; + + /** + * 班次ID + */ + @ExcelProperty(value = "班次ID") + private Long classesId; + + /** + * 班组ID + */ + @ExcelProperty(value = "班组ID") + private Long teamId; + + /** + * 完成数量 + */ + @ExcelProperty(value = "完成数量") + private Long completeAmount; + + /** + * 单位ID + */ + @ExcelProperty(value = "单位ID") + private Long unitId; + + /** + * 单位名称 + */ + @ExcelProperty(value = "单位名称") + private String unitName; + + /** + * 实际开始时间 + */ + @ExcelProperty(value = "实际开始时间") + private Date realBeginTime; + + /** + * 实际完成时间 + */ + @ExcelProperty(value = "实际完成时间") + private Date realEndTime; + + /** + * 附件信息 + */ + @ExcelProperty(value = "附件信息") + private String attachId; + + /** + * 物料条码 + */ + @ExcelProperty(value = "物料条码") + private String materialBarcode; + + /** + * 流转条码;条形码 + */ + @ExcelProperty(value = "流转条码;条形码") + private String returnBarcode; + + /** + * 车次(顺序) + */ + @ExcelProperty(value = "车次", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "顺=序") + private Long trainNumber; + + /** + * 工装ID;托盘ID;台车ID + */ + @ExcelProperty(value = "工装ID;托盘ID;台车ID") + private Long toolingId; + + /** + * 胶囊ID + */ + @ExcelProperty(value = "胶囊ID") + private Long capsuleId; + + /** + * 接班ID + */ + @ExcelProperty(value = "接班ID") + private Long shiftChangeId; + + /** + * 半制品明细ID + */ + @ExcelProperty(value = "半制品明细ID") + private Long sfpDetailId; + + /** + * 成型明细ID + */ + @ExcelProperty(value = "成型明细ID") + private Long formingDetailId; + + /** + * 硫化明细ID + */ + @ExcelProperty(value = "硫化明细ID") + private Long vulDetailId; + + /** + * 明细状态(1未开始 2已开始 3已完成 9异常完成) + */ + @ExcelProperty(value = "明细状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_plan_detail_status") + private String planDetailStatus; + + /** + * 首件标识(1是 0否) + */ + @ExcelProperty(value = "首件标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String firstFlag; + + /** + * 报警胎标识(1是 0否) + */ + @ExcelProperty(value = "报警胎标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String alarmFlag; + + /** + * 补录标识(1是 0否) + */ + @ExcelProperty(value = "补录标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String suppleFlag; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdProductPlanDetailMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdProductPlanDetailMapper.java new file mode 100644 index 00000000..3c27641a --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdProductPlanDetailMapper.java @@ -0,0 +1,25 @@ +package org.dromara.mes.mapper; + +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import org.apache.ibatis.annotations.Param; +import org.dromara.mes.domain.ProdProductPlanDetail; +import org.dromara.mes.domain.vo.ProdProductPlanDetailVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +import java.util.List; + + +/** + * 生产信息Mapper接口 + * + * @author Yinq + * @date 2025-03-05 + */ +public interface ProdProductPlanDetailMapper extends BaseMapperPlus { + + Page selectProdProductPlanDetailList(@Param("page") Page build, @Param("tableName") String tableName, @Param(Constants.WRAPPER) MPJLambdaWrapper lqw); + + List selectProdProductPlanDetailList(@Param("tableName") String tableName, @Param(Constants.WRAPPER) MPJLambdaWrapper lqw); +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdProductPlanDetailService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdProductPlanDetailService.java new file mode 100644 index 00000000..732e4618 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdProductPlanDetailService.java @@ -0,0 +1,68 @@ +package org.dromara.mes.service; + +import org.dromara.mes.domain.vo.ProdProductPlanDetailVo; +import org.dromara.mes.domain.bo.ProdProductPlanDetailBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 生产信息Service接口 + * + * @author Yinq + * @date 2025-03-05 + */ +public interface IProdProductPlanDetailService { + + /** + * 查询生产信息 + * + * @param planDetailId 主键 + * @return 生产信息 + */ + ProdProductPlanDetailVo queryById(Long planDetailId, Long workshopId); + + /** + * 分页查询生产信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 生产信息分页列表 + */ + TableDataInfo queryPageList(ProdProductPlanDetailBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的生产信息列表 + * + * @param bo 查询条件 + * @return 生产信息列表 + */ + List queryList(ProdProductPlanDetailBo bo); + + /** + * 新增生产信息 + * + * @param bo 生产信息 + * @return 是否新增成功 + */ + Boolean insertByBo(ProdProductPlanDetailBo bo); + + /** + * 修改生产信息 + * + * @param bo 生产信息 + * @return 是否修改成功 + */ + Boolean updateByBo(ProdProductPlanDetailBo bo); + + /** + * 校验并批量删除生产信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java new file mode 100644 index 00000000..6600d77f --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java @@ -0,0 +1,182 @@ +package org.dromara.mes.service.impl; + +import org.dromara.common.constant.DatabaseConstants; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mapper.DynamicBaseSqlMapper; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.mes.domain.ProdPlanInfo; +import org.dromara.mes.domain.vo.ProdPlanInfoVo; +import org.springframework.stereotype.Service; +import org.dromara.mes.domain.bo.ProdProductPlanDetailBo; +import org.dromara.mes.domain.vo.ProdProductPlanDetailVo; +import org.dromara.mes.domain.ProdProductPlanDetail; +import org.dromara.mes.mapper.ProdProductPlanDetailMapper; +import org.dromara.mes.service.IProdProductPlanDetailService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 生产信息Service业务层处理 + * + * @author Yinq + * @date 2025-03-05 + */ +@RequiredArgsConstructor +@Service +public class ProdProductPlanDetailServiceImpl implements IProdProductPlanDetailService { + + private final ProdProductPlanDetailMapper baseMapper; + + private final DynamicBaseSqlMapper dynamicBaseSqlMapper; + + /** + * 查询生产信息 + * + * @param planDetailId 主键 + * @return 生产信息 + */ + @Override + public ProdProductPlanDetailVo queryById(Long planDetailId, Long workshopId) { + ProdProductPlanDetailBo bo = new ProdProductPlanDetailBo(); + String tableName = getPlanDetailTableName(workshopId); + bo.setPlanDetailId(planDetailId); + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + List voList = baseMapper.selectProdProductPlanDetailList(tableName, lqw); + return voList.get(0); + } + + /** + * 分页查询生产信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 生产信息分页列表 + */ + @Override + public TableDataInfo queryPageList(ProdProductPlanDetailBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + String tableName = getPlanDetailTableName(bo.getWorkshopId()); + Page result = baseMapper.selectProdProductPlanDetailList(pageQuery.build(), tableName, lqw); + return TableDataInfo.build(result); + } + + + /** + * 查询符合条件的生产信息列表 + * + * @param bo 查询条件 + * @return 生产信息列表 + */ + @Override + public List queryList(ProdProductPlanDetailBo bo) { + String tableName = getPlanDetailTableName(bo.getWorkshopId()); + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectProdProductPlanDetailList(tableName, lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ProdProductPlanDetailBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdProductPlanDetail.class) + .selectAll(ProdProductPlanDetail.class) + .eq(bo.getPlanDetailId() != null, ProdProductPlanDetail::getPlanDetailId, bo.getPlanDetailId()) + .eq(StringUtils.isNotBlank(bo.getPlanDetailCode()), ProdProductPlanDetail::getPlanDetailCode, bo.getPlanDetailCode()) + .eq(bo.getPlanId() != null, ProdProductPlanDetail::getPlanId, bo.getPlanId()) + .eq(StringUtils.isNotBlank(bo.getPlanCode()), ProdProductPlanDetail::getPlanCode, bo.getPlanCode()) + .eq(StringUtils.isNotBlank(bo.getUserId()), ProdProductPlanDetail::getUserId, bo.getUserId()) + .like(StringUtils.isNotBlank(bo.getUserName()), ProdProductPlanDetail::getUserName, bo.getUserName()) + .eq(bo.getClassesId() != null, ProdProductPlanDetail::getClassesId, bo.getClassesId()) + .eq(bo.getTeamId() != null, ProdProductPlanDetail::getTeamId, bo.getTeamId()) + .eq(bo.getCompleteAmount() != null, ProdProductPlanDetail::getCompleteAmount, bo.getCompleteAmount()) + .eq(bo.getUnitId() != null, ProdProductPlanDetail::getUnitId, bo.getUnitId()) + .like(StringUtils.isNotBlank(bo.getUnitName()), ProdProductPlanDetail::getUnitName, bo.getUnitName()) + .eq(bo.getRealBeginTime() != null, ProdProductPlanDetail::getRealBeginTime, bo.getRealBeginTime()) + .eq(bo.getRealEndTime() != null, ProdProductPlanDetail::getRealEndTime, bo.getRealEndTime()) + .eq(StringUtils.isNotBlank(bo.getAttachId()), ProdProductPlanDetail::getAttachId, bo.getAttachId()) + .eq(StringUtils.isNotBlank(bo.getMaterialBarcode()), ProdProductPlanDetail::getMaterialBarcode, bo.getMaterialBarcode()) + .eq(StringUtils.isNotBlank(bo.getReturnBarcode()), ProdProductPlanDetail::getReturnBarcode, bo.getReturnBarcode()) + .eq(bo.getTrainNumber() != null, ProdProductPlanDetail::getTrainNumber, bo.getTrainNumber()) + .eq(bo.getToolingId() != null, ProdProductPlanDetail::getToolingId, bo.getToolingId()) + .eq(bo.getCapsuleId() != null, ProdProductPlanDetail::getCapsuleId, bo.getCapsuleId()) + .eq(bo.getShiftChangeId() != null, ProdProductPlanDetail::getShiftChangeId, bo.getShiftChangeId()) + .eq(StringUtils.isNotBlank(bo.getPlanDetailStatus()), ProdProductPlanDetail::getPlanDetailStatus, bo.getPlanDetailStatus()) + .eq(StringUtils.isNotBlank(bo.getFirstFlag()), ProdProductPlanDetail::getFirstFlag, bo.getFirstFlag()) + .eq(StringUtils.isNotBlank(bo.getAlarmFlag()), ProdProductPlanDetail::getAlarmFlag, bo.getAlarmFlag()) + .eq(StringUtils.isNotBlank(bo.getSuppleFlag()), ProdProductPlanDetail::getSuppleFlag, bo.getSuppleFlag()) + .orderByDesc(ProdProductPlanDetail::getCreateTime); + return lqw; + } + + /** + * 新增生产信息 + * + * @param bo 生产信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ProdProductPlanDetailBo bo) { + ProdProductPlanDetail add = MapstructUtils.convert(bo, ProdProductPlanDetail.class); + validEntityBeforeSave(add); + String tableName = getPlanDetailTableName(bo.getWorkshopId()); + boolean flag = dynamicBaseSqlMapper.dynamicInsert(tableName, DatabaseConstants.TABLE_NAME_PROD_PRODUCT_PLAN_DETAIL_PREFIX, add) > 0; + if (flag) { + bo.setPlanDetailId(add.getPlanDetailId()); + } + return flag; + } + + /** + * 修改生产信息 + * + * @param bo 生产信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ProdProductPlanDetailBo bo) { + ProdProductPlanDetail update = MapstructUtils.convert(bo, ProdProductPlanDetail.class); + validEntityBeforeSave(update); + String tableName = getPlanDetailTableName(bo.getWorkshopId()); + return dynamicBaseSqlMapper.dynamicUpdate(tableName, DatabaseConstants.TABLE_NAME_PROD_PLAN_INFO_PREFIX, update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ProdProductPlanDetail entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除生产信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + private String getPlanDetailTableName(Long workshopId) { + String tableName = null; + if (StringUtils.isNull(workshopId)) { + tableName = DatabaseConstants.TABLE_NAME_PROD_PRODUCT_PLAN_DETAIL_PREFIX; + } else { + tableName = DatabaseConstants.TABLE_NAME_PROD_PRODUCT_PLAN_DETAIL_PREFIX + "_" + workshopId; + } + return tableName; + } + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdProductPlanDetailMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdProductPlanDetailMapper.xml new file mode 100644 index 00000000..e5a47fc2 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdProductPlanDetailMapper.xml @@ -0,0 +1,20 @@ + + + + + + + +