11 changed files with 453 additions and 0 deletions
-
39src/main/java/com/spring/modules/part/controller/RoutingOperationsController.java
-
11src/main/java/com/spring/modules/part/dto/RoutingOperationsBatchSaveDto.java
-
10src/main/java/com/spring/modules/part/dto/RoutingOperationsDescQueryDto.java
-
19src/main/java/com/spring/modules/part/dto/RoutingOperationsQueryDto.java
-
23src/main/java/com/spring/modules/part/mapper/RoutingOperationsMapper.java
-
2src/main/java/com/spring/modules/part/service/RoutingManagementService.java
-
12src/main/java/com/spring/modules/part/service/RoutingOperationsService.java
-
51src/main/java/com/spring/modules/part/service/impl/RoutingManagementServiceImpl.java
-
140src/main/java/com/spring/modules/part/service/impl/RoutingOperationsServiceImpl.java
-
46src/main/java/com/spring/modules/part/vo/RoutingOperationsVo.java
-
100src/main/resources/mapper/part/RoutingOperationsMapper.xml
@ -0,0 +1,39 @@ |
|||||
|
package com.spring.modules.part.controller; |
||||
|
|
||||
|
import com.spring.common.utils.PageUtils; |
||||
|
import com.spring.common.utils.R; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsBatchSaveDto; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsQueryDto; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsDescQueryDto; |
||||
|
import com.spring.modules.part.service.RoutingOperationsService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/plm/routingOperations") |
||||
|
public class RoutingOperationsController { |
||||
|
|
||||
|
@Autowired |
||||
|
private RoutingOperationsService routingOperationsService; |
||||
|
|
||||
|
@PostMapping("/search") |
||||
|
public R search(@RequestBody RoutingOperationsQueryDto query) { |
||||
|
PageUtils page = routingOperationsService.routingOperationsSearch(query); |
||||
|
return R.ok().put("page", page); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/batchSave") |
||||
|
public R batchSave(@RequestBody RoutingOperationsBatchSaveDto dto) { |
||||
|
routingOperationsService.batchSave(dto); |
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/getDesc") |
||||
|
public R getDesc(@RequestBody RoutingOperationsDescQueryDto dto) { |
||||
|
String desc = routingOperationsService.getDesc(dto); |
||||
|
return R.ok().put("desc", desc); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
package com.spring.modules.part.dto; |
||||
|
|
||||
|
import com.spring.modules.part.entity.RoutingComponentEntity; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
@Data |
||||
|
public class RoutingOperationsBatchSaveDto { |
||||
|
private List<RoutingComponentEntity> items; |
||||
|
} |
||||
@ -0,0 +1,10 @@ |
|||||
|
package com.spring.modules.part.dto; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class RoutingOperationsDescQueryDto { |
||||
|
private String site; |
||||
|
private String type; // workCenter or laborClass |
||||
|
private String code; |
||||
|
} |
||||
@ -0,0 +1,19 @@ |
|||||
|
package com.spring.modules.part.dto; |
||||
|
|
||||
|
import com.spring.common.utils.QueryPage; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = true) |
||||
|
public class RoutingOperationsQueryDto extends QueryPage { |
||||
|
private String site; |
||||
|
private String partNo; |
||||
|
private String partDesc; |
||||
|
private String routingType; |
||||
|
private Integer routingRevision; |
||||
|
private String alternativeNo; |
||||
|
private Integer operationNo; |
||||
|
private String operationName; |
||||
|
private String workCenterNo; |
||||
|
} |
||||
@ -0,0 +1,23 @@ |
|||||
|
package com.spring.modules.part.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsQueryDto; |
||||
|
import com.spring.modules.part.entity.RoutingComponentEntity; |
||||
|
import com.spring.modules.part.vo.RoutingOperationsVo; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface RoutingOperationsMapper extends BaseMapper<RoutingComponentEntity> { |
||||
|
IPage<RoutingOperationsVo> routingOperationsSearch(Page<RoutingOperationsVo> page, @Param("query") RoutingOperationsQueryDto query); |
||||
|
|
||||
|
int countWorkCenter(@Param("site") String site, @Param("workCenterNo") String workCenterNo); |
||||
|
|
||||
|
int countLaborClass(@Param("site") String site, @Param("laborClassNo") String laborClassNo); |
||||
|
|
||||
|
String getWorkCenterDesc(@Param("site") String site, @Param("workCenterNo") String workCenterNo); |
||||
|
|
||||
|
String getLaborClassDesc(@Param("site") String site, @Param("laborClassNo") String laborClassNo); |
||||
|
} |
||||
@ -0,0 +1,12 @@ |
|||||
|
package com.spring.modules.part.service; |
||||
|
|
||||
|
import com.spring.common.utils.PageUtils; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsBatchSaveDto; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsQueryDto; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsDescQueryDto; |
||||
|
|
||||
|
public interface RoutingOperationsService { |
||||
|
PageUtils routingOperationsSearch(RoutingOperationsQueryDto query); |
||||
|
void batchSave(RoutingOperationsBatchSaveDto dto); |
||||
|
String getDesc(RoutingOperationsDescQueryDto dto); |
||||
|
} |
||||
@ -0,0 +1,140 @@ |
|||||
|
package com.spring.modules.part.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.spring.common.utils.PageUtils; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsBatchSaveDto; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsQueryDto; |
||||
|
import com.spring.modules.part.dto.RoutingOperationsDescQueryDto; |
||||
|
import com.spring.modules.part.entity.RoutingComponentEntity; |
||||
|
import com.spring.modules.part.mapper.RoutingOperationsMapper; |
||||
|
import com.spring.modules.part.service.RoutingManagementService; |
||||
|
import com.spring.modules.part.service.RoutingOperationsService; |
||||
|
import com.spring.modules.part.vo.RoutingOperationsVo; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.util.CollectionUtils; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.Arrays; |
||||
|
|
||||
|
@Service |
||||
|
public class RoutingOperationsServiceImpl implements RoutingOperationsService { |
||||
|
|
||||
|
@Autowired |
||||
|
private RoutingOperationsMapper routingOperationsMapper; |
||||
|
|
||||
|
@Autowired |
||||
|
private RoutingManagementService routingManagementService; |
||||
|
|
||||
|
@Override |
||||
|
public PageUtils routingOperationsSearch(RoutingOperationsQueryDto query) { |
||||
|
if (query == null || StringUtils.isBlank(query.getSite())) { |
||||
|
throw new RuntimeException("工厂(site)不能为空"); |
||||
|
} |
||||
|
if (StringUtils.isAllBlank(query.getPartNo(), query.getPartDesc(), query.getRoutingType(), |
||||
|
query.getAlternativeNo(), query.getOperationName(), query.getWorkCenterNo()) |
||||
|
&& query.getRoutingRevision() == null && query.getOperationNo() == null) { |
||||
|
throw new RuntimeException("请至少填写一项查询条件"); |
||||
|
} |
||||
|
if (StringUtils.isNotBlank(query.getPartNo())) { |
||||
|
query.setPartNo(query.getPartNo().trim()); |
||||
|
} |
||||
|
if (StringUtils.isNotBlank(query.getPartDesc())) { |
||||
|
query.setPartDesc(query.getPartDesc().trim()); |
||||
|
} |
||||
|
IPage<RoutingOperationsVo> page = routingOperationsMapper.routingOperationsSearch( |
||||
|
new Page<>(query.getPage(), query.getLimit()), query); |
||||
|
return new PageUtils(page); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public void batchSave(RoutingOperationsBatchSaveDto dto) { |
||||
|
if (dto == null || CollectionUtils.isEmpty(dto.getItems())) { |
||||
|
throw new RuntimeException("没有需要保存的数据"); |
||||
|
} |
||||
|
List<RoutingComponentEntity> items = dto.getItems(); |
||||
|
|
||||
|
Map<String, Boolean> workCenterCache = new HashMap<>(); |
||||
|
Map<String, Boolean> laborClassCache = new HashMap<>(); |
||||
|
List<String> validRunTimeCodes = Arrays.asList("Units/Hour", "Hours/Unit", "Hours"); |
||||
|
|
||||
|
for (RoutingComponentEntity item : items) { |
||||
|
if (StringUtils.isAnyBlank(item.getSite(), item.getPartNo(), item.getRoutingType()) |
||||
|
|| item.getRoutingRevision() == null |
||||
|
|| item.getOperationId() == null) { |
||||
|
throw new RuntimeException("保存数据不完整:工厂、物料编码、工艺类型、版本号、工序ID不能为空"); |
||||
|
} |
||||
|
if (item.getAlternativeNo() == null) { |
||||
|
item.setAlternativeNo(""); |
||||
|
} |
||||
|
if (StringUtils.isBlank(item.getUpdateBy())) { |
||||
|
throw new RuntimeException("更新人不能为空"); |
||||
|
} |
||||
|
|
||||
|
// 校验加工中心编码 |
||||
|
if (StringUtils.isNotBlank(item.getWorkCenterNo())) { |
||||
|
String wcKey = item.getSite() + ":" + item.getWorkCenterNo(); |
||||
|
if (!workCenterCache.containsKey(wcKey)) { |
||||
|
int count = routingOperationsMapper.countWorkCenter(item.getSite(), item.getWorkCenterNo()); |
||||
|
workCenterCache.put(wcKey, count > 0); |
||||
|
} |
||||
|
if (!workCenterCache.get(wcKey)) { |
||||
|
throw new RuntimeException("加工中心编码不合法:" + item.getWorkCenterNo()); |
||||
|
} |
||||
|
} else { |
||||
|
throw new RuntimeException("加工中心编码不能为空"); |
||||
|
} |
||||
|
|
||||
|
// 校验调机过程中人员等级 |
||||
|
if (StringUtils.isNotBlank(item.getSetupLaborClassNo())) { |
||||
|
String lcKey = item.getSite() + ":" + item.getSetupLaborClassNo(); |
||||
|
if (!laborClassCache.containsKey(lcKey)) { |
||||
|
int count = routingOperationsMapper.countLaborClass(item.getSite(), item.getSetupLaborClassNo()); |
||||
|
laborClassCache.put(lcKey, count > 0); |
||||
|
} |
||||
|
if (!laborClassCache.get(lcKey)) { |
||||
|
throw new RuntimeException("调机过程中人员等级不合法:" + item.getSetupLaborClassNo()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 校验人员等级 |
||||
|
if (StringUtils.isNotBlank(item.getLaborClassNo())) { |
||||
|
String lcKey = item.getSite() + ":" + item.getLaborClassNo(); |
||||
|
if (!laborClassCache.containsKey(lcKey)) { |
||||
|
int count = routingOperationsMapper.countLaborClass(item.getSite(), item.getLaborClassNo()); |
||||
|
laborClassCache.put(lcKey, count > 0); |
||||
|
} |
||||
|
if (!laborClassCache.get(lcKey)) { |
||||
|
throw new RuntimeException("人员等级不合法:" + item.getLaborClassNo()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 校验产出单位 |
||||
|
if (StringUtils.isNotBlank(item.getRunTimeCode())) { |
||||
|
if (!validRunTimeCodes.contains(item.getRunTimeCode())) { |
||||
|
throw new RuntimeException("产出单位不合法,只能是 Units/Hour、Hours/Unit、Hours 之一"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
routingManagementService.batchUpdateRoutingComponent(items); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String getDesc(RoutingOperationsDescQueryDto dto) { |
||||
|
if (dto == null || StringUtils.isAnyBlank(dto.getSite(), dto.getType(), dto.getCode())) { |
||||
|
return ""; |
||||
|
} |
||||
|
if ("workCenter".equals(dto.getType())) { |
||||
|
return routingOperationsMapper.getWorkCenterDesc(dto.getSite(), dto.getCode()); |
||||
|
} else if ("laborClass".equals(dto.getType())) { |
||||
|
return routingOperationsMapper.getLaborClassDesc(dto.getSite(), dto.getCode()); |
||||
|
} |
||||
|
return ""; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,46 @@ |
|||||
|
package com.spring.modules.part.vo; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class RoutingOperationsVo { |
||||
|
private String site; |
||||
|
private String partNo; |
||||
|
private String partDesc; |
||||
|
private String routingType; |
||||
|
private Integer routingRevision; |
||||
|
private String alternativeNo; |
||||
|
private String status; |
||||
|
|
||||
|
private Integer operationId; |
||||
|
private Integer operationNo; |
||||
|
private String operationName; |
||||
|
|
||||
|
private String workCenterNo; |
||||
|
private String workCenterDesc; |
||||
|
private BigDecimal machSetupTime; |
||||
|
private BigDecimal machRunFactor; |
||||
|
private String setupLaborClassNo; |
||||
|
private String setupLaborClassDesc; |
||||
|
private BigDecimal laborSetupTime; |
||||
|
private BigDecimal setupCrewSize; |
||||
|
private String laborClassNo; |
||||
|
private String laborClassDesc; |
||||
|
private BigDecimal laborRunFactor; |
||||
|
private String runTimeCode; |
||||
|
private BigDecimal crewSize; |
||||
|
|
||||
|
private Date phaseInDate; |
||||
|
private Date phaseOutDate; |
||||
|
private BigDecimal overlap; |
||||
|
private BigDecimal efficiencyFactor; |
||||
|
private String outsideOpItem; |
||||
|
private Date createDate; |
||||
|
private String machineNo; |
||||
|
private String noteText; |
||||
|
private String ifsRowId; |
||||
|
private String ifsRowVersion; |
||||
|
} |
||||
@ -0,0 +1,100 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="com.spring.modules.part.mapper.RoutingOperationsMapper"> |
||||
|
|
||||
|
<select id="routingOperationsSearch" |
||||
|
parameterType="com.spring.modules.part.dto.RoutingOperationsQueryDto" |
||||
|
resultType="com.spring.modules.part.vo.RoutingOperationsVo"> |
||||
|
SELECT |
||||
|
prc.site, |
||||
|
prc.PART_NO AS partNo, |
||||
|
p.part_desc AS partDesc, |
||||
|
prc.routing_type AS routingType, |
||||
|
prc.routing_revision AS routingRevision, |
||||
|
prc.alternative_no AS alternativeNo, |
||||
|
prd.status, |
||||
|
prc.operation_id AS operationId, |
||||
|
prc.operation_no AS operationNo, |
||||
|
prc.operation_name AS operationName, |
||||
|
prc.work_center_no AS workCenterNo, |
||||
|
wc.work_center_desc AS workCenterDesc, |
||||
|
prc.mach_setup_time AS machSetupTime, |
||||
|
prc.mach_run_factor AS machRunFactor, |
||||
|
prc.setup_labor_class_no AS setupLaborClassNo, |
||||
|
dbo.get_labor_class_desc(prc.site, prc.setup_labor_class_no) AS setupLaborClassDesc, |
||||
|
prc.labor_setup_time AS laborSetupTime, |
||||
|
prc.setup_crew_size AS setupCrewSize, |
||||
|
prc.labor_class_no AS laborClassNo, |
||||
|
dbo.get_labor_class_desc(prc.site, prc.labor_class_no) AS laborClassDesc, |
||||
|
prc.labor_run_factor AS laborRunFactor, |
||||
|
prc.run_time_code AS runTimeCode, |
||||
|
prc.crew_size AS crewSize, |
||||
|
prh.phase_in_date AS phaseInDate, |
||||
|
prh.phase_out_date AS phaseOutDate, |
||||
|
prc.overlap, |
||||
|
prc.efficiency_factor AS efficiencyFactor, |
||||
|
prc.outside_op_item AS outsideOpItem, |
||||
|
prc.create_date AS createDate, |
||||
|
prc.machine_no AS machineNo, |
||||
|
prc.note_text AS noteText, |
||||
|
prc.ifs_row_id AS ifsRowId, |
||||
|
prc.ifs_row_version AS ifsRowVersion |
||||
|
FROM plm_routing_component AS prc |
||||
|
LEFT JOIN part AS p ON prc.site = p.site AND prc.part_no = p.part_no |
||||
|
LEFT JOIN plm_routing_detail AS prd ON prd.site = prc.site AND prd.part_no = prc.part_no |
||||
|
AND prd.routing_type = prc.routing_type AND prd.routing_revision = prc.routing_revision AND prd.alternative_no = prc.alternative_no |
||||
|
LEFT JOIN plm_routing_header AS prh ON prh.site = prc.site AND prh.part_no = prc.part_no |
||||
|
AND prh.routing_type = prc.routing_type AND prh.routing_revision = prc.routing_revision |
||||
|
LEFT JOIN work_center AS wc ON prc.site = wc.site AND prc.work_center_no = wc.work_center_no |
||||
|
<where> |
||||
|
prc.site = #{query.site} |
||||
|
<if test="query.partNo != null and query.partNo != ''"> |
||||
|
AND prc.part_no = #{query.partNo} |
||||
|
</if> |
||||
|
<if test="query.partDesc != null and query.partDesc != ''"> |
||||
|
AND p.part_desc LIKE #{query.partDesc} |
||||
|
</if> |
||||
|
<if test="query.routingType != null and query.routingType != ''"> |
||||
|
AND prc.routing_type = #{query.routingType} |
||||
|
</if> |
||||
|
<if test="query.routingRevision != null"> |
||||
|
AND prc.routing_revision = #{query.routingRevision} |
||||
|
</if> |
||||
|
<if test="query.alternativeNo != null and query.alternativeNo != ''"> |
||||
|
AND prc.alternative_no = #{query.alternativeNo} |
||||
|
</if> |
||||
|
<if test="query.operationNo != null"> |
||||
|
AND prc.operation_no = #{query.operationNo} |
||||
|
</if> |
||||
|
<if test="query.operationName != null and query.operationName != ''"> |
||||
|
AND prc.operation_name LIKE #{query.operationName} |
||||
|
</if> |
||||
|
<if test="query.workCenterNo != null and query.workCenterNo != ''"> |
||||
|
AND prc.work_center_no = #{query.workCenterNo} |
||||
|
</if> |
||||
|
</where> |
||||
|
ORDER BY |
||||
|
prc.part_no, |
||||
|
prc.site, |
||||
|
prc.routing_revision, |
||||
|
prc.routing_type, |
||||
|
prc.alternative_no, |
||||
|
prc.operation_no |
||||
|
</select> |
||||
|
|
||||
|
<select id="countWorkCenter" resultType="int"> |
||||
|
SELECT COUNT(1) FROM work_center WHERE site = #{site} AND work_center_no = #{workCenterNo} |
||||
|
</select> |
||||
|
|
||||
|
<select id="countLaborClass" resultType="int"> |
||||
|
SELECT COUNT(1) FROM labor_class WHERE site = #{site} AND level_id = #{laborClassNo} |
||||
|
</select> |
||||
|
|
||||
|
<select id="getWorkCenterDesc" resultType="java.lang.String"> |
||||
|
SELECT dbo.get_workCenter_desc(#{site}, #{workCenterNo}) |
||||
|
</select> |
||||
|
|
||||
|
<select id="getLaborClassDesc" resultType="java.lang.String"> |
||||
|
SELECT dbo.get_labor_class_desc(#{site}, #{laborClassNo}) |
||||
|
</select> |
||||
|
</mapper> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue