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