From faaa5b1b75ce6e8bf7d1700abfc1eafb500cc884 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 23 Jun 2026 13:52:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow):=20=E6=B7=BB=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E4=BA=A7=E5=8D=95=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建排产单主实体类、业务对象和视图对象 - 创建排产单明细实体类、业务对象和视图对象 - 实现排产单主和明细的服务层接口及实现类 - 添加排产单主和明细的数据访问层映射器 - 配置MyBatis映射XML文件 - 实现排产单主和明细的控制器REST接口 - 添加分页查询、新增、修改、删除等基本操作功能 - 集成Excel导出功能 - 添加数据验证和业务逻辑处理 --- .../controller/SchProdScheduleController.java | 99 +++++++++ .../SchProdScheduleDetailController.java | 99 +++++++++ .../SchSaleScheduleRelController.java | 99 +++++++++ .../com/klp/flow/domain/SchProdSchedule.java | 140 +++++++++++++ .../flow/domain/SchProdScheduleDetail.java | 62 ++++++ .../klp/flow/domain/SchSaleScheduleRel.java | 50 +++++ .../klp/flow/domain/bo/SchProdScheduleBo.java | 159 +++++++++++++++ .../domain/bo/SchProdScheduleDetailBo.java | 62 ++++++ .../flow/domain/bo/SchSaleScheduleRelBo.java | 47 +++++ .../domain/vo/SchProdScheduleDetailVo.java | 73 +++++++ .../klp/flow/domain/vo/SchProdScheduleVo.java | 190 ++++++++++++++++++ .../flow/domain/vo/SchSaleScheduleRelVo.java | 54 +++++ .../mapper/SchProdScheduleDetailMapper.java | 15 ++ .../flow/mapper/SchProdScheduleMapper.java | 15 ++ .../flow/mapper/SchSaleScheduleRelMapper.java | 15 ++ .../ISchProdScheduleDetailService.java | 49 +++++ .../flow/service/ISchProdScheduleService.java | 49 +++++ .../service/ISchSaleScheduleRelService.java | 49 +++++ .../SchProdScheduleDetailServiceImpl.java | 114 +++++++++++ .../impl/SchProdScheduleServiceImpl.java | 133 ++++++++++++ .../impl/SchSaleScheduleRelServiceImpl.java | 110 ++++++++++ .../flow/SchProdScheduleDetailMapper.xml | 24 +++ .../mapper/flow/SchProdScheduleMapper.xml | 43 ++++ .../mapper/flow/SchSaleScheduleRelMapper.xml | 21 ++ 24 files changed, 1771 insertions(+) create mode 100644 klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleController.java create mode 100644 klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleDetailController.java create mode 100644 klp-flow/src/main/java/com/klp/flow/controller/SchSaleScheduleRelController.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/SchProdSchedule.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/SchSaleScheduleRel.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleBo.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/bo/SchSaleScheduleRelBo.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/vo/SchSaleScheduleRelVo.java create mode 100644 klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleDetailMapper.java create mode 100644 klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleMapper.java create mode 100644 klp-flow/src/main/java/com/klp/flow/mapper/SchSaleScheduleRelMapper.java create mode 100644 klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleDetailService.java create mode 100644 klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleService.java create mode 100644 klp-flow/src/main/java/com/klp/flow/service/ISchSaleScheduleRelService.java create mode 100644 klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java create mode 100644 klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java create mode 100644 klp-flow/src/main/java/com/klp/flow/service/impl/SchSaleScheduleRelServiceImpl.java create mode 100644 klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml create mode 100644 klp-flow/src/main/resources/mapper/flow/SchProdScheduleMapper.xml create mode 100644 klp-flow/src/main/resources/mapper/flow/SchSaleScheduleRelMapper.xml diff --git a/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleController.java b/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleController.java new file mode 100644 index 000000000..9913e0458 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleController.java @@ -0,0 +1,99 @@ +package com.klp.flow.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.flow.domain.vo.SchProdScheduleVo; +import com.klp.flow.domain.bo.SchProdScheduleBo; +import com.klp.flow.service.ISchProdScheduleService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 排产单主 + * + * @author klp + * @date 2026-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/flow/prodSchedule") +public class SchProdScheduleController extends BaseController { + + private final ISchProdScheduleService iSchProdScheduleService; + + /** + * 查询排产单主列表 + */ + @GetMapping("/list") + public TableDataInfo list(SchProdScheduleBo bo, PageQuery pageQuery) { + return iSchProdScheduleService.queryPageList(bo, pageQuery); + } + + /** + * 导出排产单主列表 + */ + @Log(title = "排产单主", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SchProdScheduleBo bo, HttpServletResponse response) { + List list = iSchProdScheduleService.queryList(bo); + ExcelUtil.exportExcel(list, "排产单主", SchProdScheduleVo.class, response); + } + + /** + * 获取排产单主详细信息 + * + * @param scheduleId 主键 + */ + @GetMapping("/{scheduleId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long scheduleId) { + return R.ok(iSchProdScheduleService.queryById(scheduleId)); + } + + /** + * 新增排产单主 + */ + @Log(title = "排产单主", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchProdScheduleBo bo) { + return toAjax(iSchProdScheduleService.insertByBo(bo)); + } + + /** + * 修改排产单主 + */ + @Log(title = "排产单主", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchProdScheduleBo bo) { + return toAjax(iSchProdScheduleService.updateByBo(bo)); + } + + /** + * 删除排产单主 + * + * @param scheduleIds 主键串 + */ + @Log(title = "排产单主", businessType = BusinessType.DELETE) + @DeleteMapping("/{scheduleIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] scheduleIds) { + return toAjax(iSchProdScheduleService.deleteWithValidByIds(Arrays.asList(scheduleIds), true)); + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleDetailController.java b/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleDetailController.java new file mode 100644 index 000000000..464120928 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleDetailController.java @@ -0,0 +1,99 @@ +package com.klp.flow.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.flow.domain.vo.SchProdScheduleDetailVo; +import com.klp.flow.domain.bo.SchProdScheduleDetailBo; +import com.klp.flow.service.ISchProdScheduleDetailService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 排产单明细 + * + * @author klp + * @date 2026-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/flow/prodScheduleDetail") +public class SchProdScheduleDetailController extends BaseController { + + private final ISchProdScheduleDetailService iSchProdScheduleDetailService; + + /** + * 查询排产单明细列表 + */ + @GetMapping("/list") + public TableDataInfo list(SchProdScheduleDetailBo bo, PageQuery pageQuery) { + return iSchProdScheduleDetailService.queryPageList(bo, pageQuery); + } + + /** + * 导出排产单明细列表 + */ + @Log(title = "排产单明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SchProdScheduleDetailBo bo, HttpServletResponse response) { + List list = iSchProdScheduleDetailService.queryList(bo); + ExcelUtil.exportExcel(list, "排产单明细", SchProdScheduleDetailVo.class, response); + } + + /** + * 获取排产单明细详细信息 + * + * @param scheduleDetailId 主键 + */ + @GetMapping("/{scheduleDetailId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long scheduleDetailId) { + return R.ok(iSchProdScheduleDetailService.queryById(scheduleDetailId)); + } + + /** + * 新增排产单明细 + */ + @Log(title = "排产单明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchProdScheduleDetailBo bo) { + return toAjax(iSchProdScheduleDetailService.insertByBo(bo)); + } + + /** + * 修改排产单明细 + */ + @Log(title = "排产单明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchProdScheduleDetailBo bo) { + return toAjax(iSchProdScheduleDetailService.updateByBo(bo)); + } + + /** + * 删除排产单明细 + * + * @param scheduleDetailIds 主键串 + */ + @Log(title = "排产单明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{scheduleDetailIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] scheduleDetailIds) { + return toAjax(iSchProdScheduleDetailService.deleteWithValidByIds(Arrays.asList(scheduleDetailIds), true)); + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/controller/SchSaleScheduleRelController.java b/klp-flow/src/main/java/com/klp/flow/controller/SchSaleScheduleRelController.java new file mode 100644 index 000000000..2b3dd5da5 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/controller/SchSaleScheduleRelController.java @@ -0,0 +1,99 @@ +package com.klp.flow.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.flow.domain.vo.SchSaleScheduleRelVo; +import com.klp.flow.domain.bo.SchSaleScheduleRelBo; +import com.klp.flow.service.ISchSaleScheduleRelService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 销售订单-排产单多对多关联 + * + * @author klp + * @date 2026-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/flow/saleScheduleRel") +public class SchSaleScheduleRelController extends BaseController { + + private final ISchSaleScheduleRelService iSchSaleScheduleRelService; + + /** + * 查询销售订单-排产单多对多关联列表 + */ + @GetMapping("/list") + public TableDataInfo list(SchSaleScheduleRelBo bo, PageQuery pageQuery) { + return iSchSaleScheduleRelService.queryPageList(bo, pageQuery); + } + + /** + * 导出销售订单-排产单多对多关联列表 + */ + @Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SchSaleScheduleRelBo bo, HttpServletResponse response) { + List list = iSchSaleScheduleRelService.queryList(bo); + ExcelUtil.exportExcel(list, "销售订单-排产单多对多关联", SchSaleScheduleRelVo.class, response); + } + + /** + * 获取销售订单-排产单多对多关联详细信息 + * + * @param relId 主键 + */ + @GetMapping("/{relId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long relId) { + return R.ok(iSchSaleScheduleRelService.queryById(relId)); + } + + /** + * 新增销售订单-排产单多对多关联 + */ + @Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchSaleScheduleRelBo bo) { + return toAjax(iSchSaleScheduleRelService.insertByBo(bo)); + } + + /** + * 修改销售订单-排产单多对多关联 + */ + @Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchSaleScheduleRelBo bo) { + return toAjax(iSchSaleScheduleRelService.updateByBo(bo)); + } + + /** + * 删除销售订单-排产单多对多关联 + * + * @param relIds 主键串 + */ + @Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.DELETE) + @DeleteMapping("/{relIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] relIds) { + return toAjax(iSchSaleScheduleRelService.deleteWithValidByIds(Arrays.asList(relIds), true)); + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchProdSchedule.java b/klp-flow/src/main/java/com/klp/flow/domain/SchProdSchedule.java new file mode 100644 index 000000000..be324def8 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchProdSchedule.java @@ -0,0 +1,140 @@ +package com.klp.flow.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 排产单主对象 sch_prod_schedule + * + * @author klp + * @date 2026-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sch_prod_schedule") +public class SchProdSchedule extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 排产单主键ID + */ + @TableId(value = "schedule_id") + private Long scheduleId; + /** + * 排产单号(唯一标识,钢卷关联依据) + */ + private String scheduleNo; + /** + * 生产日期(和合同号组成业务关联键) + */ + private Date prodDate; + /** + * 排产状态:0草稿 1待审核 2已下达 3已退回 + */ + private Long scheduleStatus; + /** + * 排产总计划吨数 + */ + private BigDecimal totalPlanWeight; + /** + * 关联销售合同号 + */ + private String relContractNo; + /** + * 业务员 + */ + private String businessUser; + /** + * 联系电话 + */ + private String businessPhone; + /** + * 订单日期 + */ + private Date orderDate; + /** + * 订货单位 + */ + private String customerName; + /** + * 交货期(天) + */ + private Long deliveryCycle; + /** + * 产品用途 + */ + private String usePurpose; + /** + * 品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷 + */ + private String productType; + /** + * 厚度公差 + */ + private String thicknessTolerance; + /** + * 宽度公差 + */ + private String widthTolerance; + /** + * 表面质量 + */ + private String surfaceQuality; + /** + * 表面处理 + */ + private String surfaceTreatment; + /** + * 内径尺寸 + */ + private String innerDiameter; + /** + * 外径要求 + */ + private String outerDiameter; + /** + * 包装要求 + */ + private String packReq; + /** + * 切边要求 + */ + private String cutEdgeReq; + /** + * 单件重量 + */ + private String singleCoilWeight; + /** + * 交货重量偏差 + */ + private String weightDeviation; + /** + * 其他技术要求 + */ + private String otherTechReq; + /** + * 付款情况说明 + */ + private String paymentDesc; + /** + * 退回原因 + */ + private String returnReason; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java new file mode 100644 index 000000000..287db92d2 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java @@ -0,0 +1,62 @@ +package com.klp.flow.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 排产单明细对象 sch_prod_schedule_detail + * + * @author klp + * @date 2026-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sch_prod_schedule_detail") +public class SchProdScheduleDetail extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 排产明细ID + */ + @TableId(value = "schedule_detail_id") + private Long scheduleDetailId; + /** + * 排产单主表ID + */ + private Long scheduleId; + /** + * 来源销售订单明细ID(溯源原始订单规格) + */ + private Long orderDetailId; + /** + * 规格 例:1.0X1250 + */ + private String spec; + /** + * 材质 DX51D + */ + private String material; + /** + * 本次排产吨数(数量),可审核修改 + */ + private BigDecimal scheduleWeight; + /** + * 品名 + */ + private String productType; + /** + * 单行排产备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchSaleScheduleRel.java b/klp-flow/src/main/java/com/klp/flow/domain/SchSaleScheduleRel.java new file mode 100644 index 000000000..d1e4ffd3d --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchSaleScheduleRel.java @@ -0,0 +1,50 @@ +package com.klp.flow.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 销售订单-排产单多对多关联对象 sch_sale_schedule_rel + * + * @author klp + * @date 2026-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sch_sale_schedule_rel") +public class SchSaleScheduleRel extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 关联主键ID + */ + @TableId(value = "rel_id") + private Long relId; + /** + * 销售订单ID + */ + private Long orderId; + /** + * 排产单ID + */ + private Long scheduleId; + /** + * 本次排产占用该订单重量 + */ + private BigDecimal relWeight; + /** + * 关联备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleBo.java new file mode 100644 index 000000000..d9bd551d5 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleBo.java @@ -0,0 +1,159 @@ +package com.klp.flow.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 排产单主业务对象 sch_prod_schedule + * + * @author klp + * @date 2026-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SchProdScheduleBo extends BaseEntity { + + /** + * 排产单主键ID + */ + private Long scheduleId; + + /** + * 排产单号(唯一标识,钢卷关联依据) + */ + private String scheduleNo; + + /** + * 生产日期(和合同号组成业务关联键) + */ + private Date prodDate; + + /** + * 排产状态:0草稿 1待审核 2已下达 3已退回 + */ + private Long scheduleStatus; + + /** + * 排产总计划吨数 + */ + private BigDecimal totalPlanWeight; + + /** + * 关联销售合同号 + */ + private String relContractNo; + + /** + * 业务员 + */ + private String businessUser; + + /** + * 联系电话 + */ + private String businessPhone; + + /** + * 订单日期 + */ + private Date orderDate; + + /** + * 订货单位 + */ + private String customerName; + + /** + * 交货期(天) + */ + private Long deliveryCycle; + + /** + * 产品用途 + */ + private String usePurpose; + + /** + * 品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷 + */ + private String productType; + + /** + * 厚度公差 + */ + private String thicknessTolerance; + + /** + * 宽度公差 + */ + private String widthTolerance; + + /** + * 表面质量 + */ + private String surfaceQuality; + + /** + * 表面处理 + */ + private String surfaceTreatment; + + /** + * 内径尺寸 + */ + private String innerDiameter; + + /** + * 外径要求 + */ + private String outerDiameter; + + /** + * 包装要求 + */ + private String packReq; + + /** + * 切边要求 + */ + private String cutEdgeReq; + + /** + * 单件重量 + */ + private String singleCoilWeight; + + /** + * 交货重量偏差 + */ + private String weightDeviation; + + /** + * 其他技术要求 + */ + private String otherTechReq; + + /** + * 付款情况说明 + */ + private String paymentDesc; + + /** + * 退回原因 + */ + private String returnReason; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java new file mode 100644 index 000000000..2e2485bae --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java @@ -0,0 +1,62 @@ +package com.klp.flow.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 排产单明细业务对象 sch_prod_schedule_detail + * + * @author klp + * @date 2026-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SchProdScheduleDetailBo extends BaseEntity { + + /** + * 排产明细ID + */ + private Long scheduleDetailId; + + /** + * 排产单主表ID + */ + private Long scheduleId; + + /** + * 来源销售订单明细ID(溯源原始订单规格) + */ + private Long orderDetailId; + + /** + * 规格 例:1.0X1250 + */ + private String spec; + + /** + * 材质 DX51D + */ + private String material; + + /** + * 本次排产吨数(数量),可审核修改 + */ + private BigDecimal scheduleWeight; + + /** + * 品名 + */ + private String productType; + + /** + * 单行排产备注 + */ + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchSaleScheduleRelBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchSaleScheduleRelBo.java new file mode 100644 index 000000000..aaebb71da --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchSaleScheduleRelBo.java @@ -0,0 +1,47 @@ +package com.klp.flow.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 销售订单-排产单多对多关联业务对象 sch_sale_schedule_rel + * + * @author klp + * @date 2026-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SchSaleScheduleRelBo extends BaseEntity { + + /** + * 关联主键ID + */ + private Long relId; + + /** + * 销售订单ID + */ + private Long orderId; + + /** + * 排产单ID + */ + private Long scheduleId; + + /** + * 本次排产占用该订单重量 + */ + private BigDecimal relWeight; + + /** + * 关联备注 + */ + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java new file mode 100644 index 000000000..c0c9a763c --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java @@ -0,0 +1,73 @@ +package com.klp.flow.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 排产单明细视图对象 sch_prod_schedule_detail + * + * @author klp + * @date 2026-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class SchProdScheduleDetailVo { + + private static final long serialVersionUID = 1L; + + /** + * 排产明细ID + */ + @ExcelProperty(value = "排产明细ID") + private Long scheduleDetailId; + + /** + * 排产单主表ID + */ + @ExcelProperty(value = "排产单主表ID") + private Long scheduleId; + + /** + * 来源销售订单明细ID(溯源原始订单规格) + */ + @ExcelProperty(value = "来源销售订单明细ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "溯=源原始订单规格") + private Long orderDetailId; + + /** + * 规格 例:1.0X1250 + */ + @ExcelProperty(value = "规格 例:1.0X1250") + private String spec; + + /** + * 材质 DX51D + */ + @ExcelProperty(value = "材质 DX51D") + private String material; + + /** + * 本次排产吨数(数量),可审核修改 + */ + @ExcelProperty(value = "本次排产吨数(数量),可审核修改") + private BigDecimal scheduleWeight; + + /** + * 品名 + */ + @ExcelProperty(value = "品名") + private String productType; + + /** + * 单行排产备注 + */ + @ExcelProperty(value = "单行排产备注") + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java new file mode 100644 index 000000000..e563dd389 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleVo.java @@ -0,0 +1,190 @@ +package com.klp.flow.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 排产单主视图对象 sch_prod_schedule + * + * @author klp + * @date 2026-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class SchProdScheduleVo { + + private static final long serialVersionUID = 1L; + + /** + * 排产单主键ID + */ + @ExcelProperty(value = "排产单主键ID") + private Long scheduleId; + + /** + * 排产单号(唯一标识,钢卷关联依据) + */ + @ExcelProperty(value = "排产单号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "唯=一标识,钢卷关联依据") + private String scheduleNo; + + /** + * 生产日期(和合同号组成业务关联键) + */ + @ExcelProperty(value = "生产日期", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "和=合同号组成业务关联键") + private Date prodDate; + + /** + * 排产状态:0草稿 1待审核 2已下达 3已退回 + */ + @ExcelProperty(value = "排产状态:0草稿 1待审核 2已下达 3已退回") + private Long scheduleStatus; + + /** + * 排产总计划吨数 + */ + @ExcelProperty(value = "排产总计划吨数") + private BigDecimal totalPlanWeight; + + /** + * 关联销售合同号 + */ + @ExcelProperty(value = "关联销售合同号") + private String relContractNo; + + /** + * 业务员 + */ + @ExcelProperty(value = "业务员") + private String businessUser; + + /** + * 联系电话 + */ + @ExcelProperty(value = "联系电话") + private String businessPhone; + + /** + * 订单日期 + */ + @ExcelProperty(value = "订单日期") + private Date orderDate; + + /** + * 订货单位 + */ + @ExcelProperty(value = "订货单位") + private String customerName; + + /** + * 交货期(天) + */ + @ExcelProperty(value = "交货期(天)") + private Long deliveryCycle; + + /** + * 产品用途 + */ + @ExcelProperty(value = "产品用途") + private String usePurpose; + + /** + * 品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷 + */ + @ExcelProperty(value = "品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷") + private String productType; + + /** + * 厚度公差 + */ + @ExcelProperty(value = "厚度公差") + private String thicknessTolerance; + + /** + * 宽度公差 + */ + @ExcelProperty(value = "宽度公差") + private String widthTolerance; + + /** + * 表面质量 + */ + @ExcelProperty(value = "表面质量") + private String surfaceQuality; + + /** + * 表面处理 + */ + @ExcelProperty(value = "表面处理") + private String surfaceTreatment; + + /** + * 内径尺寸 + */ + @ExcelProperty(value = "内径尺寸") + private String innerDiameter; + + /** + * 外径要求 + */ + @ExcelProperty(value = "外径要求") + private String outerDiameter; + + /** + * 包装要求 + */ + @ExcelProperty(value = "包装要求") + private String packReq; + + /** + * 切边要求 + */ + @ExcelProperty(value = "切边要求") + private String cutEdgeReq; + + /** + * 单件重量 + */ + @ExcelProperty(value = "单件重量") + private String singleCoilWeight; + + /** + * 交货重量偏差 + */ + @ExcelProperty(value = "交货重量偏差") + private String weightDeviation; + + /** + * 其他技术要求 + */ + @ExcelProperty(value = "其他技术要求") + private String otherTechReq; + + /** + * 付款情况说明 + */ + @ExcelProperty(value = "付款情况说明") + private String paymentDesc; + + /** + * 退回原因 + */ + @ExcelProperty(value = "退回原因") + private String returnReason; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchSaleScheduleRelVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchSaleScheduleRelVo.java new file mode 100644 index 000000000..e00080c9e --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchSaleScheduleRelVo.java @@ -0,0 +1,54 @@ +package com.klp.flow.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 销售订单-排产单多对多关联视图对象 sch_sale_schedule_rel + * + * @author klp + * @date 2026-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class SchSaleScheduleRelVo { + + private static final long serialVersionUID = 1L; + + /** + * 关联主键ID + */ + @ExcelProperty(value = "关联主键ID") + private Long relId; + + /** + * 销售订单ID + */ + @ExcelProperty(value = "销售订单ID") + private Long orderId; + + /** + * 排产单ID + */ + @ExcelProperty(value = "排产单ID") + private Long scheduleId; + + /** + * 本次排产占用该订单重量 + */ + @ExcelProperty(value = "本次排产占用该订单重量") + private BigDecimal relWeight; + + /** + * 关联备注 + */ + @ExcelProperty(value = "关联备注") + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleDetailMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleDetailMapper.java new file mode 100644 index 000000000..ff7c62385 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleDetailMapper.java @@ -0,0 +1,15 @@ +package com.klp.flow.mapper; + +import com.klp.flow.domain.SchProdScheduleDetail; +import com.klp.flow.domain.vo.SchProdScheduleDetailVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 排产单明细Mapper接口 + * + * @author klp + * @date 2026-06-23 + */ +public interface SchProdScheduleDetailMapper extends BaseMapperPlus { + +} diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleMapper.java new file mode 100644 index 000000000..0cd71eae7 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdScheduleMapper.java @@ -0,0 +1,15 @@ +package com.klp.flow.mapper; + +import com.klp.flow.domain.SchProdSchedule; +import com.klp.flow.domain.vo.SchProdScheduleVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 排产单主Mapper接口 + * + * @author klp + * @date 2026-06-23 + */ +public interface SchProdScheduleMapper extends BaseMapperPlus { + +} diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/SchSaleScheduleRelMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/SchSaleScheduleRelMapper.java new file mode 100644 index 000000000..77246e781 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/mapper/SchSaleScheduleRelMapper.java @@ -0,0 +1,15 @@ +package com.klp.flow.mapper; + +import com.klp.flow.domain.SchSaleScheduleRel; +import com.klp.flow.domain.vo.SchSaleScheduleRelVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 销售订单-排产单多对多关联Mapper接口 + * + * @author klp + * @date 2026-06-23 + */ +public interface SchSaleScheduleRelMapper extends BaseMapperPlus { + +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleDetailService.java b/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleDetailService.java new file mode 100644 index 000000000..4f29900f4 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleDetailService.java @@ -0,0 +1,49 @@ +package com.klp.flow.service; + +import com.klp.flow.domain.SchProdScheduleDetail; +import com.klp.flow.domain.vo.SchProdScheduleDetailVo; +import com.klp.flow.domain.bo.SchProdScheduleDetailBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 排产单明细Service接口 + * + * @author klp + * @date 2026-06-23 + */ +public interface ISchProdScheduleDetailService { + + /** + * 查询排产单明细 + */ + SchProdScheduleDetailVo queryById(Long scheduleDetailId); + + /** + * 查询排产单明细列表 + */ + TableDataInfo queryPageList(SchProdScheduleDetailBo bo, PageQuery pageQuery); + + /** + * 查询排产单明细列表 + */ + List queryList(SchProdScheduleDetailBo bo); + + /** + * 新增排产单明细 + */ + Boolean insertByBo(SchProdScheduleDetailBo bo); + + /** + * 修改排产单明细 + */ + Boolean updateByBo(SchProdScheduleDetailBo bo); + + /** + * 校验并批量删除排产单明细信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleService.java b/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleService.java new file mode 100644 index 000000000..b8b60a827 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/ISchProdScheduleService.java @@ -0,0 +1,49 @@ +package com.klp.flow.service; + +import com.klp.flow.domain.SchProdSchedule; +import com.klp.flow.domain.vo.SchProdScheduleVo; +import com.klp.flow.domain.bo.SchProdScheduleBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 排产单主Service接口 + * + * @author klp + * @date 2026-06-23 + */ +public interface ISchProdScheduleService { + + /** + * 查询排产单主 + */ + SchProdScheduleVo queryById(Long scheduleId); + + /** + * 查询排产单主列表 + */ + TableDataInfo queryPageList(SchProdScheduleBo bo, PageQuery pageQuery); + + /** + * 查询排产单主列表 + */ + List queryList(SchProdScheduleBo bo); + + /** + * 新增排产单主 + */ + Boolean insertByBo(SchProdScheduleBo bo); + + /** + * 修改排产单主 + */ + Boolean updateByBo(SchProdScheduleBo bo); + + /** + * 校验并批量删除排产单主信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/ISchSaleScheduleRelService.java b/klp-flow/src/main/java/com/klp/flow/service/ISchSaleScheduleRelService.java new file mode 100644 index 000000000..d26e3596c --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/ISchSaleScheduleRelService.java @@ -0,0 +1,49 @@ +package com.klp.flow.service; + +import com.klp.flow.domain.SchSaleScheduleRel; +import com.klp.flow.domain.vo.SchSaleScheduleRelVo; +import com.klp.flow.domain.bo.SchSaleScheduleRelBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 销售订单-排产单多对多关联Service接口 + * + * @author klp + * @date 2026-06-23 + */ +public interface ISchSaleScheduleRelService { + + /** + * 查询销售订单-排产单多对多关联 + */ + SchSaleScheduleRelVo queryById(Long relId); + + /** + * 查询销售订单-排产单多对多关联列表 + */ + TableDataInfo queryPageList(SchSaleScheduleRelBo bo, PageQuery pageQuery); + + /** + * 查询销售订单-排产单多对多关联列表 + */ + List queryList(SchSaleScheduleRelBo bo); + + /** + * 新增销售订单-排产单多对多关联 + */ + Boolean insertByBo(SchSaleScheduleRelBo bo); + + /** + * 修改销售订单-排产单多对多关联 + */ + Boolean updateByBo(SchSaleScheduleRelBo bo); + + /** + * 校验并批量删除销售订单-排产单多对多关联信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java new file mode 100644 index 000000000..be3fbf2f0 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java @@ -0,0 +1,114 @@ +package com.klp.flow.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.flow.domain.bo.SchProdScheduleDetailBo; +import com.klp.flow.domain.vo.SchProdScheduleDetailVo; +import com.klp.flow.domain.SchProdScheduleDetail; +import com.klp.flow.mapper.SchProdScheduleDetailMapper; +import com.klp.flow.service.ISchProdScheduleDetailService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 排产单明细Service业务层处理 + * + * @author klp + * @date 2026-06-23 + */ +@RequiredArgsConstructor +@Service +public class SchProdScheduleDetailServiceImpl implements ISchProdScheduleDetailService { + + private final SchProdScheduleDetailMapper baseMapper; + + /** + * 查询排产单明细 + */ + @Override + public SchProdScheduleDetailVo queryById(Long scheduleDetailId){ + return baseMapper.selectVoById(scheduleDetailId); + } + + /** + * 查询排产单明细列表 + */ + @Override + public TableDataInfo queryPageList(SchProdScheduleDetailBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询排产单明细列表 + */ + @Override + public List queryList(SchProdScheduleDetailBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SchProdScheduleDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getScheduleId() != null, SchProdScheduleDetail::getScheduleId, bo.getScheduleId()); + lqw.eq(bo.getOrderDetailId() != null, SchProdScheduleDetail::getOrderDetailId, bo.getOrderDetailId()); + lqw.eq(StringUtils.isNotBlank(bo.getSpec()), SchProdScheduleDetail::getSpec, bo.getSpec()); + lqw.eq(StringUtils.isNotBlank(bo.getMaterial()), SchProdScheduleDetail::getMaterial, bo.getMaterial()); + lqw.eq(bo.getScheduleWeight() != null, SchProdScheduleDetail::getScheduleWeight, bo.getScheduleWeight()); + lqw.eq(StringUtils.isNotBlank(bo.getProductType()), SchProdScheduleDetail::getProductType, bo.getProductType()); + return lqw; + } + + /** + * 新增排产单明细 + */ + @Override + public Boolean insertByBo(SchProdScheduleDetailBo bo) { + SchProdScheduleDetail add = BeanUtil.toBean(bo, SchProdScheduleDetail.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setScheduleDetailId(add.getScheduleDetailId()); + } + return flag; + } + + /** + * 修改排产单明细 + */ + @Override + public Boolean updateByBo(SchProdScheduleDetailBo bo) { + SchProdScheduleDetail update = BeanUtil.toBean(bo, SchProdScheduleDetail.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SchProdScheduleDetail entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除排产单明细 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java new file mode 100644 index 000000000..e97631cae --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleServiceImpl.java @@ -0,0 +1,133 @@ +package com.klp.flow.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.flow.domain.bo.SchProdScheduleBo; +import com.klp.flow.domain.vo.SchProdScheduleVo; +import com.klp.flow.domain.SchProdSchedule; +import com.klp.flow.mapper.SchProdScheduleMapper; +import com.klp.flow.service.ISchProdScheduleService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 排产单主Service业务层处理 + * + * @author klp + * @date 2026-06-23 + */ +@RequiredArgsConstructor +@Service +public class SchProdScheduleServiceImpl implements ISchProdScheduleService { + + private final SchProdScheduleMapper baseMapper; + + /** + * 查询排产单主 + */ + @Override + public SchProdScheduleVo queryById(Long scheduleId){ + return baseMapper.selectVoById(scheduleId); + } + + /** + * 查询排产单主列表 + */ + @Override + public TableDataInfo queryPageList(SchProdScheduleBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询排产单主列表 + */ + @Override + public List queryList(SchProdScheduleBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SchProdScheduleBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getScheduleNo()), SchProdSchedule::getScheduleNo, bo.getScheduleNo()); + lqw.eq(bo.getProdDate() != null, SchProdSchedule::getProdDate, bo.getProdDate()); + lqw.eq(bo.getScheduleStatus() != null, SchProdSchedule::getScheduleStatus, bo.getScheduleStatus()); + lqw.eq(bo.getTotalPlanWeight() != null, SchProdSchedule::getTotalPlanWeight, bo.getTotalPlanWeight()); + lqw.eq(StringUtils.isNotBlank(bo.getRelContractNo()), SchProdSchedule::getRelContractNo, bo.getRelContractNo()); + lqw.eq(StringUtils.isNotBlank(bo.getBusinessUser()), SchProdSchedule::getBusinessUser, bo.getBusinessUser()); + lqw.eq(StringUtils.isNotBlank(bo.getBusinessPhone()), SchProdSchedule::getBusinessPhone, bo.getBusinessPhone()); + lqw.eq(bo.getOrderDate() != null, SchProdSchedule::getOrderDate, bo.getOrderDate()); + lqw.like(StringUtils.isNotBlank(bo.getCustomerName()), SchProdSchedule::getCustomerName, bo.getCustomerName()); + lqw.eq(bo.getDeliveryCycle() != null, SchProdSchedule::getDeliveryCycle, bo.getDeliveryCycle()); + lqw.eq(StringUtils.isNotBlank(bo.getUsePurpose()), SchProdSchedule::getUsePurpose, bo.getUsePurpose()); + lqw.eq(StringUtils.isNotBlank(bo.getProductType()), SchProdSchedule::getProductType, bo.getProductType()); + lqw.eq(StringUtils.isNotBlank(bo.getThicknessTolerance()), SchProdSchedule::getThicknessTolerance, bo.getThicknessTolerance()); + lqw.eq(StringUtils.isNotBlank(bo.getWidthTolerance()), SchProdSchedule::getWidthTolerance, bo.getWidthTolerance()); + lqw.eq(StringUtils.isNotBlank(bo.getSurfaceQuality()), SchProdSchedule::getSurfaceQuality, bo.getSurfaceQuality()); + lqw.eq(StringUtils.isNotBlank(bo.getSurfaceTreatment()), SchProdSchedule::getSurfaceTreatment, bo.getSurfaceTreatment()); + lqw.eq(StringUtils.isNotBlank(bo.getInnerDiameter()), SchProdSchedule::getInnerDiameter, bo.getInnerDiameter()); + lqw.eq(StringUtils.isNotBlank(bo.getOuterDiameter()), SchProdSchedule::getOuterDiameter, bo.getOuterDiameter()); + lqw.eq(StringUtils.isNotBlank(bo.getPackReq()), SchProdSchedule::getPackReq, bo.getPackReq()); + lqw.eq(StringUtils.isNotBlank(bo.getCutEdgeReq()), SchProdSchedule::getCutEdgeReq, bo.getCutEdgeReq()); + lqw.eq(StringUtils.isNotBlank(bo.getSingleCoilWeight()), SchProdSchedule::getSingleCoilWeight, bo.getSingleCoilWeight()); + lqw.eq(StringUtils.isNotBlank(bo.getWeightDeviation()), SchProdSchedule::getWeightDeviation, bo.getWeightDeviation()); + lqw.eq(StringUtils.isNotBlank(bo.getOtherTechReq()), SchProdSchedule::getOtherTechReq, bo.getOtherTechReq()); + lqw.eq(StringUtils.isNotBlank(bo.getPaymentDesc()), SchProdSchedule::getPaymentDesc, bo.getPaymentDesc()); + lqw.eq(StringUtils.isNotBlank(bo.getReturnReason()), SchProdSchedule::getReturnReason, bo.getReturnReason()); + return lqw; + } + + /** + * 新增排产单主 + */ + @Override + public Boolean insertByBo(SchProdScheduleBo bo) { + SchProdSchedule add = BeanUtil.toBean(bo, SchProdSchedule.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setScheduleId(add.getScheduleId()); + } + return flag; + } + + /** + * 修改排产单主 + */ + @Override + public Boolean updateByBo(SchProdScheduleBo bo) { + SchProdSchedule update = BeanUtil.toBean(bo, SchProdSchedule.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SchProdSchedule entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除排产单主 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchSaleScheduleRelServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchSaleScheduleRelServiceImpl.java new file mode 100644 index 000000000..67a1a41cf --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchSaleScheduleRelServiceImpl.java @@ -0,0 +1,110 @@ +package com.klp.flow.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.flow.domain.bo.SchSaleScheduleRelBo; +import com.klp.flow.domain.vo.SchSaleScheduleRelVo; +import com.klp.flow.domain.SchSaleScheduleRel; +import com.klp.flow.mapper.SchSaleScheduleRelMapper; +import com.klp.flow.service.ISchSaleScheduleRelService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 销售订单-排产单多对多关联Service业务层处理 + * + * @author klp + * @date 2026-06-23 + */ +@RequiredArgsConstructor +@Service +public class SchSaleScheduleRelServiceImpl implements ISchSaleScheduleRelService { + + private final SchSaleScheduleRelMapper baseMapper; + + /** + * 查询销售订单-排产单多对多关联 + */ + @Override + public SchSaleScheduleRelVo queryById(Long relId){ + return baseMapper.selectVoById(relId); + } + + /** + * 查询销售订单-排产单多对多关联列表 + */ + @Override + public TableDataInfo queryPageList(SchSaleScheduleRelBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询销售订单-排产单多对多关联列表 + */ + @Override + public List queryList(SchSaleScheduleRelBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SchSaleScheduleRelBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getOrderId() != null, SchSaleScheduleRel::getOrderId, bo.getOrderId()); + lqw.eq(bo.getScheduleId() != null, SchSaleScheduleRel::getScheduleId, bo.getScheduleId()); + lqw.eq(bo.getRelWeight() != null, SchSaleScheduleRel::getRelWeight, bo.getRelWeight()); + return lqw; + } + + /** + * 新增销售订单-排产单多对多关联 + */ + @Override + public Boolean insertByBo(SchSaleScheduleRelBo bo) { + SchSaleScheduleRel add = BeanUtil.toBean(bo, SchSaleScheduleRel.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setRelId(add.getRelId()); + } + return flag; + } + + /** + * 修改销售订单-排产单多对多关联 + */ + @Override + public Boolean updateByBo(SchSaleScheduleRelBo bo) { + SchSaleScheduleRel update = BeanUtil.toBean(bo, SchSaleScheduleRel.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SchSaleScheduleRel entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除销售订单-排产单多对多关联 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml new file mode 100644 index 000000000..050c9567d --- /dev/null +++ b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleMapper.xml new file mode 100644 index 000000000..ba8611f51 --- /dev/null +++ b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-flow/src/main/resources/mapper/flow/SchSaleScheduleRelMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchSaleScheduleRelMapper.xml new file mode 100644 index 000000000..f3652a584 --- /dev/null +++ b/klp-flow/src/main/resources/mapper/flow/SchSaleScheduleRelMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + +