1. 新增工序信息管理、工艺信息管理、组织工艺工序信息管理功能
This commit is contained in:
@@ -23,7 +23,7 @@ public class ProcessingInfomationPageReqVO extends PageParam {
|
||||
private String name;
|
||||
|
||||
@Schema(description = "工艺类型值")
|
||||
private Long typeValue;
|
||||
private String typeValue;
|
||||
|
||||
@Schema(description = "状态值-工艺状态")
|
||||
private String statusValue;
|
||||
|
||||
@@ -30,7 +30,7 @@ public class ProcessingInfomationRespVO {
|
||||
|
||||
@Schema(description = "工艺类型值")
|
||||
@ExcelProperty("工艺类型值")
|
||||
private Long typeValue;
|
||||
private String typeValue;
|
||||
|
||||
@Schema(description = "状态值-工艺状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("状态值-工艺状态")
|
||||
|
||||
@@ -26,7 +26,7 @@ public class ProcessingInfomationSaveReqVO {
|
||||
private String name;
|
||||
|
||||
@Schema(description = "工艺类型值")
|
||||
private Long typeValue;
|
||||
private String typeValue;
|
||||
|
||||
@Schema(description = "状态值-工艺状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "状态值-工艺状态不能为空")
|
||||
|
||||
@@ -23,7 +23,7 @@ public class ProcessingInfomationTreeRespVO {
|
||||
private String name;
|
||||
|
||||
@Schema(description = "工艺类型值")
|
||||
private Long typeValue;
|
||||
private String typeValue;
|
||||
|
||||
@Schema(description = "状态值-工艺状态")
|
||||
private String statusValue;
|
||||
|
||||
@@ -9,8 +9,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import jakarta.validation.constraints.*;
|
||||
import jakarta.validation.*;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
@@ -19,7 +18,6 @@ import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
|
||||
import com.zt.plat.framework.common.pojo.PageParam;
|
||||
import com.zt.plat.framework.common.pojo.PageResult;
|
||||
import com.zt.plat.framework.common.pojo.CommonResult;
|
||||
import com.zt.plat.framework.common.util.object.BeanUtils;
|
||||
import static com.zt.plat.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.zt.plat.framework.excel.core.util.ExcelUtils;
|
||||
@@ -28,7 +26,6 @@ import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.*;
|
||||
import com.zt.plat.module.base.dal.dataobject.processinginfomationoperation.ProcessingInfomationOperationDO;
|
||||
import com.zt.plat.module.base.service.processinginfomationoperation.ProcessingInfomationOperationService;
|
||||
|
||||
@Tag(name = "管理后台 - 工艺工序")
|
||||
@@ -44,7 +41,7 @@ public class ProcessingInfomationOperationController {
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建工艺工序")
|
||||
@PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:create')")
|
||||
public CommonResult<ProcessingInfomationOperationRespVO> createProcessingInfomationOperation(@Valid @RequestBody ProcessingInfomationOperationSaveReqVO createReqVO) {
|
||||
public CommonResult<ProcessingInfomationOperationDetailRespVO> createProcessingInfomationOperation(@Valid @RequestBody ProcessingInfomationOperationSaveReqVO createReqVO) {
|
||||
return success(processingInfomationOperationService.createProcessingInfomationOperation(createReqVO));
|
||||
}
|
||||
|
||||
@@ -78,9 +75,8 @@ public class ProcessingInfomationOperationController {
|
||||
@Operation(summary = "获得工艺工序")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:query')")
|
||||
public CommonResult<ProcessingInfomationOperationRespVO> getProcessingInfomationOperation(@RequestParam("id") Long id) {
|
||||
ProcessingInfomationOperationDO processingInfomationOperation = processingInfomationOperationService.getProcessingInfomationOperation(id);
|
||||
return success(BeanUtils.toBean(processingInfomationOperation, ProcessingInfomationOperationRespVO.class));
|
||||
public CommonResult<ProcessingInfomationOperationDetailRespVO> getProcessingInfomationOperation(@RequestParam("id") Long id) {
|
||||
return success(processingInfomationOperationService.getProcessingInfomationOperation(id));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@@ -91,6 +87,13 @@ public class ProcessingInfomationOperationController {
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@GetMapping("/organization/page")
|
||||
@Operation(summary = "获得组织工艺工序分页")
|
||||
@PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:query')")
|
||||
public CommonResult<PageResult<ProcessingInfomationOperationOrganizationRespVO>> getOrganizationOperationPage(@Valid ProcessingInfomationOperationOrganizationPageReqVO pageReqVO) {
|
||||
return success(processingInfomationOperationService.getOrganizationOperationPage(pageReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出工艺工序 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:export')")
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工艺工序详情 Response VO
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ProcessingInfomationOperationDetailRespVO extends ProcessingInfomationOperationRespVO {
|
||||
|
||||
@Schema(description = "工艺工序关联的物料信息")
|
||||
private List<ProcessingInfomationOperationMaterialRespVO> materials = Collections.emptyList();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工艺工序物料 Response VO(包含扩展信息)
|
||||
*/
|
||||
@Data
|
||||
public class ProcessingInfomationOperationMaterialRespVO {
|
||||
|
||||
@Schema(description = "主键ID", example = "10086")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工艺工序ID", example = "20001")
|
||||
private Long processingOperationId;
|
||||
|
||||
@Schema(description = "物料ID", example = "30001")
|
||||
private Long materialId;
|
||||
|
||||
@Schema(description = "物料编码")
|
||||
private String materialCode;
|
||||
|
||||
@Schema(description = "物料名称")
|
||||
private String materialName;
|
||||
|
||||
@Schema(description = "物料类型值", example = "input")
|
||||
private String typeValue;
|
||||
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "关联组织ID列表")
|
||||
private List<Long> departmentIds = Collections.emptyList();
|
||||
|
||||
@Schema(description = "关联组织信息")
|
||||
private List<ProcessingInfomationOperationMaterialDeptRespVO> departments = Collections.emptyList();
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Data
|
||||
public static class ProcessingInfomationOperationMaterialDeptRespVO {
|
||||
@Schema(description = "组织ID", example = "50001")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "组织名称")
|
||||
private String name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工艺工序物料保存 Request VO
|
||||
*/
|
||||
@Data
|
||||
public class ProcessingInfomationOperationMaterialSaveReqVO {
|
||||
|
||||
@Schema(description = "主键ID", example = "10086")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20001")
|
||||
@NotNull(message = "物料不能为空")
|
||||
private Long materialId;
|
||||
|
||||
@Schema(description = "物料类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "input")
|
||||
@NotEmpty(message = "物料类型不能为空")
|
||||
private String typeValue;
|
||||
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "组织ID集合")
|
||||
private List<Long> departmentIds;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
|
||||
|
||||
import com.zt.plat.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
/**
|
||||
* 组织工艺工序分页 Request VO
|
||||
*/
|
||||
@Data
|
||||
public class ProcessingInfomationOperationOrganizationPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "组织ID", example = "1001")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "工艺ID", example = "2001")
|
||||
private Long processingId;
|
||||
|
||||
@Schema(description = "工序ID", example = "3001")
|
||||
private Long operationId;
|
||||
|
||||
@Schema(description = "是否关键工序")
|
||||
private Integer isKey;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 组织工艺工序 Response VO
|
||||
*/
|
||||
@Data
|
||||
public class ProcessingInfomationOperationOrganizationRespVO {
|
||||
|
||||
@Schema(description = "工艺工序关联ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "组织ID")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "组织名称")
|
||||
private String deptName;
|
||||
|
||||
@Schema(description = "工艺ID")
|
||||
private Long processingId;
|
||||
|
||||
@Schema(description = "工艺编码")
|
||||
private String processingCode;
|
||||
|
||||
@Schema(description = "工艺名称")
|
||||
private String processingName;
|
||||
|
||||
@Schema(description = "工序ID")
|
||||
private Long operationId;
|
||||
|
||||
@Schema(description = "工序编码")
|
||||
private String operationCode;
|
||||
|
||||
@Schema(description = "工序名称")
|
||||
private String operationName;
|
||||
|
||||
@Schema(description = "工序是否关键")
|
||||
private Integer isKey;
|
||||
|
||||
@Schema(description = "工艺状态")
|
||||
private String processingStatus;
|
||||
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
@@ -22,6 +22,9 @@ public class ProcessingInfomationOperationPageReqVO extends PageParam {
|
||||
@Schema(description = "工艺ID", example = "5773")
|
||||
private Long processingId;
|
||||
|
||||
@Schema(description = "工序ID", example = "3001")
|
||||
private Long operationId;
|
||||
|
||||
@Schema(description = "是否关键工序")
|
||||
private Integer isKey;
|
||||
|
||||
|
||||
@@ -44,6 +44,22 @@ public class ProcessingInfomationOperationRespVO {
|
||||
@ExcelProperty("工艺ID")
|
||||
private Long processingId;
|
||||
|
||||
@Schema(description = "工序ID", example = "3001")
|
||||
@ExcelProperty("工序ID")
|
||||
private Long operationId;
|
||||
|
||||
@Schema(description = "工序编码")
|
||||
@ExcelProperty("工序编码")
|
||||
private String operationCode;
|
||||
|
||||
@Schema(description = "工序名称")
|
||||
@ExcelProperty("工序名称")
|
||||
private String operationName;
|
||||
|
||||
@Schema(description = "工序类型值")
|
||||
@ExcelProperty("工序类型值")
|
||||
private String operationTypeValue;
|
||||
|
||||
@Schema(description = "是否关键工序")
|
||||
@ExcelProperty("是否关键工序")
|
||||
private Integer isKey;
|
||||
|
||||
@@ -21,6 +21,12 @@ public class ProcessingInfomationOperationSaveReqVO {
|
||||
@Schema(description = "工艺ID", example = "5773")
|
||||
private Long processingId;
|
||||
|
||||
@Schema(description = "工序ID", example = "3001")
|
||||
private Long operationId;
|
||||
|
||||
@Schema(description = "工序类型值")
|
||||
private String operationTypeValue;
|
||||
|
||||
@Schema(description = "是否关键工序")
|
||||
private Integer isKey;
|
||||
|
||||
@@ -28,4 +34,7 @@ public class ProcessingInfomationOperationSaveReqVO {
|
||||
@NotEmpty(message = "备注不能为空")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "关联物料配置")
|
||||
private List<ProcessingInfomationOperationMaterialSaveReqVO> materials;
|
||||
|
||||
}
|
||||
@@ -107,8 +107,9 @@ public class ProcessingOperationController {
|
||||
@GetMapping("/simple-list")
|
||||
@Operation(summary = "获得工序简单列表")
|
||||
@PreAuthorize("@ss.hasPermission('base:processing-operation:query')")
|
||||
public CommonResult<List<ProcessingOperationSimpleRespVO>> getProcessingOperationSimpleList() {
|
||||
List<ProcessingOperationDO> list = processingOperationService.getProcessingOperationList();
|
||||
public CommonResult<List<ProcessingOperationSimpleRespVO>> getProcessingOperationSimpleList(
|
||||
@RequestParam(value = "typeValue", required = false) String typeValue) {
|
||||
List<ProcessingOperationDO> list = processingOperationService.getProcessingOperationListByType(typeValue);
|
||||
return success(BeanUtils.toBean(list, ProcessingOperationSimpleRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
@@ -16,4 +16,7 @@ public class ProcessingOperationSimpleRespVO {
|
||||
@Schema(description = "工序名称", example = "熔铸")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "工序类型值", example = "10")
|
||||
private String typeValue;
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ public interface ProcessingInfomationOperationMapper extends BaseMapperX<Process
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getPreviousOperationId, reqVO.getPreviousOperationId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getNextOperationId, reqVO.getNextOperationId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getProcessingId, reqVO.getProcessingId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getOperationId, reqVO.getOperationId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getIsKey, reqVO.getIsKey())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getRemark, reqVO.getRemark())
|
||||
.betweenIfPresent(ProcessingInfomationOperationDO::getCreateTime, reqVO.getCreateTime())
|
||||
@@ -33,6 +34,7 @@ public interface ProcessingInfomationOperationMapper extends BaseMapperX<Process
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getPreviousOperationId, reqVO.getPreviousOperationId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getNextOperationId, reqVO.getNextOperationId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getProcessingId, reqVO.getProcessingId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getOperationId, reqVO.getOperationId())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getIsKey, reqVO.getIsKey())
|
||||
.eqIfPresent(ProcessingInfomationOperationDO::getRemark, reqVO.getRemark())
|
||||
.betweenIfPresent(ProcessingInfomationOperationDO::getCreateTime, reqVO.getCreateTime())
|
||||
|
||||
@@ -28,4 +28,11 @@ public interface ProcessingOperationMapper extends BaseMapperX<ProcessingOperati
|
||||
.orderByDesc(ProcessingOperationDO::getId));
|
||||
}
|
||||
|
||||
default List<ProcessingOperationDO> selectSimpleList(String typeValue) {
|
||||
return selectList(new LambdaQueryWrapperX<ProcessingOperationDO>()
|
||||
.eqIfPresent(ProcessingOperationDO::getTypeValue, typeValue)
|
||||
.orderByAsc(ProcessingOperationDO::getSort)
|
||||
.orderByAsc(ProcessingOperationDO::getId));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import java.util.*;
|
||||
import com.zt.plat.framework.common.pojo.PageResult;
|
||||
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationOrganizationPageReqVO;
|
||||
import com.zt.plat.module.base.dal.dataobject.processingoperationmaterial.ProcessingOperationMaterialDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.zt.plat.module.base.controller.admin.processingoperationmaterial.vo.*;
|
||||
@@ -26,4 +27,32 @@ public interface ProcessingOperationMaterialMapper extends BaseMapperX<Processin
|
||||
.orderByDesc(ProcessingOperationMaterialDO::getId));
|
||||
}
|
||||
|
||||
default void deleteByProcessingOperationId(Long processingOperationId) {
|
||||
if (processingOperationId == null) {
|
||||
return;
|
||||
}
|
||||
delete(new LambdaQueryWrapperX<ProcessingOperationMaterialDO>()
|
||||
.eq(ProcessingOperationMaterialDO::getProcessingOperationId, processingOperationId));
|
||||
}
|
||||
|
||||
default void deleteByProcessingOperationIds(Collection<Long> processingOperationIds) {
|
||||
if (processingOperationIds == null || processingOperationIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
delete(new LambdaQueryWrapperX<ProcessingOperationMaterialDO>()
|
||||
.in(ProcessingOperationMaterialDO::getProcessingOperationId, processingOperationIds));
|
||||
}
|
||||
|
||||
default List<ProcessingOperationMaterialDO> selectListByProcessingOperationIds(Collection<Long> processingOperationIds) {
|
||||
if (processingOperationIds == null || processingOperationIds.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return selectList(new LambdaQueryWrapperX<ProcessingOperationMaterialDO>()
|
||||
.in(ProcessingOperationMaterialDO::getProcessingOperationId, processingOperationIds));
|
||||
}
|
||||
|
||||
default List<ProcessingOperationMaterialDO> selectOrganizationList(ProcessingInfomationOperationOrganizationPageReqVO reqVO) {
|
||||
return selectList();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -51,7 +51,7 @@ public class ProcessingInfomationDO extends BaseDO {
|
||||
* 工艺类型值
|
||||
*/
|
||||
@TableField("TP_VAL")
|
||||
private Long typeValue;
|
||||
private String typeValue;
|
||||
/**
|
||||
* 状态值-工艺状态
|
||||
*/
|
||||
|
||||
@@ -31,6 +31,12 @@ public class ProcessingInfomationOperationDO extends BaseDO {
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
/**
|
||||
* 工序ID
|
||||
*/
|
||||
@TableField("OPTN_ID")
|
||||
private Long operationId;
|
||||
|
||||
/**
|
||||
* 前序工序ID
|
||||
*/
|
||||
|
||||
@@ -34,10 +34,12 @@ public class ProcessingOperationMaterialDO extends BaseDO {
|
||||
/**
|
||||
* 工艺工序ID
|
||||
*/
|
||||
@TableField("PROC_OPTN_ID")
|
||||
private Long processingOperationId;
|
||||
/**
|
||||
* 物料ID
|
||||
*/
|
||||
@TableField("MTRL_ID")
|
||||
private Long materialId;
|
||||
/**
|
||||
* 类型值-物料类型(产出/投入)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.zt.plat.module.base.service.processinginfomation;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -32,11 +33,52 @@ public class ProcessingInfomationServiceImpl implements ProcessingInfomationServ
|
||||
@Resource
|
||||
private ProcessingInfomationMapper processingInfomationMapper;
|
||||
|
||||
private String normalizeDictionaryValue(String value) {
|
||||
if (StrUtil.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
String trimmed = value.trim();
|
||||
int idx = trimmed.length();
|
||||
while (idx > 0 && Character.isDigit(trimmed.charAt(idx - 1))) {
|
||||
idx--;
|
||||
}
|
||||
if (idx == trimmed.length()) {
|
||||
// no trailing digits
|
||||
return trimmed;
|
||||
}
|
||||
String digits = trimmed.substring(idx);
|
||||
String prefix = trimmed.substring(0, idx);
|
||||
if (StrUtil.isEmpty(prefix) || isSafeDictionaryPrefix(prefix)) {
|
||||
return digits;
|
||||
}
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
private void normalizeProcessingInfomation(ProcessingInfomationDO data) {
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
data.setTypeValue(normalizeDictionaryValue(data.getTypeValue()));
|
||||
data.setStatusValue(normalizeDictionaryValue(data.getStatusValue()));
|
||||
}
|
||||
|
||||
private boolean isSafeDictionaryPrefix(String prefix) {
|
||||
for (int i = 0; i < prefix.length(); i++) {
|
||||
char ch = prefix.charAt(i);
|
||||
if (!(Character.isLetter(ch) || ch == '_' || ch == '-' || ch == ':')) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessingInfomationRespVO createProcessingInfomation(ProcessingInfomationSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ProcessingInfomationDO processingInfomation = BeanUtils.toBean(createReqVO, ProcessingInfomationDO.class);
|
||||
normalizeProcessingInfomation(processingInfomation);
|
||||
processingInfomationMapper.insert(processingInfomation);
|
||||
normalizeProcessingInfomation(processingInfomation);
|
||||
// 返回
|
||||
return BeanUtils.toBean(processingInfomation, ProcessingInfomationRespVO.class);
|
||||
}
|
||||
@@ -47,6 +89,7 @@ public class ProcessingInfomationServiceImpl implements ProcessingInfomationServ
|
||||
validateProcessingInfomationExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ProcessingInfomationDO updateObj = BeanUtils.toBean(updateReqVO, ProcessingInfomationDO.class);
|
||||
normalizeProcessingInfomation(updateObj);
|
||||
processingInfomationMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@@ -81,17 +124,28 @@ public class ProcessingInfomationServiceImpl implements ProcessingInfomationServ
|
||||
|
||||
@Override
|
||||
public ProcessingInfomationDO getProcessingInfomation(Long id) {
|
||||
return processingInfomationMapper.selectById(id);
|
||||
ProcessingInfomationDO data = processingInfomationMapper.selectById(id);
|
||||
normalizeProcessingInfomation(data);
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ProcessingInfomationDO> getProcessingInfomationPage(ProcessingInfomationPageReqVO pageReqVO) {
|
||||
return processingInfomationMapper.selectPage(pageReqVO);
|
||||
PageResult<ProcessingInfomationDO> pageResult = processingInfomationMapper.selectPage(pageReqVO);
|
||||
List<ProcessingInfomationDO> records = pageResult.getList();
|
||||
if (CollUtil.isNotEmpty(records)) {
|
||||
records.forEach(this::normalizeProcessingInfomation);
|
||||
}
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessingInfomationDO> getProcessingInfomationList() {
|
||||
return processingInfomationMapper.selectList();
|
||||
List<ProcessingInfomationDO> list = processingInfomationMapper.selectList();
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
list.forEach(this::normalizeProcessingInfomation);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
package com.zt.plat.module.base.service.processinginfomationoperation;
|
||||
|
||||
import java.util.*;
|
||||
import jakarta.validation.*;
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.*;
|
||||
import com.zt.plat.module.base.dal.dataobject.processinginfomationoperation.ProcessingInfomationOperationDO;
|
||||
import com.zt.plat.framework.common.pojo.PageResult;
|
||||
@@ -20,7 +21,7 @@ public interface ProcessingInfomationOperationService {
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
ProcessingInfomationOperationRespVO createProcessingInfomationOperation(@Valid ProcessingInfomationOperationSaveReqVO createReqVO);
|
||||
ProcessingInfomationOperationDetailRespVO createProcessingInfomationOperation(@Valid ProcessingInfomationOperationSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新工艺工序
|
||||
@@ -49,7 +50,7 @@ public interface ProcessingInfomationOperationService {
|
||||
* @param id 编号
|
||||
* @return 工艺工序
|
||||
*/
|
||||
ProcessingInfomationOperationDO getProcessingInfomationOperation(Long id);
|
||||
ProcessingInfomationOperationDetailRespVO getProcessingInfomationOperation(Long id);
|
||||
|
||||
/**
|
||||
* 获得工艺工序分页
|
||||
@@ -75,4 +76,9 @@ public interface ProcessingInfomationOperationService {
|
||||
*/
|
||||
List<ProcessingInfomationOperationRespVO> getProcessingInfomationOperationDetailList(ProcessingInfomationOperationPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获得组织工艺工序分页
|
||||
*/
|
||||
PageResult<ProcessingInfomationOperationOrganizationRespVO> getOrganizationOperationPage(ProcessingInfomationOperationOrganizationPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
@@ -2,34 +2,55 @@ package com.zt.plat.module.base.service.processinginfomationoperation;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.*;
|
||||
import com.zt.plat.module.base.dal.dataobject.processinginfomationoperation.ProcessingInfomationOperationDO;
|
||||
import com.zt.plat.module.base.dal.dao.processingoperation.ProcessingOperationMapper;
|
||||
import com.zt.plat.module.base.dal.dataobject.processingoperation.ProcessingOperationDO;
|
||||
import com.zt.plat.framework.common.pojo.PageResult;
|
||||
import com.zt.plat.framework.common.pojo.PageParam;
|
||||
import com.zt.plat.framework.common.util.object.BeanUtils;
|
||||
|
||||
import com.zt.plat.framework.common.pojo.PageResult;
|
||||
import com.zt.plat.framework.common.util.object.BeanUtils;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationDetailRespVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationMaterialRespVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationMaterialRespVO.ProcessingInfomationOperationMaterialDeptRespVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationMaterialSaveReqVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationOrganizationPageReqVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationOrganizationRespVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationPageReqVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationRespVO;
|
||||
import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.ProcessingInfomationOperationSaveReqVO;
|
||||
import com.zt.plat.module.base.dal.dao.processinginfomation.ProcessingInfomationMapper;
|
||||
import com.zt.plat.module.base.dal.dao.processinginfomationoperation.ProcessingInfomationOperationMapper;
|
||||
import com.zt.plat.module.base.dal.dao.processingoperation.ProcessingOperationMapper;
|
||||
import com.zt.plat.module.base.dal.dao.processingoperationmaterial.ProcessingOperationMaterialMapper;
|
||||
import com.zt.plat.module.base.dal.dataobject.base.MaterialInfomationDO;
|
||||
import com.zt.plat.module.base.dal.dataobject.processinginfomation.ProcessingInfomationDO;
|
||||
import com.zt.plat.module.base.dal.dataobject.processinginfomationoperation.ProcessingInfomationOperationDO;
|
||||
import com.zt.plat.module.base.dal.dataobject.processingoperation.ProcessingOperationDO;
|
||||
import com.zt.plat.module.base.dal.dataobject.processingoperationmaterial.ProcessingOperationMaterialDO;
|
||||
import com.zt.plat.module.base.dal.mysql.base.MaterialInfomationMapper;
|
||||
import com.zt.plat.module.system.api.dept.DeptApi;
|
||||
import com.zt.plat.module.system.api.dept.dto.DeptRespDTO;
|
||||
|
||||
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList;
|
||||
import static com.zt.plat.framework.common.util.collection.CollectionUtils.diffList;
|
||||
import static com.zt.plat.module.base.enums.ErrorCodeConstants.*;
|
||||
import static com.zt.plat.module.base.enums.ErrorCodeConstants.PROCESSING_INFOMATION_OPERATION_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 工艺工序 Service 实现类
|
||||
*
|
||||
* @author 后台管理-1
|
||||
* Processing operation service implementation.
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
@@ -39,43 +60,52 @@ public class ProcessingInfomationOperationServiceImpl implements ProcessingInfom
|
||||
private ProcessingInfomationOperationMapper processingInfomationOperationMapper;
|
||||
@Resource
|
||||
private ProcessingOperationMapper processingOperationMapper;
|
||||
@Resource
|
||||
private ProcessingOperationMaterialMapper processingOperationMaterialMapper;
|
||||
@Resource
|
||||
private ProcessingInfomationMapper processingInfomationMapper;
|
||||
@Resource
|
||||
private MaterialInfomationMapper materialInfomationMapper;
|
||||
@Resource
|
||||
private DeptApi deptApi;
|
||||
|
||||
@Override
|
||||
public ProcessingInfomationOperationRespVO createProcessingInfomationOperation(ProcessingInfomationOperationSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ProcessingInfomationOperationDO processingInfomationOperation = BeanUtils.toBean(createReqVO, ProcessingInfomationOperationDO.class);
|
||||
processingInfomationOperationMapper.insert(processingInfomationOperation);
|
||||
// 返回
|
||||
return BeanUtils.toBean(processingInfomationOperation, ProcessingInfomationOperationRespVO.class);
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ProcessingInfomationOperationDetailRespVO createProcessingInfomationOperation(ProcessingInfomationOperationSaveReqVO createReqVO) {
|
||||
ProcessingInfomationOperationDO relation = BeanUtils.toBean(createReqVO, ProcessingInfomationOperationDO.class);
|
||||
processingInfomationOperationMapper.insert(relation);
|
||||
saveOperationMaterials(relation.getId(), createReqVO.getMaterials());
|
||||
return getProcessingInfomationOperation(relation.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateProcessingInfomationOperation(ProcessingInfomationOperationSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateProcessingInfomationOperationExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ProcessingInfomationOperationDO updateObj = BeanUtils.toBean(updateReqVO, ProcessingInfomationOperationDO.class);
|
||||
processingInfomationOperationMapper.updateById(updateObj);
|
||||
saveOperationMaterials(updateReqVO.getId(), updateReqVO.getMaterials());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProcessingInfomationOperation(Long id) {
|
||||
// 校验存在
|
||||
validateProcessingInfomationOperationExists(id);
|
||||
// 删除
|
||||
processingInfomationOperationMapper.deleteById(id);
|
||||
processingOperationMaterialMapper.deleteByProcessingOperationId(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProcessingInfomationOperationListByIds(List<Long> ids) {
|
||||
// 校验存在
|
||||
public void deleteProcessingInfomationOperationListByIds(List<Long> ids) {
|
||||
validateProcessingInfomationOperationExists(ids);
|
||||
// 删除
|
||||
processingInfomationOperationMapper.deleteByIds(ids);
|
||||
}
|
||||
processingInfomationOperationMapper.deleteBatchIds(ids);
|
||||
processingOperationMaterialMapper.deleteByProcessingOperationIds(ids);
|
||||
}
|
||||
|
||||
private void validateProcessingInfomationOperationExists(List<Long> ids) {
|
||||
List<ProcessingInfomationOperationDO> list = processingInfomationOperationMapper.selectByIds(ids);
|
||||
if (CollUtil.isEmpty(ids)) {
|
||||
throw exception(PROCESSING_INFOMATION_OPERATION_NOT_EXISTS);
|
||||
}
|
||||
List<ProcessingInfomationOperationDO> list = processingInfomationOperationMapper.selectBatchIds(ids);
|
||||
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
|
||||
throw exception(PROCESSING_INFOMATION_OPERATION_NOT_EXISTS);
|
||||
}
|
||||
@@ -88,8 +118,17 @@ public class ProcessingInfomationOperationServiceImpl implements ProcessingInfom
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessingInfomationOperationDO getProcessingInfomationOperation(Long id) {
|
||||
return processingInfomationOperationMapper.selectById(id);
|
||||
public ProcessingInfomationOperationDetailRespVO getProcessingInfomationOperation(Long id) {
|
||||
ProcessingInfomationOperationDO relation = processingInfomationOperationMapper.selectById(id);
|
||||
if (relation == null) {
|
||||
return null;
|
||||
}
|
||||
Map<Long, ProcessingOperationDO> operationMap = loadOperationMap(Collections.singletonList(relation));
|
||||
Map<Long, List<ProcessingInfomationOperationMaterialRespVO>> materialMap = buildMaterialDetailMap(Collections.singletonList(relation.getId()));
|
||||
ProcessingInfomationOperationDetailRespVO detail = BeanUtils.toBean(relation, ProcessingInfomationOperationDetailRespVO.class);
|
||||
fillOperationInfo(relation, detail, operationMap);
|
||||
detail.setMaterials(materialMap.getOrDefault(relation.getId(), Collections.emptyList()));
|
||||
return detail;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,22 +139,7 @@ public class ProcessingInfomationOperationServiceImpl implements ProcessingInfom
|
||||
@Override
|
||||
public PageResult<ProcessingInfomationOperationRespVO> getProcessingInfomationOperationDetailPage(ProcessingInfomationOperationPageReqVO pageReqVO) {
|
||||
List<ProcessingInfomationOperationRespVO> detailList = buildDetailList(pageReqVO);
|
||||
int total = detailList.size();
|
||||
if (total == 0) {
|
||||
return new PageResult<>(Collections.emptyList(), 0L);
|
||||
}
|
||||
Integer pageSize = pageReqVO.getPageSize();
|
||||
if (pageSize != null && pageSize <= 0) {
|
||||
return new PageResult<>(detailList, (long) total);
|
||||
}
|
||||
int pageNo = pageReqVO.getPageNo() == null ? 1 : pageReqVO.getPageNo();
|
||||
int size = (pageSize == null || pageSize <= 0) ? total : pageSize;
|
||||
int fromIndex = Math.max((pageNo - 1) * size, 0);
|
||||
if (fromIndex >= total) {
|
||||
return new PageResult<>(Collections.emptyList(), (long) total);
|
||||
}
|
||||
int toIndex = Math.min(fromIndex + size, total);
|
||||
return new PageResult<>(detailList.subList(fromIndex, toIndex), (long) total);
|
||||
return paginate(detailList, pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -123,60 +147,417 @@ public class ProcessingInfomationOperationServiceImpl implements ProcessingInfom
|
||||
return buildDetailList(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ProcessingInfomationOperationOrganizationRespVO> getOrganizationOperationPage(ProcessingInfomationOperationOrganizationPageReqVO pageReqVO) {
|
||||
List<ProcessingOperationMaterialDO> materialRecords = processingOperationMaterialMapper.selectOrganizationList(pageReqVO);
|
||||
if (CollUtil.isEmpty(materialRecords)) {
|
||||
return new PageResult<>(Collections.emptyList(), 0L);
|
||||
}
|
||||
|
||||
Long deptFilter = pageReqVO.getDeptId();
|
||||
List<ProcessingOperationMaterialDO> filteredMaterials = materialRecords.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.filter(item -> {
|
||||
if (deptFilter == null) {
|
||||
return true;
|
||||
}
|
||||
List<Long> deptIds = parseDepartmentIds(item.getDepartmentIds());
|
||||
return CollUtil.isNotEmpty(deptIds) && deptIds.contains(deptFilter);
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isEmpty(filteredMaterials)) {
|
||||
return new PageResult<>(Collections.emptyList(), 0L);
|
||||
}
|
||||
|
||||
Set<Long> relationIds = filteredMaterials.stream()
|
||||
.map(ProcessingOperationMaterialDO::getProcessingOperationId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toCollection(LinkedHashSet::new));
|
||||
if (CollUtil.isEmpty(relationIds)) {
|
||||
return new PageResult<>(Collections.emptyList(), 0L);
|
||||
}
|
||||
|
||||
List<ProcessingInfomationOperationDO> relations = processingInfomationOperationMapper.selectBatchIds(relationIds);
|
||||
if (CollUtil.isEmpty(relations)) {
|
||||
return new PageResult<>(Collections.emptyList(), 0L);
|
||||
}
|
||||
|
||||
Map<Long, ProcessingInfomationOperationDO> relationMap = relations.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(ProcessingInfomationOperationDO::getId, Function.identity(), (v1, v2) -> v1, LinkedHashMap::new));
|
||||
Map<Long, ProcessingOperationDO> operationMap = loadOperationMap(relations);
|
||||
Map<Long, ProcessingInfomationDO> processingMap = loadProcessingMap(relations);
|
||||
Map<Long, List<ProcessingInfomationOperationMaterialRespVO>> materialDetailMap = buildMaterialDetailMap(relationIds);
|
||||
|
||||
List<ProcessingInfomationOperationOrganizationRespVO> dataList = new ArrayList<>();
|
||||
LocalDateTime[] createTimeRange = pageReqVO.getCreateTime();
|
||||
for (ProcessingInfomationOperationDO relation : relationMap.values()) {
|
||||
if (pageReqVO.getIsKey() != null && !Objects.equals(relation.getIsKey(), pageReqVO.getIsKey())) {
|
||||
continue;
|
||||
}
|
||||
if (pageReqVO.getProcessingId() != null && !Objects.equals(relation.getProcessingId(), pageReqVO.getProcessingId())) {
|
||||
continue;
|
||||
}
|
||||
if (createTimeRange != null && createTimeRange.length == 2 && createTimeRange[0] != null && createTimeRange[1] != null && relation.getCreateTime() != null) {
|
||||
if (relation.getCreateTime().isBefore(createTimeRange[0]) || relation.getCreateTime().isAfter(createTimeRange[1])) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
Long displayOperationId = resolveDisplayOperationId(relation);
|
||||
if (pageReqVO.getOperationId() != null && !Objects.equals(displayOperationId, pageReqVO.getOperationId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
List<ProcessingInfomationOperationMaterialRespVO> materials = materialDetailMap.getOrDefault(relation.getId(), Collections.emptyList());
|
||||
if (CollUtil.isEmpty(materials)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Map<Long, String> deptNameMap = new LinkedHashMap<>();
|
||||
for (ProcessingInfomationOperationMaterialRespVO material : materials) {
|
||||
List<Long> deptIds = material.getDepartmentIds();
|
||||
if (CollUtil.isEmpty(deptIds)) {
|
||||
continue;
|
||||
}
|
||||
for (Long deptId : deptIds) {
|
||||
if (deptId == null) {
|
||||
continue;
|
||||
}
|
||||
deptNameMap.putIfAbsent(deptId, resolveDeptName(material, deptId));
|
||||
}
|
||||
}
|
||||
if (deptNameMap.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if (deptFilter != null && !deptNameMap.containsKey(deptFilter)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Stream<Long> deptStream = deptFilter != null ? Stream.of(deptFilter) : deptNameMap.keySet().stream();
|
||||
deptStream.forEach(deptId -> {
|
||||
ProcessingInfomationOperationOrganizationRespVO resp = buildOrganizationResp(
|
||||
deptId,
|
||||
deptNameMap.get(deptId),
|
||||
relation,
|
||||
processingMap,
|
||||
operationMap,
|
||||
displayOperationId
|
||||
);
|
||||
dataList.add(resp);
|
||||
});
|
||||
}
|
||||
return paginate(dataList, pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
}
|
||||
|
||||
private String resolveDeptName(ProcessingInfomationOperationMaterialRespVO material, Long deptId) {
|
||||
if (deptId == null) {
|
||||
return null;
|
||||
}
|
||||
List<ProcessingInfomationOperationMaterialDeptRespVO> departments = material.getDepartments();
|
||||
if (CollUtil.isEmpty(departments)) {
|
||||
return null;
|
||||
}
|
||||
return departments.stream()
|
||||
.filter(item -> Objects.equals(item.getId(), deptId))
|
||||
.map(ProcessingInfomationOperationMaterialDeptRespVO::getName)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
private ProcessingInfomationOperationOrganizationRespVO buildOrganizationResp(Long deptId,
|
||||
String deptName,
|
||||
ProcessingInfomationOperationDO relation,
|
||||
Map<Long, ProcessingInfomationDO> processingMap,
|
||||
Map<Long, ProcessingOperationDO> operationMap,
|
||||
Long displayOperationId) {
|
||||
ProcessingInfomationOperationOrganizationRespVO resp = new ProcessingInfomationOperationOrganizationRespVO();
|
||||
resp.setId(relation.getId());
|
||||
resp.setDeptId(deptId);
|
||||
resp.setDeptName(deptName);
|
||||
resp.setRemark(relation.getRemark());
|
||||
resp.setCreateTime(relation.getCreateTime());
|
||||
resp.setIsKey(relation.getIsKey());
|
||||
|
||||
ProcessingInfomationDO processing = processingMap.get(relation.getProcessingId());
|
||||
if (processing != null) {
|
||||
resp.setProcessingId(processing.getId());
|
||||
resp.setProcessingCode(processing.getCode());
|
||||
resp.setProcessingName(processing.getName());
|
||||
resp.setProcessingStatus(processing.getStatusValue());
|
||||
}
|
||||
|
||||
resp.setOperationId(displayOperationId);
|
||||
ProcessingOperationDO operation = operationMap.get(displayOperationId);
|
||||
if (operation != null) {
|
||||
resp.setOperationCode(operation.getCode());
|
||||
resp.setOperationName(operation.getName());
|
||||
}
|
||||
return resp;
|
||||
}
|
||||
|
||||
private Long resolveDisplayOperationId(ProcessingInfomationOperationDO relation) {
|
||||
if (relation.getOperationId() != null) {
|
||||
return relation.getOperationId();
|
||||
}
|
||||
if (relation.getNextOperationId() != null) {
|
||||
return relation.getNextOperationId();
|
||||
}
|
||||
return relation.getPreviousOperationId();
|
||||
}
|
||||
|
||||
private List<ProcessingInfomationOperationRespVO> buildDetailList(ProcessingInfomationOperationPageReqVO pageReqVO) {
|
||||
List<ProcessingInfomationOperationDO> relations = processingInfomationOperationMapper.selectList(pageReqVO);
|
||||
if (CollUtil.isEmpty(relations)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
Set<Long> operationIds = relations.stream()
|
||||
.flatMap(item -> Stream.of(item.getPreviousOperationId(), item.getNextOperationId()))
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
Map<Long, ProcessingOperationDO> operationMap;
|
||||
if (operationIds.isEmpty()) {
|
||||
operationMap = Collections.emptyMap();
|
||||
} else {
|
||||
List<ProcessingOperationDO> operations = processingOperationMapper.selectBatchIds(operationIds);
|
||||
if (CollUtil.isEmpty(operations)) {
|
||||
operationMap = Collections.emptyMap();
|
||||
} else {
|
||||
operationMap = operations.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(ProcessingOperationDO::getId, Function.identity(), (v1, v2) -> v1));
|
||||
}
|
||||
}
|
||||
Map<Long, ProcessingOperationDO> operationMap = loadOperationMap(relations);
|
||||
List<ProcessingInfomationOperationRespVO> detailList = relations.stream()
|
||||
.map(item -> convertToResp(item, operationMap))
|
||||
.map(item -> {
|
||||
ProcessingInfomationOperationRespVO resp = BeanUtils.toBean(item, ProcessingInfomationOperationRespVO.class);
|
||||
fillOperationInfo(item, resp, operationMap);
|
||||
return resp;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
String nextCode = pageReqVO.getNextOperationCode();
|
||||
if (StrUtil.isNotBlank(nextCode)) {
|
||||
detailList = detailList.stream()
|
||||
.filter(item -> StrUtil.containsIgnoreCase(item.getNextOperationCode(), nextCode))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
String nextName = pageReqVO.getNextOperationName();
|
||||
if (StrUtil.isNotBlank(nextName)) {
|
||||
detailList = detailList.stream()
|
||||
.filter(item -> StrUtil.containsIgnoreCase(item.getNextOperationName(), nextName))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
applyOperationFilters(detailList, pageReqVO);
|
||||
return detailList;
|
||||
}
|
||||
|
||||
private ProcessingInfomationOperationRespVO convertToResp(ProcessingInfomationOperationDO relation,
|
||||
Map<Long, ProcessingOperationDO> operationMap) {
|
||||
ProcessingInfomationOperationRespVO resp = BeanUtils.toBean(relation, ProcessingInfomationOperationRespVO.class);
|
||||
private void applyOperationFilters(List<ProcessingInfomationOperationRespVO> list, ProcessingInfomationOperationPageReqVO pageReqVO) {
|
||||
if (StrUtil.isNotBlank(pageReqVO.getNextOperationCode())) {
|
||||
list.removeIf(item -> !StrUtil.containsIgnoreCase(StrUtil.blankToDefault(item.getNextOperationCode(), ""), pageReqVO.getNextOperationCode()));
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageReqVO.getNextOperationName())) {
|
||||
list.removeIf(item -> !StrUtil.containsIgnoreCase(StrUtil.blankToDefault(item.getNextOperationName(), ""), pageReqVO.getNextOperationName()));
|
||||
}
|
||||
}
|
||||
|
||||
private Map<Long, ProcessingOperationDO> loadOperationMap(Collection<ProcessingInfomationOperationDO> relations) {
|
||||
if (CollUtil.isEmpty(relations)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
Set<Long> operationIds = relations.stream()
|
||||
.flatMap(item -> Stream.of(item.getOperationId(), item.getPreviousOperationId(), item.getNextOperationId()))
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
if (CollUtil.isEmpty(operationIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
List<ProcessingOperationDO> operations = processingOperationMapper.selectBatchIds(operationIds);
|
||||
if (CollUtil.isEmpty(operations)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return operations.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(ProcessingOperationDO::getId, Function.identity(), (v1, v2) -> v1));
|
||||
}
|
||||
|
||||
private Map<Long, ProcessingInfomationDO> loadProcessingMap(Collection<ProcessingInfomationOperationDO> relations) {
|
||||
Set<Long> processingIds = relations.stream()
|
||||
.map(ProcessingInfomationOperationDO::getProcessingId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
if (CollUtil.isEmpty(processingIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
List<ProcessingInfomationDO> list = processingInfomationMapper.selectBatchIds(processingIds);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return list.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(ProcessingInfomationDO::getId, Function.identity(), (v1, v2) -> v1));
|
||||
}
|
||||
|
||||
private void fillOperationInfo(ProcessingInfomationOperationDO relation,
|
||||
ProcessingInfomationOperationRespVO target,
|
||||
Map<Long, ProcessingOperationDO> operationMap) {
|
||||
ProcessingOperationDO current = operationMap.get(relation.getOperationId());
|
||||
String operationType = null;
|
||||
if (current != null) {
|
||||
target.setOperationCode(current.getCode());
|
||||
target.setOperationName(current.getName());
|
||||
operationType = normalizeOperationTypeValue(current.getTypeValue());
|
||||
}
|
||||
ProcessingOperationDO previous = operationMap.get(relation.getPreviousOperationId());
|
||||
if (previous != null) {
|
||||
resp.setPreviousOperationCode(previous.getCode());
|
||||
resp.setPreviousOperationName(previous.getName());
|
||||
target.setPreviousOperationCode(previous.getCode());
|
||||
target.setPreviousOperationName(previous.getName());
|
||||
if (operationType == null) {
|
||||
operationType = normalizeOperationTypeValue(previous.getTypeValue());
|
||||
}
|
||||
}
|
||||
ProcessingOperationDO next = operationMap.get(relation.getNextOperationId());
|
||||
if (next != null) {
|
||||
resp.setNextOperationCode(next.getCode());
|
||||
resp.setNextOperationName(next.getName());
|
||||
target.setNextOperationCode(next.getCode());
|
||||
target.setNextOperationName(next.getName());
|
||||
if (operationType == null) {
|
||||
operationType = normalizeOperationTypeValue(next.getTypeValue());
|
||||
}
|
||||
}
|
||||
target.setOperationTypeValue(operationType);
|
||||
}
|
||||
|
||||
private String normalizeOperationTypeValue(String typeValue) {
|
||||
if (StrUtil.isBlank(typeValue)) {
|
||||
return null;
|
||||
}
|
||||
return StrUtil.trim(typeValue);
|
||||
}
|
||||
|
||||
private void saveOperationMaterials(Long relationId, List<ProcessingInfomationOperationMaterialSaveReqVO> materials) {
|
||||
processingOperationMaterialMapper.deleteByProcessingOperationId(relationId);
|
||||
if (CollUtil.isEmpty(materials)) {
|
||||
return;
|
||||
}
|
||||
List<ProcessingOperationMaterialDO> entities = new ArrayList<>();
|
||||
for (ProcessingInfomationOperationMaterialSaveReqVO item : materials) {
|
||||
if (item == null || item.getMaterialId() == null) {
|
||||
continue;
|
||||
}
|
||||
ProcessingOperationMaterialDO entity = new ProcessingOperationMaterialDO();
|
||||
entity.setProcessingOperationId(relationId);
|
||||
entity.setMaterialId(item.getMaterialId());
|
||||
entity.setTypeValue(item.getTypeValue());
|
||||
entity.setRemark(item.getRemark());
|
||||
entity.setDepartmentIds(formatDepartmentIds(item.getDepartmentIds()));
|
||||
entities.add(entity);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(entities)) {
|
||||
processingOperationMaterialMapper.insertBatch(entities);
|
||||
}
|
||||
}
|
||||
|
||||
private Map<Long, List<ProcessingInfomationOperationMaterialRespVO>> buildMaterialDetailMap(Collection<Long> relationIds) {
|
||||
if (CollUtil.isEmpty(relationIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
List<ProcessingOperationMaterialDO> materialList = processingOperationMaterialMapper.selectListByProcessingOperationIds(relationIds);
|
||||
if (CollUtil.isEmpty(materialList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
Set<Long> materialIds = materialList.stream()
|
||||
.map(ProcessingOperationMaterialDO::getMaterialId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
Map<Long, MaterialInfomationDO> materialMap = Collections.emptyMap();
|
||||
if (CollUtil.isNotEmpty(materialIds)) {
|
||||
List<MaterialInfomationDO> materials = materialInfomationMapper.selectBatchIds(materialIds);
|
||||
if (CollUtil.isNotEmpty(materials)) {
|
||||
materialMap = materials.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(MaterialInfomationDO::getId, Function.identity(), (v1, v2) -> v1));
|
||||
}
|
||||
}
|
||||
Set<Long> deptIds = materialList.stream()
|
||||
.flatMap(item -> parseDepartmentIds(item.getDepartmentIds()).stream())
|
||||
.collect(Collectors.toSet());
|
||||
Map<Long, DeptRespDTO> deptMap = loadDeptMap(deptIds);
|
||||
|
||||
Map<Long, List<ProcessingInfomationOperationMaterialRespVO>> result = new LinkedHashMap<>();
|
||||
for (ProcessingOperationMaterialDO item : materialList) {
|
||||
ProcessingInfomationOperationMaterialRespVO resp = buildMaterialResp(item, materialMap, deptMap);
|
||||
result.computeIfAbsent(item.getProcessingOperationId(), key -> new ArrayList<>()).add(resp);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Map<Long, DeptRespDTO> loadDeptMap(Set<Long> deptIds) {
|
||||
if (CollUtil.isEmpty(deptIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
try {
|
||||
List<DeptRespDTO> deptList = deptApi.getDeptList(deptIds).getCheckedData();
|
||||
if (CollUtil.isEmpty(deptList)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return deptList.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(DeptRespDTO::getId, Function.identity(), (v1, v2) -> v1));
|
||||
} catch (Exception ex) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
}
|
||||
|
||||
private ProcessingInfomationOperationMaterialRespVO buildMaterialResp(ProcessingOperationMaterialDO materialDO,
|
||||
Map<Long, MaterialInfomationDO> materialMap,
|
||||
Map<Long, DeptRespDTO> deptMap) {
|
||||
ProcessingInfomationOperationMaterialRespVO resp = new ProcessingInfomationOperationMaterialRespVO();
|
||||
resp.setId(materialDO.getId());
|
||||
resp.setProcessingOperationId(materialDO.getProcessingOperationId());
|
||||
resp.setMaterialId(materialDO.getMaterialId());
|
||||
resp.setTypeValue(materialDO.getTypeValue());
|
||||
resp.setRemark(materialDO.getRemark());
|
||||
resp.setCreateTime(materialDO.getCreateTime());
|
||||
|
||||
MaterialInfomationDO material = materialMap.get(materialDO.getMaterialId());
|
||||
if (material != null) {
|
||||
resp.setMaterialCode(material.getCode());
|
||||
resp.setMaterialName(material.getName());
|
||||
}
|
||||
List<Long> deptIds = parseDepartmentIds(materialDO.getDepartmentIds());
|
||||
resp.setDepartmentIds(new ArrayList<>(deptIds));
|
||||
if (CollUtil.isNotEmpty(deptIds)) {
|
||||
List<ProcessingInfomationOperationMaterialDeptRespVO> deptInfos = deptIds.stream()
|
||||
.map(id -> {
|
||||
ProcessingInfomationOperationMaterialDeptRespVO deptResp = new ProcessingInfomationOperationMaterialDeptRespVO();
|
||||
deptResp.setId(id);
|
||||
DeptRespDTO dept = deptMap.get(id);
|
||||
if (dept != null) {
|
||||
deptResp.setName(dept.getName());
|
||||
}
|
||||
return deptResp;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
resp.setDepartments(deptInfos);
|
||||
} else {
|
||||
resp.setDepartments(Collections.emptyList());
|
||||
}
|
||||
return resp;
|
||||
}
|
||||
|
||||
private List<Long> parseDepartmentIds(String raw) {
|
||||
if (StrUtil.isBlank(raw)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return Arrays.stream(raw.split(","))
|
||||
.map(String::trim)
|
||||
.filter(StrUtil::isNotEmpty)
|
||||
.map(id -> {
|
||||
try {
|
||||
return Long.parseLong(id);
|
||||
} catch (NumberFormatException ex) {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private String formatDepartmentIds(List<Long> deptIds) {
|
||||
if (CollUtil.isEmpty(deptIds)) {
|
||||
return null;
|
||||
}
|
||||
List<Long> normalized = deptIds.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isEmpty(normalized)) {
|
||||
return null;
|
||||
}
|
||||
return CollUtil.join(normalized, ",");
|
||||
}
|
||||
|
||||
private <T> PageResult<T> paginate(List<T> list, Integer pageNo, Integer pageSize) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return new PageResult<>(Collections.emptyList(), 0L);
|
||||
}
|
||||
int current = pageNo == null || pageNo <= 0 ? 1 : pageNo;
|
||||
int size = pageSize == null || pageSize <= 0 ? list.size() : pageSize;
|
||||
int fromIndex = Math.min((current - 1) * size, list.size());
|
||||
int toIndex = Math.min(fromIndex + size, list.size());
|
||||
List<T> pageList = list.subList(fromIndex, toIndex);
|
||||
return new PageResult<>(pageList, (long) list.size());
|
||||
}
|
||||
}
|
||||
@@ -66,4 +66,12 @@ public interface ProcessingOperationService {
|
||||
*/
|
||||
List<ProcessingOperationDO> getProcessingOperationList();
|
||||
|
||||
/**
|
||||
* 按类型获得工序列表
|
||||
*
|
||||
* @param typeValue 工序类型值,可为空
|
||||
* @return 工序列表
|
||||
*/
|
||||
List<ProcessingOperationDO> getProcessingOperationListByType(String typeValue);
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.zt.plat.module.base.service.processingoperation;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -91,7 +92,13 @@ public class ProcessingOperationServiceImpl implements ProcessingOperationServic
|
||||
|
||||
@Override
|
||||
public List<ProcessingOperationDO> getProcessingOperationList() {
|
||||
return processingOperationMapper.selectList();
|
||||
return processingOperationMapper.selectSimpleList(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessingOperationDO> getProcessingOperationListByType(String typeValue) {
|
||||
String normalized = StrUtil.isBlank(typeValue) ? null : StrUtil.trim(typeValue);
|
||||
return processingOperationMapper.selectSimpleList(normalized);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user