| doc/君歌化工.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/controller/ProductProcessController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/enums/ProductProcessEnum.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/pojo/ProductProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/service/ProductProcessService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
doc/¾ý¸è»¯¹¤.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,6 @@ ALTER TABLE `product-inventory-management-jghg`.`product_process` MODIFY COLUMN `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'å·¥åºåç§°' AFTER `update_time`, MODIFY COLUMN `no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'å·¥åºç¼å·' AFTER `name`, MODIFY COLUMN `type` int NULL DEFAULT NULL COMMENT 'ç±»å1-å å·¥ï¼2-宿¿å·è¯å¶ä½ã3-管路ç»å¯¹ã4-ç½ä½è¿æ¥åè°è¯ï¼5-æµè¯æåï¼6-å ¶ä»' AFTER `is_quality`; ALTER TABLE `product-inventory-management-jghg`.`product_process` COMMENT = 'å·¥åºè¡¨'; src/main/java/com/ruoyi/production/controller/ProductProcessController.java
@@ -2,22 +2,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.device.pojo.DeviceRepair; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.oA.pojo.OaProject; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.service.impl.ProductProcessServiceImpl; import com.ruoyi.production.service.ProductProcessService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -29,9 +24,8 @@ @RequestMapping("/productProcess") public class ProductProcessController extends BaseController { @Autowired private ProductProcessServiceImpl productProcessService; private ProductProcessService productProcessService; @GetMapping("/listPage") @Log(title = "å·¥åº-å页æ¥è¯¢", businessType = BusinessType.OTHER) @@ -41,46 +35,50 @@ return AjaxResult.success(listPage); } @ApiModelProperty("æ°å¢å·¥åº") @ApiOperation("æ°å¢å·¥åº") @PostMapping() @Log(title = "æ°å¢", businessType = BusinessType.INSERT) public AjaxResult add( @RequestBody ProductProcessDto productProcessDto) { return productProcessService.add(productProcessDto); @Log(title = "å·¥åº-æ°å¢", businessType = BusinessType.INSERT) public AjaxResult add(@RequestBody ProductProcessDto productProcessDto) { productProcessService.add(productProcessDto); return AjaxResult.success(); } @ApiOperation("æ´æ°å·¥åº") @Log(title = "ä¿®æ¹", businessType = BusinessType.UPDATE) @Log(title = "å·¥åº-ä¿®æ¹", businessType = BusinessType.UPDATE) @PutMapping("/update") public AjaxResult update(@RequestBody ProductProcess productProcess) { return AjaxResult.success(productProcessService.updateById(productProcess)); public AjaxResult update(@RequestBody ProductProcessDto productProcessDto) { productProcessService.update(productProcessDto); return AjaxResult.success(); } @ApiOperation("å é¤å·¥åº") @DeleteMapping("/batchDelete") @Log(title = "å é¤", businessType = BusinessType.DELETE) @Log(title = "å·¥åº-å é¤", businessType = BusinessType.DELETE) public AjaxResult batchDelete(@RequestBody List<Integer> ids) { return AjaxResult.success(productProcessService.batchDelete(ids)); productProcessService.batchDelete(ids); return AjaxResult.success(); } @ApiOperation("æ¥è¯¢ææå·¥åº") @GetMapping("/list") @Log(title = "å·¥åº-æ¥è¯¢å表", businessType = BusinessType.OTHER) public AjaxResult list() { return AjaxResult.success(productProcessService.list()); } /** * å¯¼å ¥å·¥åº */ @Log(title = "å·¥åº", businessType = BusinessType.IMPORT) @PostMapping("/importData") public AjaxResult importData(MultipartFile file) throws Exception { return productProcessService.importData(file); } @ApiOperation("å¯¼å ¥å·¥åº") @Log(title = "å·¥åº-å¯¼å ¥", businessType = BusinessType.IMPORT) @PostMapping("/importData") public AjaxResult importData(MultipartFile file) { productProcessService.importData(file); return AjaxResult.success(); } @ApiOperation("ä¸è½½å·¥åºæ¨¡æ¿") @PostMapping("/downloadTemplate") @Log(title = "å·¥åº-ä¸è½½æ¨¡æ¿", businessType = BusinessType.EXPORT) public void downloadTemplate(HttpServletResponse response) { ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class); ExcelUtil<ProductProcess> util = new ExcelUtil<>(ProductProcess.class); util.importTemplateExcel(response, "å·¥åºæ¨¡æ¿"); } } src/main/java/com/ruoyi/production/enums/ProductProcessEnum.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package com.ruoyi.production.enums; import lombok.Getter; /** * <br> * é¨ä»¶ç±»åæä¸¾ * </br> * * @author deslrey * @version 1.0 * @since 2026/4/16 10:27 */ @Getter public enum ProductProcessEnum { PROCESSING(1, "å å·¥"), SCRAPER_COLD_CORE(2, "宿¿å·è¯å¶ä½"), PIPELINE_ASSEMBLY(3, "管路ç»å¯¹"), TANK_CONNECTION_DEBUG(4, "ç½ä½è¿æ¥åè°è¯"), PRESSURE_TEST(5, "æµè¯æå"), OTHER(6, "å ¶ä»"); private final Integer code; private final String info; ProductProcessEnum(Integer code, String info) { this.code = code; this.info = info; } /** * æ ¹æ®åç§°è·å对åºç Code */ public static Integer getCodeByInfo(String info) { for (ProductProcessEnum value : ProductProcessEnum.values()) { if (value.getInfo().equals(info)) { return value.getCode(); } } return null; } /** * æ ¹æ®åç§°è·åæä¸¾å¯¹è±¡ */ public static ProductProcessEnum getEnumByInfo(String info) { for (ProductProcessEnum value : ProductProcessEnum.values()) { if (value.getInfo().equals(info)) { return value; } } return null; } } src/main/java/com/ruoyi/production/pojo/ProductProcess.java
@@ -27,20 +27,14 @@ /** * å·¥åºåç§° */ @Excel(name = "å·¥åºåç§°") @Excel(name = "é¨ä»¶åç§°") private String name; /** * å·¥åºç¼å· */ @Excel(name = "å·¥åºç¼å·") @Excel(name = "é¨ä»¶ç¼å·") private String no; /** * 夿³¨ */ @Excel(name = "夿³¨") private String remark; /** @@ -50,8 +44,19 @@ @TableField(updateStrategy = FieldStrategy.IGNORED) private BigDecimal salaryQuota; @ApiModelProperty("ç±»å åºåæ¯è®¡æ¶è¿æ¯è®¡ä»¶ 0 è®¡æ¶ 1计件") private Long type; @ApiModelProperty("ç±»å1-å å·¥ï¼2-宿¿å·è¯å¶ä½ã3-管路ç»å¯¹ã4-ç½ä½è¿æ¥åè°è¯ï¼5-æµè¯æåï¼6-å ¶ä»") private Integer type; @TableField(exist = false) @Excel(name = "é¨ä»¶ç±»å") private String ProductProcessType; /** * 夿³¨ */ @Excel(name = "夿³¨") private String remark; /** * å建æ¶é´ @@ -75,7 +80,7 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value ="æ¯å¦è´¨æ£") @ApiModelProperty(value = "æ¯å¦è´¨æ£") private Boolean isQuality; src/main/java/com/ruoyi/production/service/ProductProcessService.java
@@ -3,14 +3,10 @@ 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.device.pojo.DeviceRepair; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.*; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.SalesLedgerScheduling; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -20,9 +16,11 @@ public interface ProductProcessService extends IService<ProductProcess> { IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto); AjaxResult add(ProductProcessDto productProcessDto); void add(ProductProcessDto productProcessDto); AjaxResult importData(MultipartFile file); void update(ProductProcessDto productProcessDto); String batchDelete(List<Integer> ids); void importData(MultipartFile file); void batchDelete(List<Integer> ids); } src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -5,10 +5,10 @@ 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.basic.pojo.Customer; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.enums.ProductProcessEnum; import com.ruoyi.production.mapper.ProcessRouteItemMapper; import com.ruoyi.production.mapper.ProductProcessMapper; import com.ruoyi.production.mapper.ProductProcessRouteItemMapper; @@ -16,20 +16,26 @@ import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.ProductProcessRouteItem; import com.ruoyi.production.service.ProductProcessService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.util.List; @Slf4j @Service public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService { @Autowired private ProductProcessMapper productProcessMapper; @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; @@ -39,54 +45,110 @@ } @Override public AjaxResult add(ProductProcessDto productProcessDto) { ProductProcess productProcess = new ProductProcess(); BeanUtils.copyProperties(productProcessDto,productProcess); boolean save = productProcessMapper.insert(productProcess) > 0; if (save && ObjectUtils.isNull(productProcessDto.getNo())) { // æ ¹æ®idçænoåæ®µï¼GX + 8使°åï¼ä¸è¶³8ä½åé¢è¡¥0ï¼ String no = "GX" + String.format("%08d", productProcess.getId()); productProcess.setNo(no); productProcessMapper.updateById(productProcess); return AjaxResult.success(); @Transactional(rollbackFor = Exception.class) public void add(ProductProcessDto productProcessDto) { if (ObjectUtils.isEmpty(productProcessDto.getName())) { throw new ServiceException("é¨ä»¶åç§°ä¸è½ä¸ºç©º"); } return AjaxResult.success(); long count = this.count(Wrappers.<ProductProcess>lambdaQuery().eq(ProductProcess::getName, productProcessDto.getName())); if (count > 0) { throw new ServiceException("é¨ä»¶åç§°å·²åå¨ï¼ä¸è½éå¤"); } if (ObjectUtils.isNotEmpty(productProcessDto.getNo())) { long noCount = this.count(Wrappers.<ProductProcess>lambdaQuery().eq(ProductProcess::getNo, productProcessDto.getNo())); if (noCount > 0) { throw new ServiceException("å·¥åºç¼å·å·²åå¨ï¼ä¸è½éå¤"); } } ProductProcess productProcess = new ProductProcess(); BeanUtils.copyProperties(productProcessDto, productProcess); boolean save = productProcessMapper.insert(productProcess) > 0; if (save && ObjectUtils.isEmpty(productProcess.getNo())) { String no = "GX" + String.format("%08d", productProcess.getId()); // 注æï¼è¿éç±äºæ¯èªå¨çæç ID è¡¥å ¨ï¼é常ä¸ä¼éå¤ï¼ä½å»ºè®® set ä¹åæ´æ° productProcess.setNo(no); productProcessMapper.updateById(productProcess); } } @Override public AjaxResult importData(MultipartFile file) { try { ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class); List<ProductProcess> productProcessList = util.importExcel(file.getInputStream()); if(CollectionUtils.isEmpty(productProcessList)){ return AjaxResult.warn("模æ¿é误æå¯¼å ¥æ°æ®ä¸ºç©º"); @Transactional(rollbackFor = Exception.class) public void update(ProductProcessDto productProcessDto) { if (ObjectUtils.isEmpty(productProcessDto.getName())) { throw new ServiceException("é¨ä»¶åç§°ä¸è½ä¸ºç©º"); } long nameCount = this.count(Wrappers.<ProductProcess>lambdaQuery() .eq(ProductProcess::getName, productProcessDto.getName()) .ne(ProductProcess::getId, productProcessDto.getId())); if (nameCount > 0) { throw new ServiceException("é¨ä»¶åç§°å·²åå¨ï¼ä¸è½éå¤"); } if (ObjectUtils.isNotEmpty(productProcessDto.getNo())) { long noCount = this.count(Wrappers.<ProductProcess>lambdaQuery() .eq(ProductProcess::getNo, productProcessDto.getNo()) .ne(ProductProcess::getId, productProcessDto.getId())); if (noCount > 0) { throw new ServiceException("å·¥åºç¼å·å·²åå¨ï¼ä¸è½éå¤"); } productProcessList.forEach(productProcess -> { } ProductProcess productProcess = new ProductProcess(); BeanUtils.copyProperties(productProcessDto, productProcess); this.updateById(productProcess); } @Override @Transactional(rollbackFor = Exception.class) public void importData(MultipartFile file) { try { ExcelUtil<ProductProcess> util = new ExcelUtil<>(ProductProcess.class); List<ProductProcess> productProcessList = util.importExcel(file.getInputStream()); if (CollectionUtils.isEmpty(productProcessList)) { throw new ServiceException("模æ¿é误æå¯¼å ¥æ°æ®ä¸ºç©º"); } for (int i = 0; i < productProcessList.size(); i++) { ProductProcess productProcess = productProcessList.get(i); int rowNum = i + 2; if (ObjectUtils.isEmpty(productProcess)) { throw new RuntimeException("ä½¿ç¨æ¨¡æ¿è¿è¡å¯¼å ¥"); throw new ServiceException("第" + rowNum + "è¡æ°æ®ä¸ºç©ºï¼è¯·ä½¿ç¨æ£ç¡®ç模æ¿è¿è¡å¯¼å ¥"); } if (ObjectUtils.isEmpty(productProcess.getName())) { throw new RuntimeException("å·¥åºåç§°ä¸è½ä¸ºç©º"); throw new ServiceException("第" + rowNum + "è¡ï¼é¨ä»¶åç§°ä¸è½ä¸ºç©º"); } }); this.saveOrUpdateBatch(productProcessList); return AjaxResult.success(true); }catch (Exception e){ e.printStackTrace(); return AjaxResult.error(e.getMessage()); if (ObjectUtils.isEmpty(productProcess.getProductProcessType())) { throw new ServiceException("第" + rowNum + "è¡ï¼é¨ä»¶ã" + productProcess.getName() + "ãçç±»åä¸è½ä¸ºç©º"); } ProductProcessEnum enumByInfo = ProductProcessEnum.getEnumByInfo(productProcess.getProductProcessType()); if (ObjectUtils.isEmpty(enumByInfo)) { throw new ServiceException("第" + rowNum + "è¡ï¼é¨ä»¶ã" + productProcess.getName() + "ãçç±»åã" + productProcess.getProductProcessType() + "ãä¸åå¨ï¼è¯·å¡«åæ£ç¡®çç±»åï¼å å·¥ã宿¿å·è¯å¶ä½ã管路ç»å¯¹ãç½ä½è¿æ¥åè°è¯ãæµè¯æåãå ¶ä»"); }else { productProcess.setType(enumByInfo.getCode()); } } saveOrUpdateBatch(productProcessList); } catch (ServiceException e) { throw e; } catch (Exception e) { log.error("é¨ä»¶å¯¼å ¥å¼å¸¸:{}", e.getMessage(), e); throw new ServiceException("é¨ä»¶å¯¼å ¥å¼å¸¸ï¼" + e.getMessage()); } } @Override public String batchDelete(List<Integer> ids) { //æ¥è¯¢æ¯å¦ç产ä¸å·²ç»å¼ç¨äºè¿äºå·¥åº @Transactional(rollbackFor = Exception.class) public void batchDelete(List<Integer> ids) { // æ¥è¯¢æ¯å¦ç产ä¸å·²ç»å¼ç¨äºè¿äºå·¥åº List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getProcessId, ids)); List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids)); if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)){ throw new RuntimeException("该工åºå·²ç»è¢«ä½¿ç¨ï¼æ æ³å é¤"); if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)) { throw new ServiceException("该工åºå·²ç»è¢«ä½¿ç¨ï¼æ æ³å é¤"); } productProcessMapper.deleteBatchIds(ids); return null; } }