diff --git a/op-modules/op-mes/src/main/java/com/op/mes/controller/ProProcessContentController.java b/op-modules/op-mes/src/main/java/com/op/mes/controller/ProProcessContentController.java index 5a9c6785f..4bc8d41b8 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/controller/ProProcessContentController.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/controller/ProProcessContentController.java @@ -40,7 +40,7 @@ public class ProProcessContentController extends BaseController /** * 查询生产工序内容列表 */ - @RequiresPermissions("mes:pro:processcontent:list") + //@RequiresPermissions("mes:pro:processcontent:list") @GetMapping("/list") public TableDataInfo list(ProProcessContent proProcessContent) { @@ -52,7 +52,7 @@ public class ProProcessContentController extends BaseController /** * 导出生产工序内容列表 */ - @RequiresPermissions("mes:pro:processcontent:export") + //@RequiresPermissions("mes:pro:processcontent:export") @Log(title = "生产工序内容", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ProProcessContent proProcessContent) @@ -65,7 +65,7 @@ public class ProProcessContentController extends BaseController /** * 获取生产工序内容详细信息 */ - @RequiresPermissions("mes:pro:processcontent:query") + //@RequiresPermissions("mes:pro:processcontent:query") @GetMapping(value = "/{contentId}") public AjaxResult getInfo(@PathVariable("contentId") String contentId) { @@ -75,7 +75,7 @@ public class ProProcessContentController extends BaseController /** * 新增生产工序内容 */ - @RequiresPermissions("mes:pro:processcontent:add") + //@RequiresPermissions("mes:pro:processcontent:add") @Log(title = "生产工序内容", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ProProcessContent proProcessContent) @@ -86,7 +86,7 @@ public class ProProcessContentController extends BaseController /** * 修改生产工序内容 */ - @RequiresPermissions("mes:pro:processcontent:edit") + //@RequiresPermissions("mes:pro:processcontent:edit") @Log(title = "生产工序内容", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ProProcessContent proProcessContent) @@ -97,7 +97,7 @@ public class ProProcessContentController extends BaseController /** * 删除生产工序内容 */ - @RequiresPermissions("mes:pro:processcontent:remove") + //@RequiresPermissions("mes:pro:processcontent:remove") @Log(title = "生产工序内容", businessType = BusinessType.DELETE) @DeleteMapping("/{contentIds}") public AjaxResult remove(@PathVariable String[] contentIds) diff --git a/op-modules/op-mes/src/main/java/com/op/mes/controller/ProRouteController.java b/op-modules/op-mes/src/main/java/com/op/mes/controller/ProRouteController.java new file mode 100644 index 000000000..7b1c4a246 --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/controller/ProRouteController.java @@ -0,0 +1,127 @@ +package com.op.mes.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.op.common.core.utils.poi.ExcelUtil; +import com.op.common.core.utils.uuid.IdUtils; +import com.op.common.core.web.domain.AjaxResult; +import com.op.common.core.web.page.TableDataInfo; +import com.op.common.core.web.controller.BaseController; +import com.op.common.log.annotation.Log; +import com.op.common.log.enums.BusinessType; +import com.op.common.security.annotation.RequiresPermissions; +import com.op.mes.domain.ProRoute; +import com.op.mes.service.IProRouteProcessService; +import com.op.mes.service.IProRouteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 工艺路线Controller + * + * @author yinjinlu + * @date 2022-05-12 + */ +@RestController +@RequestMapping("/pro/proroute") +public class ProRouteController extends BaseController +{ + @Autowired + private IProRouteService proRouteService; + + @Autowired + private IProRouteProcessService proRouteProcessService; + + + /** + * 查询工艺路线列表 + */ + @RequiresPermissions("mes:pro:process:add") + @GetMapping("/list") + public TableDataInfo list(ProRoute proRoute) + { + startPage(); + List list = proRouteService.selectProRouteList(proRoute); + return getDataTable(list); + } + + /** + * 导出工艺路线列表 + */ + @RequiresPermissions("mes:pro:proroute:export") + @Log(title = "工艺路线", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ProRoute proRoute) + { + List list = proRouteService.selectProRouteList(proRoute); + ExcelUtil util = new ExcelUtil(ProRoute.class); + util.exportExcel(response, list, "工艺路线数据"); + } + + /** + * 获取工艺路线详细信息 + */ + @RequiresPermissions("mes:pro:proroute:query") + @GetMapping(value = "/{routeId}") + public AjaxResult getInfo(@PathVariable("routeId") String routeId) + { + return AjaxResult.success(proRouteService.selectProRouteByRouteId(routeId)); + } + + /** + * 新增工艺路线 + */ + @RequiresPermissions("mes:pro:proroute:add") + @Log(title = "工艺路线", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ProRoute proRoute) + { + proRoute.setRouteId(IdUtils.fastSimpleUUID()); + if(!proRouteService.checkRouteCodeUnique(proRoute)){ + return AjaxResult.error("工艺路线编号已存在!"); + } + return toAjax(proRouteService.insertProRoute(proRoute)); + } + + /** + * 修改工艺路线 + */ + @RequiresPermissions("mes:pro:proroute:edit") + @Log(title = "工艺路线", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ProRoute proRoute) + { + if(!proRouteService.checkRouteCodeUnique(proRoute)){ + return AjaxResult.error("工艺路线编号已存在!"); + } + return toAjax(proRouteService.updateProRoute(proRoute)); + } + + /** + * 删除工艺路线 + */ + @RequiresPermissions("mes:pro:proroute:remove") + @Log(title = "工艺路线", businessType = BusinessType.DELETE) + @Transactional + @DeleteMapping("/{routeIds}") + public AjaxResult remove(@PathVariable String[] routeIds) + { + for (String routeId:routeIds + ) { + proRouteProcessService.deleteByRouteId(routeId); + //proRouteProductService.deleteByRouteId(routeId); + //proRouteProductBomService.deleteByRouteId(routeId); + } + return toAjax(proRouteService.deleteProRouteByRouteIds(routeIds)); + } +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/controller/ProRouteProcessController.java b/op-modules/op-mes/src/main/java/com/op/mes/controller/ProRouteProcessController.java new file mode 100644 index 000000000..c8583058f --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/controller/ProRouteProcessController.java @@ -0,0 +1,180 @@ +package com.op.mes.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.op.common.core.constant.UserConstants; +import com.op.common.core.utils.StringUtils; +import com.op.common.core.utils.poi.ExcelUtil; +import com.op.common.core.web.controller.BaseController; +import com.op.common.core.web.domain.AjaxResult; +import com.op.common.core.web.page.TableDataInfo; +import com.op.common.log.annotation.Log; +import com.op.common.log.enums.BusinessType; +import com.op.common.security.annotation.RequiresPermissions; + +import com.op.mes.domain.ProProcess; +import com.op.mes.domain.ProRouteProcess; +import com.op.mes.service.IProProcessService; +import com.op.mes.service.IProRouteProcessService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 工艺组成Controller + * + * @author yinjinlu + * @date 2022-05-13 + */ +@RestController +@RequestMapping("/pro/routeprocess") +public class ProRouteProcessController extends BaseController +{ + @Autowired + private IProRouteProcessService proRouteProcessService; + + @Autowired + private IProProcessService proProcessService; + + /** + * 查询工艺组成列表 + */ + //@RequiresPermissions("mes:pro:routeprocess:list") + @GetMapping("/list") + public TableDataInfo list(ProRouteProcess proRouteProcess) + { + startPage(); + List list = proRouteProcessService.selectProRouteProcessList(proRouteProcess); + return getDataTable(list); + } + + /** + * 导出工艺组成列表 + */ + //@RequiresPermissions("mes:pro:routeprocess:export") + @Log(title = "工艺组成", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ProRouteProcess proRouteProcess) + { + List list = proRouteProcessService.selectProRouteProcessList(proRouteProcess); + ExcelUtil util = new ExcelUtil(ProRouteProcess.class); + util.exportExcel(response, list, "工艺组成数据"); + } + + /** + * 获取工艺组成详细信息 + */ + //@RequiresPermissions("mes:pro:routeprocess:query") + @GetMapping(value = "/{recordId}") + public AjaxResult getInfo(@PathVariable("recordId") String recordId) + { + return AjaxResult.success(proRouteProcessService.selectProRouteProcessByRecordId(recordId)); + } + + /** + * 新增工艺组成 + */ + //@RequiresPermissions("mes:pro:routeprocess:add") + @Log(title = "工艺组成", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ProRouteProcess proRouteProcess) + { + if(!proRouteProcessService.checkOrderNumExists(proRouteProcess)){ + return AjaxResult.error("序号已存在!"); + } + if(!proRouteProcessService.checkProcessExists(proRouteProcess)){ + return AjaxResult.error("不能重复添加工序!"); + } + if(UserConstants.YES.equals(proRouteProcess.getKeyFlag()) && !proRouteProcessService.checkUpdateFlagUnique(proRouteProcess)){ + return AjaxResult.error("当前工艺路线已经指定过关键工序"); + } + ProProcess process = proProcessService.selectProProcessByProcessId(proRouteProcess.getProcessId()); + proRouteProcess.setProcessCode(process.getProcessCode()); + proRouteProcess.setProcessName(process.getProcessName()); + + //更新上一个工序的nextProcess + ProRouteProcess preProcess = proRouteProcessService.findPreProcess(proRouteProcess); + if(StringUtils.isNotNull(preProcess)){ + preProcess.setNextProcessId(proRouteProcess.getProcessId()); + preProcess.setNextProcessCode(proRouteProcess.getProcessCode()); + preProcess.setNextProcessName(proRouteProcess.getProcessName()); + proRouteProcessService.updateProRouteProcess(preProcess); + } + + //设置当前工序的nextProcess + ProRouteProcess nextProcess = proRouteProcessService.findNextProcess(proRouteProcess); + if(StringUtils.isNotNull(nextProcess)){ + proRouteProcess.setNextProcessId(nextProcess.getProcessId()); + proRouteProcess.setNextProcessCode(nextProcess.getProcessCode()); + proRouteProcess.setNextProcessName(nextProcess.getProcessName()); + }else{ + proRouteProcess.setNextProcessId("0"); + proRouteProcess.setNextProcessName("无"); + } + + return toAjax(proRouteProcessService.insertProRouteProcess(proRouteProcess)); + } + + /** + * 修改工艺组成 + */ + //@RequiresPermissions("mes:pro:routeprocess:edit") + @Log(title = "工艺组成", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ProRouteProcess proRouteProcess) + { + if(!proRouteProcessService.checkOrderNumExists(proRouteProcess)){ + return AjaxResult.error("序号已存在!"); + } + if(!proRouteProcessService.checkProcessExists(proRouteProcess)){ + return AjaxResult.error("不能重复添加工序!"); + } +// if(UserConstants.YES.equals(proRouteProcess.getKeyFlag()) && !proRouteProcessService.checkUpdateFlagUnique(proRouteProcess)){ +// return AjaxResult.error("当前工艺路线已经指定过关键工序"); +// } + ProProcess process = proProcessService.selectProProcessByProcessId(proRouteProcess.getProcessId()); + proRouteProcess.setProcessCode(process.getProcessCode()); + proRouteProcess.setProcessName(process.getProcessName()); + + //更新上一个工序的nextProcess + ProRouteProcess preProcess = proRouteProcessService.findPreProcess(proRouteProcess); + if(StringUtils.isNotNull(preProcess)){ + preProcess.setNextProcessId(proRouteProcess.getProcessId()); + preProcess.setNextProcessCode(proRouteProcess.getProcessCode()); + preProcess.setNextProcessName(proRouteProcess.getProcessName()); + proRouteProcessService.updateProRouteProcess(preProcess); + } + + //设置当前工序的nextProcess + ProRouteProcess nextProcess = proRouteProcessService.findNextProcess(proRouteProcess); + if(StringUtils.isNotNull(nextProcess)){ + proRouteProcess.setNextProcessId(nextProcess.getProcessId()); + proRouteProcess.setNextProcessCode(nextProcess.getProcessCode()); + proRouteProcess.setNextProcessName(nextProcess.getProcessName()); + }else{ + proRouteProcess.setNextProcessId("0"); + proRouteProcess.setNextProcessName("无"); + } + + return toAjax(proRouteProcessService.updateProRouteProcess(proRouteProcess)); + } + + /** + * 删除工艺组成 + */ + //@RequiresPermissions("mes:pro:routeprocess:remove") + @Log(title = "工艺组成", businessType = BusinessType.DELETE) + @DeleteMapping("/{recordIds}") + public AjaxResult remove(@PathVariable String[] recordIds) + { + return toAjax(proRouteProcessService.deleteProRouteProcessByRecordIds(recordIds)); + } +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/domain/ProRoute.java b/op-modules/op-mes/src/main/java/com/op/mes/domain/ProRoute.java new file mode 100644 index 000000000..ed09190fe --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/domain/ProRoute.java @@ -0,0 +1,182 @@ +package com.op.mes.domain; + +import com.op.common.core.annotation.Excel; +import com.op.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.List; + + +/** + * 工艺路线对象 pro_route + * + * @author yinjinlu + * @date 2022-05-12 + */ +public class ProRoute extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 工艺路线ID */ + private String routeId; + + /** 工艺路线编号 */ + @Excel(name = "工艺路线编号") + private String routeCode; + + /** 工艺路线名称 */ + @Excel(name = "工艺路线名称") + private String routeName; + + /** 工艺路线说明 */ + @Excel(name = "工艺路线说明") + private String routeDesc; + + /** 是否启用 */ + @Excel(name = "是否启用") + private String enableFlag; + + /** 预留字段1 */ + private String attr1; + + /** 预留字段2 */ + private String attr2; + + /** 预留字段3 */ + private String attr3; + + /** 预留字段4 */ + private String attr4; + + private String fileList; + private List files; + + private String routeVersion; + + public String getFileList() { + return fileList; + } + + public void setFileList(String fileList) { + this.fileList = fileList; + } + + public List getFiles() { + return files; + } + + public void setFiles(List files) { + this.files = files; + } + + public String getRouteVersion() { + return routeVersion; + } + + public void setRouteVersion(String routeVersion) { + this.routeVersion = routeVersion; + } + + public void setRouteId(String routeId) + { + this.routeId = routeId; + } + + public String getRouteId() + { + return routeId; + } + public void setRouteCode(String routeCode) + { + this.routeCode = routeCode; + } + + public String getRouteCode() + { + return routeCode; + } + public void setRouteName(String routeName) + { + this.routeName = routeName; + } + + public String getRouteName() + { + return routeName; + } + public void setRouteDesc(String routeDesc) + { + this.routeDesc = routeDesc; + } + + public String getRouteDesc() + { + return routeDesc; + } + public void setEnableFlag(String enableFlag) + { + this.enableFlag = enableFlag; + } + + public String getEnableFlag() + { + return enableFlag; + } + public void setAttr1(String attr1) + { + this.attr1 = attr1; + } + + public String getAttr1() + { + return attr1; + } + public void setAttr2(String attr2) + { + this.attr2 = attr2; + } + + public String getAttr2() + { + return attr2; + } + public void setAttr3(String attr3) + { + this.attr3 = attr3; + } + + public String getAttr3() + { + return attr3; + } + public void setAttr4(String attr4) + { + this.attr4 = attr4; + } + + public String getAttr4() + { + return attr4; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("routeId", getRouteId()) + .append("routeCode", getRouteCode()) + .append("routeName", getRouteName()) + .append("routeDesc", getRouteDesc()) + .append("enableFlag", getEnableFlag()) + .append("remark", getRemark()) + .append("attr1", getAttr1()) + .append("attr2", getAttr2()) + .append("attr3", getAttr3()) + .append("attr4", getAttr4()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/domain/ProRouteProcess.java b/op-modules/op-mes/src/main/java/com/op/mes/domain/ProRouteProcess.java new file mode 100644 index 000000000..708735c97 --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/domain/ProRouteProcess.java @@ -0,0 +1,272 @@ +package com.op.mes.domain; + +import com.op.common.core.annotation.Excel; +import com.op.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 工艺组成对象 pro_route_process + * + * @author yinjinlu + * @date 2022-05-13 + */ +public class ProRouteProcess extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 记录ID */ + private String recordId; + + /** 工艺路线ID */ + @Excel(name = "工艺路线ID") + private String routeId; + + /** 工序ID */ + @Excel(name = "工序ID") + private String processId; + + /** 工序编码 */ + @Excel(name = "工序编码") + private String processCode; + + /** 工序名称 */ + @Excel(name = "工序名称") + private String processName; + + /** 序号 */ + @Excel(name = "序号") + private Integer orderNum; + + /** 工序ID */ + @Excel(name = "工序ID") + private String nextProcessId; + + /** 工序编码 */ + @Excel(name = "工序编码") + private String nextProcessCode; + + /** 工序名称 */ + @Excel(name = "工序名称") + private String nextProcessName; + + /** 与下一道工序关系 */ + @Excel(name = "与下一道工序关系") + private String linkType; + + /** 准备时间 */ + @Excel(name = "准备时间") + private String defaultPreTime; + + /** 等待时间 */ + @Excel(name = "等待时间") + private String defaultSufTime; + + /** 甘特图显示颜色 */ + @Excel(name = "甘特图显示颜色") + private String colorCode; + + /** 是否关键工序 */ + private String keyFlag; + + /** 预留字段1 */ + private String attr1; + + /** 预留字段2 */ + private String attr2; + + /** 预留字段3 */ + private String attr3; + + /** 预留字段4 */ + private String attr4; + + public void setRecordId(String recordId) + { + this.recordId = recordId; + } + + public String getRecordId() + { + return recordId; + } + public void setRouteId(String routeId) + { + this.routeId = routeId; + } + + public String getRouteId() + { + return routeId; + } + public void setProcessId(String processId) + { + this.processId = processId; + } + + public String getProcessId() + { + return processId; + } + public void setProcessCode(String processCode) + { + this.processCode = processCode; + } + + public String getProcessCode() + { + return processCode; + } + public void setProcessName(String processName) + { + this.processName = processName; + } + + public String getProcessName() + { + return processName; + } + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public Integer getOrderNum() + { + return orderNum; + } + public void setNextProcessId(String nextProcessId) + { + this.nextProcessId = nextProcessId; + } + + public String getNextProcessId() + { + return nextProcessId; + } + public void setNextProcessCode(String nextProcessCode) + { + this.nextProcessCode = nextProcessCode; + } + + public String getNextProcessCode() + { + return nextProcessCode; + } + public void setNextProcessName(String nextProcessName) + { + this.nextProcessName = nextProcessName; + } + + public String getNextProcessName() + { + return nextProcessName; + } + public void setLinkType(String linkType) + { + this.linkType = linkType; + } + + public String getLinkType() + { + return linkType; + } + public void setDefaultPreTime(String defaultPreTime) + { + this.defaultPreTime = defaultPreTime; + } + + public String getDefaultPreTime() + { + return defaultPreTime; + } + public void setDefaultSufTime(String defaultSufTime) + { + this.defaultSufTime = defaultSufTime; + } + + public String getKeyFlag() { + return keyFlag; + } + + public void setKeyFlag(String keyFlag) { + this.keyFlag = keyFlag; + } + + public String getDefaultSufTime() + { + return defaultSufTime; + } + public void setColorCode(String colorCode) + { + this.colorCode = colorCode; + } + + public String getColorCode() + { + return colorCode; + } + + public void setAttr1(String attr1) + { + this.attr1 = attr1; + } + + public String getAttr1() + { + return attr1; + } + public void setAttr2(String attr2) + { + this.attr2 = attr2; + } + + + + public String getAttr2() + { + return attr2; + } + public void setAttr3(String attr3) + { + this.attr3 = attr3; + } + + public String getAttr3() + { + return attr3; + } + public void setAttr4(String attr4) + { + this.attr4 = attr4; + } + + public String getAttr4() + { + return attr4; + } + + @Override + public String toString() { + return "ProRouteProcess{" + + "recordId=" + recordId + + ", routeId=" + routeId + + ", processId=" + processId + + ", processCode='" + processCode + '\'' + + ", processName='" + processName + '\'' + + ", orderNum=" + orderNum + + ", nextProcessId=" + nextProcessId + + ", nextProcessCode='" + nextProcessCode + '\'' + + ", nextProcessName='" + nextProcessName + '\'' + + ", linkType='" + linkType + '\'' + + ", defaultPreTime=" + defaultPreTime + + ", defaultSufTime=" + defaultSufTime + + ", colorCode='" + colorCode + '\'' + + ", keyFlag='" + keyFlag + '\'' + + ", attr1='" + attr1 + '\'' + + ", attr2='" + attr2 + '\'' + + ", attr3=" + attr3 + + ", attr4=" + attr4 + + '}'; + } +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/mapper/ProRouteMapper.java b/op-modules/op-mes/src/main/java/com/op/mes/mapper/ProRouteMapper.java new file mode 100644 index 000000000..8cd08b5c1 --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/mapper/ProRouteMapper.java @@ -0,0 +1,74 @@ +package com.op.mes.mapper; + +import com.op.mes.domain.ProRoute; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + + +/** + * 工艺路线Mapper接口 + * + * @author yinjinlu + * @date 2022-05-12 + */ +@Mapper +public interface ProRouteMapper +{ + /** + * 查询工艺路线 + * + * @param routeId 工艺路线主键 + * @return 工艺路线 + */ + public ProRoute selectProRouteByRouteId(String routeId); + + /** + * 查询工艺路线列表 + * + * @param proRoute 工艺路线 + * @return 工艺路线集合 + */ + public List selectProRouteList(ProRoute proRoute); + + /** + * 根据物料查找生效的工艺路线 + * @param itemId + * @return + */ + public ProRoute getRouteByProductId(String itemId); + + public ProRoute checkRouteCodeUnique(ProRoute proRoute); + + /** + * 新增工艺路线 + * + * @param proRoute 工艺路线 + * @return 结果 + */ + public int insertProRoute(ProRoute proRoute); + + /** + * 修改工艺路线 + * + * @param proRoute 工艺路线 + * @return 结果 + */ + public int updateProRoute(ProRoute proRoute); + + /** + * 删除工艺路线 + * + * @param routeId 工艺路线主键 + * @return 结果 + */ + public int deleteProRouteByRouteId(String routeId); + + /** + * 批量删除工艺路线 + * + * @param routeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteProRouteByRouteIds(String[] routeIds); +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/mapper/ProRouteProcessMapper.java b/op-modules/op-mes/src/main/java/com/op/mes/mapper/ProRouteProcessMapper.java new file mode 100644 index 000000000..e9d8b7a72 --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/mapper/ProRouteProcessMapper.java @@ -0,0 +1,79 @@ +package com.op.mes.mapper; + +import com.op.mes.domain.ProRouteProcess; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + + +/** + * 工艺组成Mapper接口 + * + * @author yinjinlu + * @date 2022-05-13 + */ +@Mapper +public interface ProRouteProcessMapper +{ + /** + * 查询工艺组成 + * + * @param recordId 工艺组成主键 + * @return 工艺组成 + */ + public ProRouteProcess selectProRouteProcessByRecordId(String recordId); + + /** + * 查询工艺组成列表 + * + * @param proRouteProcess 工艺组成 + * @return 工艺组成集合 + */ + public List selectProRouteProcessList(ProRouteProcess proRouteProcess); + + public ProRouteProcess checkOrderNumExists(ProRouteProcess proRouteProcess); + public ProRouteProcess checkProcessExists(ProRouteProcess proRouteProcess); + public ProRouteProcess checkUpdateFlagUnique(ProRouteProcess proRouteProcess); + + public ProRouteProcess findPreProcess(ProRouteProcess proRouteProcess); + + public ProRouteProcess findNextProcess(ProRouteProcess proRouteProcess); + /** + * 新增工艺组成 + * + * @param proRouteProcess 工艺组成 + * @return 结果 + */ + public int insertProRouteProcess(ProRouteProcess proRouteProcess); + + /** + * 修改工艺组成 + * + * @param proRouteProcess 工艺组成 + * @return 结果 + */ + public int updateProRouteProcess(ProRouteProcess proRouteProcess); + + /** + * 删除工艺组成 + * + * @param recordId 工艺组成主键 + * @return 结果 + */ + public int deleteProRouteProcessByRecordId(String recordId); + + /** + * 批量删除工艺组成 + * + * @param recordIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteProRouteProcessByRecordIds(String[] recordIds); + + /** + * 根据工艺路线ID删除所有工序配置 + * @param routeId + * @return + */ + public int deleteByRouteId(String routeId); +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/IProRouteProcessService.java b/op-modules/op-mes/src/main/java/com/op/mes/service/IProRouteProcessService.java new file mode 100644 index 000000000..599d8cd23 --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/IProRouteProcessService.java @@ -0,0 +1,111 @@ +package com.op.mes.service; + +import com.op.mes.domain.ProRouteProcess; + +import java.util.List; + +/** + * 工艺组成Service接口 + * + * @author yinjinlu + * @date 2022-05-13 + */ +public interface IProRouteProcessService +{ + /** + * 查询工艺组成 + * + * @param recordId 工艺组成主键 + * @return 工艺组成 + */ + public ProRouteProcess selectProRouteProcessByRecordId(String recordId); + + /** + * 查询工艺组成列表 + * + * @param proRouteProcess 工艺组成 + * @return 工艺组成集合 + */ + public List selectProRouteProcessList(ProRouteProcess proRouteProcess); + + /** + * 检查序号是否已经存在 + * @param proRouteProcess + * @return + */ + public Boolean checkOrderNumExists(ProRouteProcess proRouteProcess); + + /** + * 检查工序是否已经存在 + * @param proRouteProcess + * @return + */ + public Boolean checkProcessExists(ProRouteProcess proRouteProcess); + + /** + * 检查当前工艺路线中是否已经有某个工序配置了update_flag=Y + * @param proRouteProcess + * @return + */ + public Boolean checkUpdateFlagUnique(ProRouteProcess proRouteProcess); + +// /** +// * 检查某个报工单对应的工序是否是关键工序 +// * @param feedback +// * @return +// */ +// public boolean checkKeyProcess(ProFeedback feedback); + + /** + * 查找上一个工序 + * @param proRouteProcess + * @return + */ + public ProRouteProcess findPreProcess(ProRouteProcess proRouteProcess); + + /** + * 查找下一个工序 + * @param proRouteProcess + * @return + */ + public ProRouteProcess findNextProcess(ProRouteProcess proRouteProcess); + + /** + * 新增工艺组成 + * + * @param proRouteProcess 工艺组成 + * @return 结果 + */ + public int insertProRouteProcess(ProRouteProcess proRouteProcess); + + /** + * 修改工艺组成 + * + * @param proRouteProcess 工艺组成 + * @return 结果 + */ + public int updateProRouteProcess(ProRouteProcess proRouteProcess); + + /** + * 批量删除工艺组成 + * + * @param recordIds 需要删除的工艺组成主键集合 + * @return 结果 + */ + public int deleteProRouteProcessByRecordIds(String[] recordIds); + + /** + * 删除工艺组成信息 + * + * @param recordId 工艺组成主键 + * @return 结果 + */ + public int deleteProRouteProcessByRecordId(String recordId); + + /** + * 根据工艺路线ID删除所有工序配置 + * @param routeId + * @return + */ + public int deleteByRouteId(String routeId); +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/IProRouteService.java b/op-modules/op-mes/src/main/java/com/op/mes/service/IProRouteService.java new file mode 100644 index 000000000..c8268f5ae --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/IProRouteService.java @@ -0,0 +1,71 @@ +package com.op.mes.service; + +import com.op.mes.domain.ProRoute; + +import java.util.List; + +/** + * 工艺路线Service接口 + * + * @author yinjinlu + * @date 2022-05-12 + */ +public interface IProRouteService +{ + /** + * 查询工艺路线 + * + * @param routeId 工艺路线主键 + * @return 工艺路线 + */ + public ProRoute selectProRouteByRouteId(String routeId); + + /** + * 查询工艺路线列表 + * + * @param proRoute 工艺路线 + * @return 工艺路线集合 + */ + public List selectProRouteList(ProRoute proRoute); + + /** + * 根据物料查找生效的工艺路线 + * @param itemId + * @return + */ + public ProRoute getRouteByProductId(String itemId); + + public Boolean checkRouteCodeUnique(ProRoute proRoute); + + /** + * 新增工艺路线 + * + * @param proRoute 工艺路线 + * @return 结果 + */ + public int insertProRoute(ProRoute proRoute); + + /** + * 修改工艺路线 + * + * @param proRoute 工艺路线 + * @return 结果 + */ + public int updateProRoute(ProRoute proRoute); + + /** + * 批量删除工艺路线 + * + * @param routeIds 需要删除的工艺路线主键集合 + * @return 结果 + */ + public int deleteProRouteByRouteIds(String[] routeIds); + + /** + * 删除工艺路线信息 + * + * @param routeId 工艺路线主键 + * @return 结果 + */ + public int deleteProRouteByRouteId(String routeId); +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/ProRouteProcessServiceImpl.java b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/ProRouteProcessServiceImpl.java new file mode 100644 index 000000000..b2be4646c --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/ProRouteProcessServiceImpl.java @@ -0,0 +1,182 @@ +package com.op.mes.service.impl; + +import java.util.List; +import java.util.stream.Collectors; + +import com.op.common.core.constant.UserConstants; +import com.op.common.core.utils.DateUtils; +import com.op.common.core.utils.StringUtils; +import com.op.common.core.utils.uuid.IdUtils; +import com.op.mes.domain.ProRouteProcess; +import com.op.mes.mapper.ProRouteMapper; +import com.op.mes.mapper.ProRouteProcessMapper; +import com.op.mes.service.IProRouteProcessService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +/** + * 工艺组成Service业务层处理 + * + * @author yinjinlu + * @date 2022-05-13 + */ +@Service +public class ProRouteProcessServiceImpl implements IProRouteProcessService +{ + @Autowired + private ProRouteMapper proRouteMapper; + + @Autowired + private ProRouteProcessMapper proRouteProcessMapper; + + /** + * 查询工艺组成 + * + * @param recordId 工艺组成主键 + * @return 工艺组成 + */ + @Override + public ProRouteProcess selectProRouteProcessByRecordId(String recordId) + { + return proRouteProcessMapper.selectProRouteProcessByRecordId(recordId); + } + + /** + * 查询工艺组成列表 + * + * @param proRouteProcess 工艺组成 + * @return 工艺组成 + */ + @Override + public List selectProRouteProcessList(ProRouteProcess proRouteProcess) + { + return proRouteProcessMapper.selectProRouteProcessList(proRouteProcess); + } + + @Override + public Boolean checkOrderNumExists(ProRouteProcess proRouteProcess) { + ProRouteProcess process = proRouteProcessMapper.checkOrderNumExists(proRouteProcess); + String recordId = proRouteProcess.getRecordId(); + if(StringUtils.isNotNull(process) && process.getRecordId().equals(recordId)){ + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + @Override + public Boolean checkProcessExists(ProRouteProcess proRouteProcess) { + ProRouteProcess process = proRouteProcessMapper.checkProcessExists(proRouteProcess); + String recordId = proRouteProcess.getRecordId(); + if(StringUtils.isNotNull(process) && process.getRecordId().equals(recordId) ){ + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + @Override + public Boolean checkUpdateFlagUnique(ProRouteProcess proRouteProcess) { + ProRouteProcess process = proRouteProcessMapper.checkUpdateFlagUnique(proRouteProcess); + String recordId = proRouteProcess.getRecordId(); + if(StringUtils.isNotNull(process) && process.getRecordId().equals(recordId)){ + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + +// @Override +// public boolean checkKeyProcess(ProFeedback feedback) { +// //根据当前生产的产品获取对应的工艺路线 +// String routeId =-1L,processId = -1L; +// ProRouteProduct param = new ProRouteProduct(); +// param.setItemId(feedback.getItemId()); +// List products = proRouteProductMapper.selectProRouteProductList(param); +// if(CollectionUtil.isNotEmpty(products)){ +// products = products.stream().filter(item -> proRouteMapper.selectProRouteByRouteId(item.getRouteId()).getEnableFlag().equals(UserConstants.YES)).collect(Collectors.toList()); +// if (CollectionUtil.isNotEmpty(products)){ +// routeId = products.get(0).getRouteId(); +// } +// } +// +// //根据工作站获取工序 +// MdWorkstation workstation = mdWorkstationMapper.selectMdWorkstationByWorkstationId(feedback.getWorkstationId()); +// processId = workstation.getProcessId(); +// +// //再判断当前的工序在此工艺路线中是否是关键工序 +// ProRouteProcess param2 = new ProRouteProcess(); +// param2.setRouteId(routeId); +// param2.setProcessId(processId); +// param2.setKeyFlag(UserConstants.YES); +// List processes = proRouteProcessMapper.selectProRouteProcessList(param2); +// if(CollectionUtil.isNotEmpty(processes)){ +// return true; +// } +// return false; +// } + + @Override + public ProRouteProcess findPreProcess(ProRouteProcess proRouteProcess) { + return proRouteProcessMapper.findPreProcess(proRouteProcess); + } + + @Override + public ProRouteProcess findNextProcess(ProRouteProcess proRouteProcess) { + return proRouteProcessMapper.findNextProcess(proRouteProcess); + } + + /** + * 新增工艺组成 + * + * @param proRouteProcess 工艺组成 + * @return 结果 + */ + @Override + public int insertProRouteProcess(ProRouteProcess proRouteProcess) + { + proRouteProcess.setCreateTime(DateUtils.getNowDate()); + proRouteProcess.setRecordId(IdUtils.fastSimpleUUID()); + return proRouteProcessMapper.insertProRouteProcess(proRouteProcess); + } + + /** + * 修改工艺组成 + * + * @param proRouteProcess 工艺组成 + * @return 结果 + */ + @Override + public int updateProRouteProcess(ProRouteProcess proRouteProcess) + { + proRouteProcess.setUpdateTime(DateUtils.getNowDate()); + return proRouteProcessMapper.updateProRouteProcess(proRouteProcess); + } + + /** + * 批量删除工艺组成 + * + * @param recordIds 需要删除的工艺组成主键 + * @return 结果 + */ + @Override + public int deleteProRouteProcessByRecordIds(String[] recordIds) + { + return proRouteProcessMapper.deleteProRouteProcessByRecordIds(recordIds); + } + + /** + * 删除工艺组成信息 + * + * @param recordId 工艺组成主键 + * @return 结果 + */ + @Override + public int deleteProRouteProcessByRecordId(String recordId) + { + return proRouteProcessMapper.deleteProRouteProcessByRecordId(recordId); + } + + @Override + public int deleteByRouteId(String routeId) { + return proRouteProcessMapper.deleteByRouteId(routeId); + } +} diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/ProRouteServiceImpl.java b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/ProRouteServiceImpl.java new file mode 100644 index 000000000..08c4d8a0a --- /dev/null +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/ProRouteServiceImpl.java @@ -0,0 +1,178 @@ +package com.op.mes.service.impl; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.op.common.core.constant.UserConstants; +import com.op.common.core.domain.BaseFileData; +import com.op.common.core.utils.DateUtils; +import com.op.common.core.utils.StringUtils; +import com.op.common.core.utils.uuid.IdUtils; +import com.op.common.security.utils.SecurityUtils; +import com.op.mes.domain.BaseFile; +import com.op.mes.domain.ProProcess; +import com.op.mes.domain.ProRoute; +import com.op.mes.mapper.BaseFileMapper; +import com.op.mes.mapper.ProRouteMapper; +import com.op.mes.service.IProRouteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + + +/** + * 工艺路线Service业务层处理 + * + * @author yinjinlu + * @date 2022-05-12 + */ +@Service +public class ProRouteServiceImpl implements IProRouteService +{ + @Autowired + private ProRouteMapper proRouteMapper; + @Autowired + private BaseFileMapper baseFileMapper; + /** + * 查询工艺路线 + * + * @param routeId 工艺路线主键 + * @return 工艺路线 + */ + @Override + public ProRoute selectProRouteByRouteId(String routeId) + { + + ProRoute p = proRouteMapper.selectProRouteByRouteId(routeId); + List files = baseFileMapper.getBaseFileBatch(routeId); + if(!CollectionUtils.isEmpty(files)){ + p.setFiles(files); + } + return p; + } + + /** + * 查询工艺路线列表 + * + * @param proRoute 工艺路线 + * @return 工艺路线 + */ + @Override + public List selectProRouteList(ProRoute proRoute) + { + return proRouteMapper.selectProRouteList(proRoute); + } + + @Override + public ProRoute getRouteByProductId(String itemId) { + return proRouteMapper.getRouteByProductId(itemId); + } + + + @Override + public Boolean checkRouteCodeUnique(ProRoute proRoute) { + ProRoute route = proRouteMapper.checkRouteCodeUnique(proRoute); + String routeId = proRoute.getRouteId(); + if(StringUtils.isNotNull(route) && route.getRouteId().equals(routeId)){ + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 新增工艺路线 + * + * @param proRoute 工艺路线 + * @return 结果 + */ + @Override + public int insertProRoute(ProRoute proRoute) + { + proRoute.setCreateTime(DateUtils.getNowDate()); + proRoute.setRouteVersion("V.1"); + //上传附件 + if(StringUtils.isNotEmpty(proRoute.getFileList())){ + String[] ids = proRoute.getFileList().split(","); + List files = new ArrayList<>(); + BaseFileData file = null; + for(String id:ids){ + file = new BaseFileData(); + file.setFileId(IdUtils.fastSimpleUUID()); + file.setFileName(id.split("&fileName=")[1]); + file.setFileAddress(id); + file.setSourceId(proRoute.getRouteId()); + file.setCreateBy(SecurityUtils.getUsername()); + file.setCreateTime(new Date()); + files.add(file); + } + baseFileMapper.insertBaseFileBatch(files); + } + + return proRouteMapper.insertProRoute(proRoute); + } + + /** + * 修改工艺路线 + * + * @param proRoute 工艺路线 + * @return 结果 + */ + @Override + public int updateProRoute(ProRoute proRoute) + { + proRoute.setUpdateTime(DateUtils.getNowDate()); + + //上传附件 + if(StringUtils.isNotEmpty(proRoute.getFileList())){ + baseFileMapper.deleteBaseFileBySourceId(proRoute.getRouteId()); + String[] ids = proRoute.getFileList().split(","); + List files = new ArrayList<>(); + BaseFileData file = null; + for(String id:ids){ + file = new BaseFileData(); + file.setFileId(IdUtils.fastSimpleUUID()); + file.setFileAddress(id); + file.setFileName(id.split("&fileName=")[1]); + file.setSourceId(proRoute.getRouteId()); + file.setCreateBy(SecurityUtils.getUsername()); + file.setCreateTime(new Date()); + files.add(file); + } + baseFileMapper.insertBaseFileBatch(files); + } + + //更新版本V.1->递增 + String nowRouteVersion = proRoute.getRouteVersion().replace("V","") + .replace(".",""); + int nowRouteVersionNum = Integer.parseInt(nowRouteVersion); + String newRouteVersionNum = "V."+(++nowRouteVersionNum); + proRoute.setRouteVersion(newRouteVersionNum); + return proRouteMapper.updateProRoute(proRoute); + } + + /** + * 批量删除工艺路线 + * + * @param routeIds 需要删除的工艺路线主键 + * @return 结果 + */ + @Override + public int deleteProRouteByRouteIds(String[] routeIds) + { + return proRouteMapper.deleteProRouteByRouteIds(routeIds); + } + + /** + * 删除工艺路线信息 + * + * @param routeId 工艺路线主键 + * @return 结果 + */ + @Override + public int deleteProRouteByRouteId(String routeId) + { + return proRouteMapper.deleteProRouteByRouteId(routeId); + } + +} diff --git a/op-modules/op-mes/src/main/resources/mapper/mes/ProRouteMapper.xml b/op-modules/op-mes/src/main/resources/mapper/mes/ProRouteMapper.xml new file mode 100644 index 000000000..e2b790b07 --- /dev/null +++ b/op-modules/op-mes/src/main/resources/mapper/mes/ProRouteMapper.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + select route_id, route_code, route_name, route_desc, enable_flag, remark, + attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time, + route_version + from pro_route + + + + + + + + + + + + insert into pro_route + + route_id, + route_code, + route_name, + route_desc, + enable_flag, + remark, + attr1, + attr2, + attr3, + attr4, + create_by, + create_time, + update_by, + update_time, + route_version, + + + #{routeId}, + #{routeCode}, + #{routeName}, + #{routeDesc}, + #{enableFlag}, + #{remark}, + #{attr1}, + #{attr2}, + #{attr3}, + #{attr4}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{updateTime}, + + + + + update pro_route + + route_code = #{routeCode}, + route_name = #{routeName}, + route_desc = #{routeDesc}, + enable_flag = #{enableFlag}, + remark = #{remark}, + attr1 = #{attr1}, + attr2 = #{attr2}, + attr3 = #{attr3}, + attr4 = #{attr4}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + route_version = #{routeVersion}, + + where route_id = #{routeId} + + + + delete from pro_route where route_id = #{routeId} + + + + delete from pro_route where route_id in + + #{routeId} + + + diff --git a/op-modules/op-mes/src/main/resources/mapper/mes/ProRouteProcessMapper.xml b/op-modules/op-mes/src/main/resources/mapper/mes/ProRouteProcessMapper.xml new file mode 100644 index 000000000..243c819a9 --- /dev/null +++ b/op-modules/op-mes/src/main/resources/mapper/mes/ProRouteProcessMapper.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select record_id, route_id, process_id, process_code, process_name, order_num, next_process_id, next_process_code, next_process_name, link_type, default_pre_time, default_suf_time, color_code,key_flag, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from pro_route_process + + + + + + + + + + + + + + + + + + + insert into pro_route_process + + record_id, + route_id, + process_id, + process_code, + process_name, + order_num, + next_process_id, + next_process_code, + next_process_name, + link_type, + default_pre_time, + default_suf_time, + color_code, + key_flag, + remark, + attr1, + attr2, + attr3, + attr4, + create_by, + create_time, + update_by, + update_time, + + + #{recordId}, + #{routeId}, + #{processId}, + #{processCode}, + #{processName}, + #{orderNum}, + #{nextProcessId}, + #{nextProcessCode}, + #{nextProcessName}, + #{linkType}, + #{defaultPreTime}, + #{defaultSufTime}, + #{colorCode}, + #{keyFlag}, + #{remark}, + #{attr1}, + #{attr2}, + #{attr3}, + #{attr4}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update pro_route_process + + route_id = #{routeId}, + process_id = #{processId}, + process_code = #{processCode}, + process_name = #{processName}, + order_num = #{orderNum}, + next_process_id = #{nextProcessId}, + next_process_code = #{nextProcessCode}, + next_process_name = #{nextProcessName}, + link_type = #{linkType}, + default_pre_time = #{defaultPreTime}, + default_suf_time = #{defaultSufTime}, + key_flag = #{keyFlag}, + color_code = #{colorCode}, + remark = #{remark}, + attr1 = #{attr1}, + attr2 = #{attr2}, + attr3 = #{attr3}, + attr4 = #{attr4}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where record_id = #{recordId} + + + + delete from pro_route_process where record_id = #{recordId} + + + + delete from pro_route_process where record_id in + + #{recordId} + + + + + delete from pro_route_process where route_id = #{routeId} + + +