src/main/java/com/ruoyi/CodeGenerator.java
@@ -20,7 +20,7 @@ // 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中 public class CodeGenerator { public static String database_url = "jdbc:mysql://localhost:3307/product-inventory-management-new-pro"; public static String database_url = "jdbc:mysql://localhost:3306/product-inventory-management-new-pro"; public static String database_username = "root"; public static String database_password= "123456"; public static String author = "芯导软件(江苏)有限公司"; src/main/java/com/ruoyi/technology/controller/TechnologyRoutingController.java
@@ -1,18 +1,51 @@ package com.ruoyi.technology.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.technology.pojo.TechnologyRouting; import com.ruoyi.technology.service.TechnologyRoutingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * <p> * 工艺路线表 前端控制器 * </p> * * @author 芯导软件(江苏)有限公司 * @since 2026-04-20 10:06:33 */ import java.util.Arrays; @RestController @RequestMapping("/technologyRouting") @Api(tags = "工艺路线") public class TechnologyRoutingController { @Autowired private TechnologyRoutingService technologyRoutingService; @GetMapping("/page") @ApiOperation("工艺路线分页查询") public R page(Page<TechnologyRouting> page, TechnologyRouting technologyRouting) { return R.ok(technologyRoutingService.pageTechnologyRouting(page, technologyRouting)); } @GetMapping("/{id}") @ApiOperation("工艺路线详情") public R getInfo(@PathVariable("id") Long id) { return R.ok(technologyRoutingService.getById(id)); } @PostMapping @ApiOperation("新增工艺路线") public R add(@RequestBody TechnologyRouting technologyRouting) { return R.ok(technologyRoutingService.saveTechnologyRouting(technologyRouting)); } @PutMapping @ApiOperation("修改工艺路线") public R edit(@RequestBody TechnologyRouting technologyRouting) { return R.ok(technologyRoutingService.updateById(technologyRouting)); } @DeleteMapping("/{ids}") @ApiOperation("删除工艺路线") public R remove(@PathVariable("ids") Long[] ids) { return R.ok(technologyRoutingService.removeTechnologyRouting(Arrays.asList(ids))); } } src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java
@@ -1,18 +1,55 @@ package com.ruoyi.technology.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.technology.pojo.TechnologyRoutingOperation; import com.ruoyi.technology.service.TechnologyRoutingOperationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * <p> * 工艺路线工序表 前端控制器 * </p> * * @author 芯导软件(江苏)有限公司 * @since 2026-04-20 10:06:47 */ @RestController @RequestMapping("/technologyRoutingOperation") @Api(tags = "工艺路线工序") public class TechnologyRoutingOperationController { @Autowired private TechnologyRoutingOperationService technologyRoutingOperationService; @GetMapping("/page") @ApiOperation("工艺路线工序分页查询") public R page(Page<TechnologyRoutingOperation> page, TechnologyRoutingOperation technologyRoutingOperation) { return R.ok(technologyRoutingOperationService.pageTechnologyRoutingOperation(page, technologyRoutingOperation)); } @GetMapping("/list") @ApiOperation("工艺路线工序列表") public R list(TechnologyRoutingOperation technologyRoutingOperation) { return R.ok(technologyRoutingOperationService.listTechnologyRoutingOperation(technologyRoutingOperation)); } @GetMapping("/{id}") @ApiOperation("工艺路线工序详情") public R getInfo(@PathVariable("id") Long id) { return R.ok(technologyRoutingOperationService.getById(id)); } @PostMapping @ApiOperation("新增工艺路线工序") public R add(@RequestBody TechnologyRoutingOperation technologyRoutingOperation) { return R.ok(technologyRoutingOperationService.saveTechnologyRoutingOperation(technologyRoutingOperation)); } @PutMapping @ApiOperation("修改工艺路线工序") public R edit(@RequestBody TechnologyRoutingOperation technologyRoutingOperation) { return R.ok(technologyRoutingOperationService.updateById(technologyRoutingOperation)); } @DeleteMapping("/{id}") @ApiOperation("删除工艺路线工序") public R remove(@PathVariable("id") Long id) { return R.ok(technologyRoutingOperationService.removeTechnologyRoutingOperation(id)); } } src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationService.java
@@ -1,16 +1,20 @@ package com.ruoyi.technology.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.technology.pojo.TechnologyRoutingOperation; /** * <p> * 工艺路线工序表 服务类 * </p> * * @author 芯导软件(江苏)有限公司 * @since 2026-04-20 10:06:47 */ import java.util.List; public interface TechnologyRoutingOperationService extends IService<TechnologyRoutingOperation> { IPage<TechnologyRoutingOperation> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperation> page, TechnologyRoutingOperation technologyRoutingOperation); List<TechnologyRoutingOperation> listTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation); boolean saveTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation); boolean removeTechnologyRoutingOperation(Long id); } src/main/java/com/ruoyi/technology/service/TechnologyRoutingService.java
@@ -1,16 +1,17 @@ package com.ruoyi.technology.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.technology.pojo.TechnologyRouting; /** * <p> * 工艺路线表 服务类 * </p> * * @author 芯导软件(江苏)有限公司 * @since 2026-04-20 10:06:33 */ import java.util.List; public interface TechnologyRoutingService extends IService<TechnologyRouting> { IPage<TechnologyRouting> pageTechnologyRouting(Page<TechnologyRouting> page, TechnologyRouting technologyRouting); Long saveTechnologyRouting(TechnologyRouting technologyRouting); boolean removeTechnologyRouting(List<Long> ids); } src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
@@ -1,20 +1,109 @@ package com.ruoyi.technology.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.technology.mapper.TechnologyRoutingMapper; import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper; import com.ruoyi.technology.pojo.TechnologyRoutingOperation; import com.ruoyi.technology.service.TechnologyRoutingOperationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * <p> * 工艺路线工序表 服务实现类 * </p> * * @author 芯导软件(江苏)有限公司 * @since 2026-04-20 10:06:47 */ import java.util.List; @Service @Transactional(rollbackFor = Exception.class) public class TechnologyRoutingOperationServiceImpl extends ServiceImpl<TechnologyRoutingOperationMapper, TechnologyRoutingOperation> implements TechnologyRoutingOperationService { @Autowired private TechnologyRoutingOperationMapper technologyRoutingOperationMapper; @Autowired private TechnologyRoutingMapper technologyRoutingMapper; @Override public IPage<TechnologyRoutingOperation> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperation> page, TechnologyRoutingOperation technologyRoutingOperation) { return this.page(page, buildQueryWrapper(technologyRoutingOperation)); } @Override public List<TechnologyRoutingOperation> listTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation) { return this.list(buildQueryWrapper(technologyRoutingOperation)); } @Override public boolean saveTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation) { if (technologyRoutingOperation.getTechnologyRoutingId() == null || technologyRoutingMapper.selectById(technologyRoutingOperation.getTechnologyRoutingId()) == null) { throw new RuntimeException("工艺路线不存在,无法保存工序"); } if (technologyRoutingOperation.getDragSort() == null || technologyRoutingOperation.getDragSort() <= 0) { technologyRoutingOperation.setDragSort(nextDragSort(technologyRoutingOperation.getTechnologyRoutingId())); } return this.save(technologyRoutingOperation); } @Override public boolean removeTechnologyRoutingOperation(Long id) { TechnologyRoutingOperation technologyRoutingOperation = this.getById(id); if (technologyRoutingOperation == null) { return false; } boolean removed = this.removeById(id); if (removed) { resetDragSort(technologyRoutingOperation.getTechnologyRoutingId()); } return removed; } private LambdaQueryWrapper<TechnologyRoutingOperation> buildQueryWrapper(TechnologyRoutingOperation technologyRoutingOperation) { LambdaQueryWrapper<TechnologyRoutingOperation> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(technologyRoutingOperation.getId() != null, TechnologyRoutingOperation::getId, technologyRoutingOperation.getId()) .eq(technologyRoutingOperation.getTechnologyRoutingId() != null, TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingOperation.getTechnologyRoutingId()) .eq(technologyRoutingOperation.getProductModelId() != null, TechnologyRoutingOperation::getProductModelId, technologyRoutingOperation.getProductModelId()) .eq(technologyRoutingOperation.getTechnologyOperationId() != null, TechnologyRoutingOperation::getTechnologyOperationId, technologyRoutingOperation.getTechnologyOperationId()) .eq(technologyRoutingOperation.getIsQuality() != null, TechnologyRoutingOperation::getIsQuality, technologyRoutingOperation.getIsQuality()) .orderByAsc(TechnologyRoutingOperation::getDragSort) .orderByAsc(TechnologyRoutingOperation::getId); return queryWrapper; } private Integer nextDragSort(Long technologyRoutingId) { TechnologyRoutingOperation lastOperation = technologyRoutingOperationMapper.selectOne( Wrappers.<TechnologyRoutingOperation>lambdaQuery() .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingId) .orderByDesc(TechnologyRoutingOperation::getDragSort) .last("limit 1") ); if (lastOperation == null || lastOperation.getDragSort() == null) { return 1; } return lastOperation.getDragSort() + 1; } private void resetDragSort(Long technologyRoutingId) { List<TechnologyRoutingOperation> operationList = technologyRoutingOperationMapper.selectList( Wrappers.<TechnologyRoutingOperation>lambdaQuery() .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingId) .orderByAsc(TechnologyRoutingOperation::getDragSort) .orderByAsc(TechnologyRoutingOperation::getId) ); for (int i = 0; i < operationList.size(); i++) { TechnologyRoutingOperation item = operationList.get(i); int dragSort = i + 1; if (item.getDragSort() == null || item.getDragSort() != dragSort) { item.setDragSort(dragSort); technologyRoutingOperationMapper.updateById(item); } } } } src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
@@ -1,20 +1,72 @@ package com.ruoyi.technology.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.technology.mapper.TechnologyRoutingMapper; import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper; import com.ruoyi.technology.pojo.TechnologyRouting; import com.ruoyi.technology.pojo.TechnologyRoutingOperation; import com.ruoyi.technology.service.TechnologyRoutingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * <p> * 工艺路线表 服务实现类 * </p> * * @author 芯导软件(江苏)有限公司 * @since 2026-04-20 10:06:33 */ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.List; @Service @Transactional(rollbackFor = Exception.class) public class TechnologyRoutingServiceImpl extends ServiceImpl<TechnologyRoutingMapper, TechnologyRouting> implements TechnologyRoutingService { @Autowired private TechnologyRoutingMapper technologyRoutingMapper; @Autowired private TechnologyRoutingOperationMapper technologyRoutingOperationMapper; @Override public IPage<TechnologyRouting> pageTechnologyRouting(Page<TechnologyRouting> page, TechnologyRouting technologyRouting) { LambdaQueryWrapper<TechnologyRouting> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(technologyRouting.getId() != null, TechnologyRouting::getId, technologyRouting.getId()) .eq(technologyRouting.getProductModelId() != null, TechnologyRouting::getProductModelId, technologyRouting.getProductModelId()) .eq(technologyRouting.getBomId() != null, TechnologyRouting::getBomId, technologyRouting.getBomId()) .like(isNotBlank(technologyRouting.getProcessRouteCode()), TechnologyRouting::getProcessRouteCode, technologyRouting.getProcessRouteCode()) .like(isNotBlank(technologyRouting.getDescription()), TechnologyRouting::getDescription, technologyRouting.getDescription()) .orderByDesc(TechnologyRouting::getId); return this.page(page, queryWrapper); } @Override public Long saveTechnologyRouting(TechnologyRouting technologyRouting) { this.save(technologyRouting); if (!isNotBlank(technologyRouting.getProcessRouteCode())) { technologyRouting.setProcessRouteCode(buildProcessRouteCode(technologyRouting.getId())); technologyRoutingMapper.updateById(technologyRouting); } return technologyRouting.getId(); } @Override public boolean removeTechnologyRouting(List<Long> ids) { if (ids == null || ids.isEmpty()) { return false; } technologyRoutingOperationMapper.delete(Wrappers.<TechnologyRoutingOperation>lambdaQuery() .in(TechnologyRoutingOperation::getTechnologyRoutingId, ids)); return this.removeByIds(ids); } private String buildProcessRouteCode(Long id) { String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String idStr = String.format("%06d", id); return "GYLX" + dateStr + idStr; } private boolean isNotBlank(String value) { return value != null && !value.trim().isEmpty(); } }