From df6804190c5be1611f90a061ed4a5ffbcb3cfe18 Mon Sep 17 00:00:00 2001 From: tzy1042411602 <1042411602@qq.com> Date: Sun, 1 Dec 2024 16:23:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=8E=A5=E5=8F=A3=20=20?= =?UTF-8?q?=E5=B7=A5=E8=89=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 2 +- .../ProductionRouteTwoController.java | 117 ++++++++++ .../system/controller/ReportController.java | 23 ++ .../system/domain/ProductionRouteTwo.java | 119 ++++++++++ .../domain/bo/ProductionRouteTwoBo.java | 167 ++++++++++++++ .../ruoyi/system/domain/dto/CombinedDTO.java | 5 +- .../system/domain/dto/MaterialUsageDTO.java | 10 +- .../system/domain/dto/PlanPrcessNumDTO.java | 1 - .../ruoyi/system/domain/vo/PlanOrderVo.java | 2 + .../system/domain/vo/PlannedProcessVo.java | 12 ++ .../domain/vo/ProductionRouteTwoVo.java | 168 +++++++++++++++ .../mapper/ProductionRouteTwoMapper.java | 15 ++ .../java/com/ruoyi/system/runner/JdUtil.java | 26 +-- .../service/IProductionRouteTwoService.java | 50 +++++ .../service/impl/ProcessRouteServiceImpl.java | 71 +++--- .../impl/ProductionRouteTwoServiceImpl.java | 203 ++++++++++++++++++ .../system/ProductionRouteTwoMapper.xml | 40 ++++ 17 files changed, 984 insertions(+), 47 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/ProductionRouteTwoController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/ReportController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/ProductionRouteTwo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ProductionRouteTwoBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProductionRouteTwoVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProductionRouteTwoMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionRouteTwoService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionRouteTwoServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/mapper/system/ProductionRouteTwoMapper.xml diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index dd4d88d..caec1c6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -66,7 +66,7 @@ public class ExcelUtil { } public static ExcelResult importExcelSheet6(InputStream is, Class clazz, boolean isValidate) { DefaultExcelListener listener = new DefaultExcelListener<>(isValidate); - EasyExcel.read(is, clazz, listener).sheet(6).doRead(); + EasyExcel.read(is, clazz, listener).sheet(5).doRead(); return listener.getExcelResult(); } public static ExcelResult importExcelSheet1(InputStream is, Class clazz, boolean isValidate) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProductionRouteTwoController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProductionRouteTwoController.java new file mode 100644 index 0000000..5a7aae9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProductionRouteTwoController.java @@ -0,0 +1,117 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import com.ruoyi.system.service.IProcessRouteService; +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.ProductionRouteTwoVo; +import com.ruoyi.system.domain.bo.ProductionRouteTwoBo; +import com.ruoyi.system.service.IProductionRouteTwoService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 工艺生产用表 + * + * @author ruoyi + * @date 2024-11-26 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeTwo") +public class ProductionRouteTwoController extends BaseController { + + private final IProductionRouteTwoService iProductionRouteTwoService; + @Autowired + IProcessRouteService iProcessRouteService; + /** + * 查询工艺生产用表列表 + */ + @SaCheckPermission("system:routeTwo:list") + @GetMapping("/list") + public TableDataInfo list(ProductionRouteTwoBo bo, PageQuery pageQuery) { + return iProductionRouteTwoService.queryPageList(bo, pageQuery); + } + + /** + * 导出工艺生产用表列表 + */ + @SaCheckPermission("system:routeTwo:export") + @Log(title = "工艺生产用表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ProductionRouteTwoBo bo, HttpServletResponse response) { + List list = iProductionRouteTwoService.queryList(bo); + ExcelUtil.exportExcel(list, "工艺生产用表", ProductionRouteTwoVo.class, response); + } + + /** + * 获取工艺生产用表详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:routeTwo:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iProductionRouteTwoService.queryById(id)); + } + + /** + * 新增工艺生产用表 + */ + @SaCheckPermission("system:routeTwo:add") + @Log(title = "工艺生产用表", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ProductionRouteTwoBo bo) { + return toAjax(iProductionRouteTwoService.insertByBo(bo)); + } + + /** + * 修改工艺生产用表 + */ + @SaCheckPermission("system:routeTwo:edit") + @Log(title = "工艺生产用表", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ProductionRouteTwoBo bo) { + return toAjax(iProductionRouteTwoService.updateByBo(bo)); + } + + /** + * 删除工艺生产用表 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:routeTwo:remove") + @Log(title = "工艺生产用表", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iProductionRouteTwoService.deleteWithValidByIds(Arrays.asList(ids), true)); + } + + @Log(title = "获取此项目数据") + @SaCheckPermission("system:route:getRawBom") + @PostMapping("/getSelecPlanRouteList") + public boolean getSelecPlanRouteList(@RequestParam String rooteProdet) { + return iProductionRouteTwoService.getSelecPlanRouteList(rooteProdet); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ReportController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ReportController.java new file mode 100644 index 0000000..9362029 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ReportController.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@RestController +@RequestMapping("/system/jeecg") +public class ReportController { + @GetMapping(value = "/getReport") + public String getReport(HttpServletRequest request) { + String scheme = request.getScheme(); + String serverName = request.getServerName(); + int serverPort = request.getServerPort(); + String baseUrl = scheme + "://" + serverName + ":" + serverPort; + return baseUrl+"/jmreport/list"; + } + +} + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/ProductionRouteTwo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/ProductionRouteTwo.java new file mode 100644 index 0000000..7e72c75 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/ProductionRouteTwo.java @@ -0,0 +1,119 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 工艺生产用表对象 production_route_two + * + * @author ruoyi + * @date 2024-11-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("production_route_two") +public class ProductionRouteTwo extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + private String fHbytSclh; + /** + * 产品名称 + */ + private String fProductName; + /** + * 产品编码 + */ + private String fproductidFnumber; + /** + * 生产订单数量 + */ + private Long fMOQty; + /** + * 工序编号 + */ + private String fOperNumber; + /** + * 工作中心 + */ + private String fworkcenteridFname; + /** + * 工艺名称 + */ + private String fprocessidFname; + /** + * 工序描述 + */ + private String fOperDescription; + /** + * 工序控制码 + */ + private String fOptCtrlCodeidFname; + /** + * 工序数量 + */ + private Long fOperQty; + /** + * 工序计划开始时间 + */ + private Date fOperPlanStartTime; + /** + * 工序计划结束时间 + */ + private Date fOperPlanFinishTime; + /** + * 计划开始时间 + */ + private Date fPlanStartTime; + /** + * 计划结束时间 + */ + private Date fPlanFinishTime; + /** + * 材质 + */ + private String fmaterialidFnumber; + /** + * 子项单位 + */ + private String funitid2ChildFname; + /** + * 父级物料编码 + */ + private String fmaterialFnumber; + /** + * 子项物料名称 + */ + private String fMaterialName1; + /** + * 子项物料编码 + */ + private String fMaterialid2ChildFnumber; + /** + * 分子 + */ + private Long fNumerator; + /** + * 分母 + */ + private Long fDenominator; + /** + * 活动时长 + */ + private Long activityLengh; + /** + * bom材质 + */ + private String childMaterial; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ProductionRouteTwoBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ProductionRouteTwoBo.java new file mode 100644 index 0000000..5f2322a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ProductionRouteTwoBo.java @@ -0,0 +1,167 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 工艺生产用表业务对象 production_route_two + * + * @author ruoyi + * @date 2024-11-26 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class ProductionRouteTwoBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "不能为空", groups = { EditGroup.class }) + private Long id; + /** + * 生产令号 + */ + @NotBlank(message = "生产令号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fHbytSclh; + + /** + * 产品名称 + */ + @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fProductName; + + /** + * 产品编码 + */ + @NotBlank(message = "产品编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fproductidFnumber; + + /** + * 生产订单数量 + */ + @NotNull(message = "生产订单数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long fMOQty; + + /** + * 工序编号 + */ + @NotBlank(message = "工序编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fOperNumber; + + /** + * 工作中心 + */ + @NotBlank(message = "工作中心不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fworkcenteridFname; + + /** + * 工艺名称 + */ + @NotBlank(message = "工艺名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fprocessidFname; + + /** + * 工序描述 + */ + @NotBlank(message = "工序描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fOperDescription; + + /** + * 工序控制码 + */ + @NotBlank(message = "工序控制码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fOptCtrlCodeidFname; + + /** + * 工序数量 + */ + @NotNull(message = "工序数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long fOperQty; + + /** + * 工序计划开始时间 + */ + @NotNull(message = "工序计划开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date fOperPlanStartTime; + + /** + * 工序计划结束时间 + */ + @NotNull(message = "工序计划结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date fOperPlanFinishTime; + + /** + * 计划开始时间 + */ + @NotNull(message = "计划开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date fPlanStartTime; + + /** + * 计划结束时间 + */ + @NotNull(message = "计划结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date fPlanFinishTime; + + /** + * 材质 + */ + @NotBlank(message = "材质不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fmaterialidFnumber; + + /** + * 子项单位 + */ + @NotBlank(message = "子项单位不能为空", groups = { AddGroup.class, EditGroup.class }) + private String funitid2ChildFname; + + /** + * 父级物料编码 + */ + @NotBlank(message = "父级物料编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fmaterialFnumber; + + /** + * 子项物料名称 + */ + @NotBlank(message = "子项物料名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fMaterialName1; + + /** + * 子项物料编码 + */ + @NotBlank(message = "子项物料编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fMaterialid2ChildFnumber; + + /** + * 分子 + */ + @NotNull(message = "分子不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long fNumerator; + + /** + * 分母 + */ + @NotNull(message = "分母不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long fDenominator; + /** + * 活动时长 + */ + @NotNull(message = "活动时长不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long activityLengh; + + /** + * bom材质 + */ + @NotBlank(message = "bom材质不能为空", groups = { AddGroup.class, EditGroup.class }) + private String childMaterial; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/CombinedDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/CombinedDTO.java index db51fbe..c0a51d3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/CombinedDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/CombinedDTO.java @@ -9,7 +9,8 @@ import java.util.List; public class CombinedDTO { private String orderNumber; // 生产订单号 private String materialCode; // 物料编码 - private String materialName; // 物料名称 + private String materialName; // 物料名称 + private String material; // 物料名称 private List processes; // 工序集合 - private List materialUsageDTOList; // 工序集合 + private List materialUsageDTOList; // 用量集合 } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUsageDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUsageDTO.java index 17d2108..bb0b620 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUsageDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUsageDTO.java @@ -13,8 +13,10 @@ public class MaterialUsageDTO { @JsonProperty("FMaterialName1") private String materialName; // 物料名称 @JsonProperty("FMaterialModel1") - private String specification; // 规格型号 - @JsonProperty("FUnitID2") + private String specification; // 规格型号D + @JsonProperty("F_HBYT_CZ") + private String childMaterial; // 规格型号D + @JsonProperty("FUnitID2.FName") private String unit; // 单位 @JsonProperty("FMaterialType") private String itemType; // 子项类型 @@ -26,6 +28,10 @@ public class MaterialUsageDTO { private String stockName; // 仓库 @JsonProperty("FMEMO1") private String remarks; // 备注 + @JsonProperty("FNumerator") + private Long FNumerator; // 备注 + @JsonProperty("FDenominator") + private Long FDenominator; // 备注 //需求日期 @JsonProperty("FNeedDate2") private Date needDate; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java index 0f97c6e..1d47b5f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java @@ -25,7 +25,6 @@ public class PlanPrcessNumDTO { private Date FPlanStartTime; @JsonProperty("FPlanFinishTime") private Date FPlanFinishTime; - @JsonProperty("FSubEntity_FDetailID") private int FSubEntity_FDetailID; @JsonProperty("FOperPlanStartTime") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlanOrderVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlanOrderVo.java index be2f750..b2a9c2a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlanOrderVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlanOrderVo.java @@ -54,5 +54,7 @@ public class PlanOrderVo { @JsonProperty("FMaterialName") private String FMaterialName; + @JsonProperty("F_UCHN_BaseProperty_qtr") + private String BasePropertyqtr; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlannedProcessVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlannedProcessVo.java index 90339ce..94e9aac 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlannedProcessVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/PlannedProcessVo.java @@ -49,6 +49,7 @@ public class PlannedProcessVo { @ExcelProperty(value = "工序名称") @JsonProperty("FProcessId.FName") private String FProcessName; + @JsonProperty("FActivity1BaseQty") private Double FActivity1BaseQty; /** @@ -124,4 +125,15 @@ public class PlannedProcessVo { @JsonProperty("FOptCtrlCodeId.FName") private String FOptCtrlCodeIFName; + /** + * 分子 + */ + @JsonProperty("FNumerator") + private Long fNumerator; + + /** + * 分母 + */ + @JsonProperty("FDenominator") + private Long fDenominator; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProductionRouteTwoVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProductionRouteTwoVo.java new file mode 100644 index 0000000..047e850 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProductionRouteTwoVo.java @@ -0,0 +1,168 @@ +package com.ruoyi.system.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 工艺生产用表视图对象 production_route_two + * + * @author ruoyi + * @date 2024-11-26 + */ +@Data +@ExcelIgnoreUnannotated +public class ProductionRouteTwoVo { + + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; +//F_HBYT_SCLH,FProductId.FNumber,FProductName,FMOQty , FOperNumber,FWorkCenterId.FName ,FProcessId.FName,FOperDescription,FOptCtrlCodeId.FName,FOperQty ,FOperPlanStartTime ,FOperPlanFinishTime,FPlanStartTime,FPlanFinishTime + /** + * 生产令号 + */ + @ExcelProperty(value = "生产令号") + private String fHbytSclh; + + /** + * 产品名称 + */ + @ExcelProperty(value = "产品名称") + private String fProductName; + + /** + * 产品编码 + */ + @ExcelProperty(value = "产品编码") + private String fproductidFnumber; + + /** + * 生产订单数量 + */ + @ExcelProperty(value = "生产订单数量") + private Long fMOQty; + + /** + * 工序编号 + */ + @ExcelProperty(value = "工序编号") + private String fOperNumber; + + /** + * 工作中心 + */ + @ExcelProperty(value = "工作中心") + private String fworkcenteridFname; + + /** + * 工艺名称 + */ + @ExcelProperty(value = "工艺名称") + private String fprocessidFname; + + /** + * 工序描述 + */ + @ExcelProperty(value = "工序描述") + private String fOperDescription; + + /** + * 工序控制码 + */ + @ExcelProperty(value = "工序控制码") + private String fOptCtrlCodeidFname; + + /** + * 工序数量 + */ + @ExcelProperty(value = "工序数量") + private Long fOperQty; + + /** + * 工序计划开始时间 + */ + @ExcelProperty(value = "工序计划开始时间") + private Date fOperPlanStartTime; + + /** + * 工序计划结束时间 + */ + @ExcelProperty(value = "工序计划结束时间") + private Date fOperPlanFinishTime; + + /** + * 计划开始时间 + */ + @ExcelProperty(value = "计划开始时间") + private Date fPlanStartTime; + + /** + * 计划结束时间 + */ + @ExcelProperty(value = "计划结束时间") + private Date fPlanFinishTime; + + /** + * 材质 + */ + @ExcelProperty(value = "材质") + private String fmaterialidFnumber; + + /** + * 子项单位 + */ + @ExcelProperty(value = "子项单位") + private String funitid2ChildFname; + + /** + * 父级物料编码 + */ + @ExcelProperty(value = "父级物料编码") + private String fmaterialFnumber; + + /** + * 子项物料名称 + */ + @ExcelProperty(value = "子项物料名称") + private String fMaterialName1; + + /** + * 子项物料编码 + */ + @ExcelProperty(value = "子项物料编码") + private String fMaterialid2ChildFnumber; + + /** + * 分子 + */ + @ExcelProperty(value = "分子") + private Long fNumerator; + + /** + * 分母 + */ + @ExcelProperty(value = "分母") + private Long fDenominator; + /** + * 活动时长 + */ + @ExcelProperty(value = "活动时长") + private Long activityLengh; + + /** + * bom材质 + */ + @ExcelProperty(value = "bom材质") + private String childMaterial; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProductionRouteTwoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProductionRouteTwoMapper.java new file mode 100644 index 0000000..e07a00d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProductionRouteTwoMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.ProductionRouteTwo; +import com.ruoyi.system.domain.vo.ProductionRouteTwoVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 工艺生产用表Mapper接口 + * + * @author ruoyi + * @date 2024-11-26 + */ +public interface ProductionRouteTwoMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java index 5d4fc98..e8c317a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java @@ -10,6 +10,7 @@ import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.ruoyi.system.domain.dto.PlanPrcessNumDTO; import com.ruoyi.system.domain.vo.ImMaterialVo; import com.ruoyi.system.domain.vo.PlanOrderVo; +import com.ruoyi.system.domain.vo.ProductionRouteTwoVo; import com.ruoyi.system.jdmain.rouplan.Model; import com.ruoyi.system.mapper.ImProductionPlanProMapper; import com.ruoyi.system.service.IImProductionPlanProService; @@ -278,10 +279,10 @@ public class JdUtil { public static List getSelecPlan(String rooteProdet) { - List planOrderList = getSelectProceOrder(rooteProdet); + List planOrderList = getSelectProceOrder(rooteProdet); List plannedProcesses = new ArrayList<>(); K3CloudApi client = new K3CloudApi(); - for (PlanOrderVo planOrder : planOrderList) { + for (ProductionRouteTwoVo planOrder : planOrderList) { JsonObject json = new JsonObject(); json.addProperty("FormId", "SFC_OperationPlanning"); json.addProperty("FieldKeys", "FID,FSubEntity_FDetailID,FProductId.FNumber,FOperNumber,FEntity_FEntryID,FProcessId.FName,FSeqNumber,FSeqName,FPlanStartTime,FPlanFinishTime," + @@ -291,7 +292,7 @@ public class JdUtil { JsonObject filterObject = new JsonObject(); filterObject.addProperty("FieldName", "FMONumber"); filterObject.addProperty("Compare", "="); // 改为等号运算符 - filterObject.addProperty("Value", planOrder.getFBillNo()); + // filterObject.addProperty("Value", planOrder.getFBillNo()); filterObject.addProperty("Left", ""); filterObject.addProperty("Right", ""); filterObject.addProperty("Logic", 0);// 从 PlanOrderVo 获取生产令号 @@ -308,7 +309,7 @@ public class JdUtil { try { String resultJson = String.valueOf(client.billQuery(jsonData)); System.out.println( - "生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson + // "生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson ); JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); if (jsonArray == null || jsonArray.size() == 0) { @@ -329,7 +330,7 @@ public class JdUtil { return null; } - public static List getSelectProceOrder(String rooteProdet) { + public static List getSelectProceOrder(String rooteProdet) { K3CloudApi client = new K3CloudApi(); //请求参数,要求为json字符串 JsonObject json = new JsonObject(); @@ -360,11 +361,10 @@ public class JdUtil { JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); // 将JsonArray转为PlanOrder列表 ObjectMapper objectMapper = new ObjectMapper(); - List planOrders = objectMapper.readValue(jsonArray.toString(), new TypeReference>() { + List productionRouteTwoVos = objectMapper.readValue(jsonArray.toString(), new TypeReference>() { }); // 输出或返回结果 - System.out.println(planOrders); - return planOrders; + return productionRouteTwoVos; } catch (Exception e) { e.printStackTrace(); @@ -383,11 +383,11 @@ public class JdUtil { "FChildBaseUnitID.FNumber": "jian" }, */ - public static List get物料清单(String materialCode) { - List planOrderList = getSelectProceOrder(materialCode); + public static List getPlanOrderVo(String materialCode) { + List planOrderList = getSelectProceOrder(materialCode); List plannedProcesses = new ArrayList<>(); K3CloudApi client = new K3CloudApi(); - for (PlanOrderVo planOrder : planOrderList) { + for (ProductionRouteTwoVo planOrder : planOrderList) { JsonObject json = new JsonObject(); json.addProperty("FormId", "ENG_BOM"); json.addProperty("FieldKeys", "F_HBYT_SCLH,FMaterialID.FNumber,FMaterialID.FNumber2,FMaterialName1,FNumerator,FDenominator,FUnitID2.FName"); @@ -395,7 +395,7 @@ public class JdUtil { JsonObject filterObject = new JsonObject(); filterObject.addProperty("FieldName", "FMaterialID.FNumber"); filterObject.addProperty("Compare", "="); // 改为等号运算符 - filterObject.addProperty("Value", planOrder.getFBillNo()); + // filterObject.addProperty("Value", planOrder.getFBillNo()); filterObject.addProperty("Left", ""); filterObject.addProperty("Right", ""); filterObject.addProperty("Logic", 0);// 从 PlanOrderVo 获取生产令号 @@ -412,7 +412,7 @@ public class JdUtil { try { String resultJson = String.valueOf(client.billQuery(jsonData)); System.out.println( - "生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson + // "生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson ); JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); if (jsonArray == null || jsonArray.size() == 0) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionRouteTwoService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionRouteTwoService.java new file mode 100644 index 0000000..446de95 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionRouteTwoService.java @@ -0,0 +1,50 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.vo.ProductionRouteTwoVo; +import com.ruoyi.system.domain.bo.ProductionRouteTwoBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工艺生产用表Service接口 + * + * @author ruoyi + * @date 2024-11-26 + */ +public interface IProductionRouteTwoService { + + /** + * 查询工艺生产用表 + */ + ProductionRouteTwoVo queryById(Long id); + + /** + * 查询工艺生产用表列表 + */ + TableDataInfo queryPageList(ProductionRouteTwoBo bo, PageQuery pageQuery); + + /** + * 查询工艺生产用表列表 + */ + List queryList(ProductionRouteTwoBo bo); + + /** + * 新增工艺生产用表 + */ + Boolean insertByBo(ProductionRouteTwoBo bo); + + /** + * 修改工艺生产用表 + */ + Boolean updateByBo(ProductionRouteTwoBo bo); + + /** + * 校验并批量删除工艺生产用表信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + boolean getSelecPlanRouteList(String rooteProdet); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java index 4967752..8472555 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java @@ -403,11 +403,11 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { List routeArrayList = new ArrayList<>(); // 4. 批量插入 ProcessRoute 数据 for (ProcessRoute processRoute : processRoutes) { - if (processRoute.getProcessNo()!=null||processRoute.getProcessName()!=null){ + if (processRoute.getProcessNo() != null || processRoute.getProcessName() != null) { routeArrayList.add(processRoute); } } - return baseMapper.insertBatch(routeArrayList); + return baseMapper.insertBatch(routeArrayList); } private void processMaterialBom(List processRoutes) { @@ -442,15 +442,19 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { private List processBomDetails(List processRoutes, List productionOrderVos) { List bomDetailsVos = new ArrayList<>(); + // 是否已处理过总装部件 + boolean hasProcessedAssemblyPart = false; // 1. 处理总装部件 for (ProcessRoute processRoute : processRoutes) { if (processRoute != null) { String zFlinghao = processRoute.getRouteDescription(); - if ("总装部件".equals(processRoute.getMaterial())) { + if ("总装部件".equals(processRoute.getMaterial())&& !hasProcessedAssemblyPart) { String zFnumber = processRoute.getMaterialCode(); String zFname = processRoute.getMaterialName(); // 将装配 BOM 详情填充进 BOM 详情列表 createAssemblyBomDetails(zFlinghao, zFnumber, zFname, productionOrderVos); + // 设置标志为已处理 + hasProcessedAssemblyPart = true; continue; } if (processRoute.getRawMaterialCode() != null || processRoute.getRawMaterialName() != null || processRoute.getBomMaterial() != null || processRoute.getBomUnit() != null) { @@ -459,7 +463,6 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { } } } - return bomDetailsVos; } @@ -499,25 +502,32 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { private void createAssemblyBomDetails(String zFlinghao, String zFnumber, String zFname, List productionOrderVos) { ArrayList bomDetailsVos = new ArrayList<>(); for (ProductionOrderVo productionOrderVo : productionOrderVos) { - BomDetailsVo bomDetails = new BomDetailsVo(); - bomDetails.setTotalWeight(zFlinghao); - bomDetails.setFNumber(zFnumber); - bomDetails.setFName(zFname); - bomDetails.setPartdiagramCode(productionOrderVo.getParentDrawingNo()); - bomDetails.setPartdiagramName(productionOrderVo.getParentPart()); - bomDetails.setPartNumber(productionOrderVo.getDrawingNo()); - bomDetails.setName(productionOrderVo.getDrawingName()); - bomDetails.setQuantity(Double.valueOf(productionOrderVo.getQuantity())); - bomDetails.setMaterial(productionOrderVo.getMaterial()); + if (productionOrderVo !=null){ + BomDetailsVo bomDetails = new BomDetailsVo(); + bomDetails.setTotalWeight(zFlinghao); + bomDetails.setFNumber(zFnumber); + bomDetails.setFName(zFname); + bomDetails.setPartdiagramCode(productionOrderVo.getParentDrawingNo()); + bomDetails.setPartdiagramName(productionOrderVo.getParentPart()); + bomDetails.setPartNumber(productionOrderVo.getDrawingNo()); + bomDetails.setName(productionOrderVo.getDrawingName()); + bomDetails.setQuantity(Double.valueOf(productionOrderVo.getQuantity())); + bomDetails.setMaterial(productionOrderVo.getMaterial()); + // 判断外购或自制 + String drawingNo = productionOrderVo.getDrawingNo(); + String remark = productionOrderVo.getRemark(); + if (drawingNo != null ){ + if ((isOutsourced(drawingNo) || (remark != null && remark.contains("外购件")) || drawingNo.startsWith(" "))||drawingNo.startsWith("009")) { + bomDetails.setStats("外购"); + } else { + bomDetails.setStats("自制"); + } + } - // 判断外购或自制 - if (isOutsourced(productionOrderVo.getDrawingNo())) { - bomDetails.setStats("外购"); - } else { - bomDetails.setStats("自制"); + // iBomDetailsService.insertByVo(bomDetails); + bomDetailsVos.add(bomDetails); } - // iBomDetailsService.insertByVo(bomDetails); - bomDetailsVos.add(bomDetails); + } log.info("总装bom物料添加"); @@ -718,7 +728,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { } private boolean isOutsourced(String code) { - return code.startsWith("009") || code.startsWith("AA") || code.startsWith("AB(") || code.startsWith("AC(") || code.startsWith("015") || code.contains("(M)") ||code.startsWith("BC("); + return code.startsWith("009") || code.startsWith("AA") || code.startsWith("AB(") || code.startsWith("AC(") || code.startsWith("015") || code.contains("(M)") || code.startsWith("BC("); } //保存到 BomDetails 表中 @@ -756,6 +766,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { iBomDetailsService.updateByBo(BeanUtil.toBean(material, BomDetailsBo.class)); } } + private void saveBomDetails1(List bomDetailsVos) { List materialsToAdd = new ArrayList<>(); for (BomDetailsVo bomDetailsVo : bomDetailsVos) { @@ -770,7 +781,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { } // 保存 BomDetails 记录 - // iBomDetailsService.insertByVo(BeanUtil.toBean(bomDetails, BomDetailsVo.class)); + // iBomDetailsService.insertByVo(BeanUtil.toBean(bomDetails, BomDetailsVo.class)); } // 新增不存在的物料 @@ -787,7 +798,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { } // 更新物料状态 - // iBomDetailsService.updateByBo(BeanUtil.toBean(material, BomDetailsBo.class)); + // iBomDetailsService.updateByBo(BeanUtil.toBean(material, BomDetailsBo.class)); } } @@ -905,9 +916,9 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { LoadBomResult result = loadBillOfMaterialsPreservation(processRouteXuDTO); // 处理返回结果 if (result.isSuccess()) { - System.out.println("工艺路线保存保存成功: "+processRouteXuDTO.getMaterialCode() + result.getResultData()); + System.out.println("工艺路线保存保存成功: " + processRouteXuDTO.getMaterialCode() + result.getResultData()); } else { - System.out.println("工艺路线保存保存失败: "+processRouteXuDTO.getMaterialCode() + result.getMessage()); + System.out.println("工艺路线保存保存失败: " + processRouteXuDTO.getMaterialCode() + result.getMessage()); } } return rawBomList; // @@ -966,8 +977,11 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { // 使用 ObjectMapper 将 JsonArray 转换为 List ObjectMapper objectMapper = new ObjectMapper(); List plannedProcessList = objectMapper.readValue(jsonArray.toString(), new TypeReference>() { + }); + + // 检查 plannedProcessList 是否为 null,避免空指针异常 if (plannedProcessList != null && !plannedProcessList.isEmpty()) { plannedProcesses.addAll(plannedProcessList); // 将非空列表添加到最终列表中 @@ -980,6 +994,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { combined.setMaterialCode(planOrder.getFmaterialidFnumber()); // 物料编码 combined.setMaterialName(planOrder.getFMaterialName()); // 物料名称 combined.setProcesses(plannedProcessList); + combined.setMaterial(planOrder.getBasePropertyqtr()); combined.setMaterialUsageDTOList(materialUseList); // 5. 添加到最终合并的列表中 combinedVoList.add(combined); @@ -1005,7 +1020,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { //请求参数,要求为json字符串 JsonObject json = new JsonObject(); json.addProperty("FormId", "PRD_MO"); - json.addProperty("FieldKeys", "F_HBYT_SCLH,FBillNo ,FMaterialId.FNumber,FMaterialName"); + json.addProperty("FieldKeys", "F_HBYT_SCLH,FBillNo ,FMaterialId.FNumber,FMaterialName, F_UCHN_BaseProperty_qtr"); JsonArray filterString = new JsonArray(); JsonObject filterObject = new JsonObject(); filterObject.addProperty("FieldName", "F_HBYT_SCLH"); @@ -1050,7 +1065,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { JsonObject json = new JsonObject(); json.addProperty("FormId", "PRD_PPBOM"); - json.addProperty("FieldKeys", "FBillNo,FMaterialID2.FNumber,FMaterialName1,FMaterialModel1,FMaterialType,FMustQty,FPickedQty,FStockID.FName,FMEMO1"); + json.addProperty("FieldKeys", "FBillNo,FMaterialID2.FNumber,FMaterialName1,FMaterialModel1,F_HBYT_CZ,FMaterialType,FMustQty,FPickedQty,FStockID.FName,FMEMO1,FUnitID2.FName,FNumerator,FDenominator"); JsonArray filterString = new JsonArray(); JsonObject filterObject = new JsonObject(); filterObject.addProperty("FieldName", "FMOBillNO"); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionRouteTwoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionRouteTwoServiceImpl.java new file mode 100644 index 0000000..afc1344 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionRouteTwoServiceImpl.java @@ -0,0 +1,203 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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.ruoyi.system.domain.dto.CombinedDTO; +import com.ruoyi.system.domain.dto.MaterialUsageDTO; +import com.ruoyi.system.domain.vo.PlannedProcessVo; +import com.ruoyi.system.service.IProcessRouteService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.bo.ProductionRouteTwoBo; +import com.ruoyi.system.domain.vo.ProductionRouteTwoVo; +import com.ruoyi.system.domain.ProductionRouteTwo; +import com.ruoyi.system.mapper.ProductionRouteTwoMapper; +import com.ruoyi.system.service.IProductionRouteTwoService; +import com.ruoyi.common.utils.StringUtils; + +import java.util.*; + +/** + * 工艺生产用表Service业务层处理 + * + * @author ruoyi + * @date 2024-11-26 + */ +@RequiredArgsConstructor +@Service +public class ProductionRouteTwoServiceImpl implements IProductionRouteTwoService { + + private final ProductionRouteTwoMapper baseMapper; + + @Autowired + IProcessRouteService iProcessRouteService; + + /** + * 查询工艺生产用表 + */ + @Override + public ProductionRouteTwoVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 查询工艺生产用表列表 + */ + @Override + public TableDataInfo queryPageList(ProductionRouteTwoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询工艺生产用表列表 + */ + @Override + public List queryList(ProductionRouteTwoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(ProductionRouteTwoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getFHbytSclh()), ProductionRouteTwo::getFHbytSclh, bo.getFHbytSclh()); + lqw.like(StringUtils.isNotBlank(bo.getFProductName()), ProductionRouteTwo::getFProductName, bo.getFProductName()); + lqw.eq(StringUtils.isNotBlank(bo.getFproductidFnumber()), ProductionRouteTwo::getFproductidFnumber, bo.getFproductidFnumber()); + lqw.eq(bo.getFMOQty() != null, ProductionRouteTwo::getFMOQty, bo.getFMOQty()); + lqw.eq(StringUtils.isNotBlank(bo.getFOperNumber()), ProductionRouteTwo::getFOperNumber, bo.getFOperNumber()); + lqw.like(StringUtils.isNotBlank(bo.getFworkcenteridFname()), ProductionRouteTwo::getFworkcenteridFname, bo.getFworkcenteridFname()); + lqw.like(StringUtils.isNotBlank(bo.getFprocessidFname()), ProductionRouteTwo::getFprocessidFname, bo.getFprocessidFname()); + lqw.eq(StringUtils.isNotBlank(bo.getFOperDescription()), ProductionRouteTwo::getFOperDescription, bo.getFOperDescription()); + lqw.like(StringUtils.isNotBlank(bo.getFOptCtrlCodeidFname()), ProductionRouteTwo::getFOptCtrlCodeidFname, bo.getFOptCtrlCodeidFname()); + lqw.eq(bo.getFOperQty() != null, ProductionRouteTwo::getFOperQty, bo.getFOperQty()); + lqw.eq(bo.getFOperPlanStartTime() != null, ProductionRouteTwo::getFOperPlanStartTime, bo.getFOperPlanStartTime()); + lqw.eq(bo.getFOperPlanFinishTime() != null, ProductionRouteTwo::getFOperPlanFinishTime, bo.getFOperPlanFinishTime()); + lqw.eq(bo.getFPlanStartTime() != null, ProductionRouteTwo::getFPlanStartTime, bo.getFPlanStartTime()); + lqw.eq(bo.getFPlanFinishTime() != null, ProductionRouteTwo::getFPlanFinishTime, bo.getFPlanFinishTime()); + lqw.eq(StringUtils.isNotBlank(bo.getFmaterialidFnumber()), ProductionRouteTwo::getFmaterialidFnumber, bo.getFmaterialidFnumber()); + lqw.like(StringUtils.isNotBlank(bo.getFunitid2ChildFname()), ProductionRouteTwo::getFunitid2ChildFname, bo.getFunitid2ChildFname()); + lqw.eq(StringUtils.isNotBlank(bo.getFmaterialFnumber()), ProductionRouteTwo::getFmaterialFnumber, bo.getFmaterialFnumber()); + lqw.eq(StringUtils.isNotBlank(bo.getFMaterialName1()), ProductionRouteTwo::getFMaterialName1, bo.getFMaterialName1()); + lqw.eq(StringUtils.isNotBlank(bo.getFMaterialid2ChildFnumber()), ProductionRouteTwo::getFMaterialid2ChildFnumber, bo.getFMaterialid2ChildFnumber()); + lqw.eq(bo.getFNumerator() != null, ProductionRouteTwo::getFNumerator, bo.getFNumerator()); + lqw.eq(bo.getFDenominator() != null, ProductionRouteTwo::getFDenominator, bo.getFDenominator()); + lqw.eq(bo.getActivityLengh() != null, ProductionRouteTwo::getActivityLengh, bo.getActivityLengh()); + lqw.eq(StringUtils.isNotBlank(bo.getChildMaterial()), ProductionRouteTwo::getChildMaterial, bo.getChildMaterial()); + return lqw; + } + + /** + * 新增工艺生产用表 + */ + @Override + public Boolean insertByBo(ProductionRouteTwoBo bo) { + ProductionRouteTwo add = BeanUtil.toBean(bo, ProductionRouteTwo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改工艺生产用表 + */ + @Override + public Boolean updateByBo(ProductionRouteTwoBo bo) { + ProductionRouteTwo update = BeanUtil.toBean(bo, ProductionRouteTwo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ProductionRouteTwo entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除工艺生产用表 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * @param rooteProdet + * @return + */ + @Override + public boolean getSelecPlanRouteList(String rooteProdet) { + // 获取 CombinedDTO 数据 + List selecPlanRouteList = iProcessRouteService.getSelecPlanRouteList(rooteProdet); + List productionRouteTwoList = new ArrayList<>(); + + // 用于存储已处理过的工序号和物料的组合 + Set processedCombinations = new HashSet<>(); + + // 遍历 CombinedDTO 列表 + for (CombinedDTO combinedDTO : selecPlanRouteList) { + // 为每个 CombinedDTO 遍历每个工序 + for (PlannedProcessVo plannedProcess : combinedDTO.getProcesses()) { + // 为每个工序,再遍历每个物料 + for (MaterialUsageDTO materialUsageDTO : combinedDTO.getMaterialUsageDTOList()) { + // 生成一个唯一的工序和物料组合标识符 + String combinationKey = plannedProcess.getFOperNumber() + "-" + combinedDTO.getMaterialCode(); + + // 如果该组合已处理过,则跳过 + if (processedCombinations.contains(combinationKey)) { + continue; + } + + // 如果没有处理过,添加到 Set 中,表示该组合已处理 + processedCombinations.add(combinationKey); + + // 创建一个新的 ProductionRouteTwo 对象 + ProductionRouteTwo productionRouteTwo = new ProductionRouteTwo(); + productionRouteTwo.setFHbytSclh(rooteProdet); // 设置生产路线编号 + productionRouteTwo.setFproductidFnumber(combinedDTO.getMaterialCode()); // 设置物料编码 + productionRouteTwo.setFProductName(combinedDTO.getMaterialName()); // 设置物料名称 + productionRouteTwo.setFmaterialidFnumber(combinedDTO.getMaterial()); + // 填充工序相关数据 + productionRouteTwo.setFOperNumber(String.valueOf(plannedProcess.getFOperNumber())); // 工序号 + productionRouteTwo.setFOperDescription(plannedProcess.getFOperDescription()); // 工序描述 + productionRouteTwo.setFOperQty(plannedProcess.getFActivity1BaseQty().longValue()); // 工序数量 + productionRouteTwo.setFOperPlanStartTime(plannedProcess.getFSeqPlanStartTime()); // 工序计划开始时间 + productionRouteTwo.setFOperPlanFinishTime(plannedProcess.getFSeqPlanFinishTime()); // 工序计划结束时间 + productionRouteTwo.setFPlanStartTime(plannedProcess.getFPlanStartTime()); // 计划开始时间 + productionRouteTwo.setFPlanFinishTime(plannedProcess.getFPlanFinishTime()); // 计划结束时间 + productionRouteTwo.setFworkcenteridFname(plannedProcess.getFWorkCenterName()); // 工作中心 + productionRouteTwo.setFprocessidFname(plannedProcess.getFProcessName()); // 工艺名称 + productionRouteTwo.setFOptCtrlCodeidFname(plannedProcess.getFOptCtrlCodeIFName()); + productionRouteTwo.setActivityLengh(Long.valueOf(String.valueOf(plannedProcess.getFActivity1BaseQty()))); + // 填充物料相关数据 + productionRouteTwo.setFMaterialid2ChildFnumber(materialUsageDTO.getMaterialCode()); // 物料编码 + productionRouteTwo.setFMaterialName1(materialUsageDTO.getMaterialName()); // 物料名称 + productionRouteTwo.setFNumerator(materialUsageDTO.getFNumerator()); // 分子fMaterialName1 + productionRouteTwo.setFDenominator(materialUsageDTO.getFDenominator()); // 分母 + productionRouteTwo.setFunitid2ChildFname(materialUsageDTO.getUnit()); + productionRouteTwo.setChildMaterial(materialUsageDTO.getChildMaterial()); + + // 将填充好的 ProductionRouteTwo 对象添加到列表中 + productionRouteTwoList.add(productionRouteTwo); + } + } + } + + // 批量插入数据到数据库 + return baseMapper.insertBatch(productionRouteTwoList); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/ProductionRouteTwoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/ProductionRouteTwoMapper.xml new file mode 100644 index 0000000..ecc30ca --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/ProductionRouteTwoMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +