src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
@@ -9,6 +9,7 @@ import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.List; /** @@ -31,4 +32,6 @@ List<ProcurementPageDtoCopy> listCopy(); List<ProcurementPageDto> list(); BigDecimal getSumQuantity(@Param("productModelId") Long productModelId); } src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
@@ -7,6 +7,7 @@ import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.List; /** @@ -18,4 +19,7 @@ IPage<ProcurementRecordOutPageDto> listPage(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto); List<ProcurementRecordOutPageDto> list(); BigDecimal getSumQuantity(@Param("productModelId") Long productModelId); ProcurementRecordOut selectCode(@Param("format") String format); } src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
@@ -77,4 +77,8 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; private Integer type; private Long productModelId; } src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.ruoyi.procurementrecord.utils; import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; @Component @RequiredArgsConstructor public class StockUtils { private final ProcurementRecordOutMapper procurementRecordOutMapper; private final ProcurementRecordMapper procurementRecordMapper; // è·åååå ¥åºæ°é,åºåºæ°é,å©ä½åºå public Map<String, BigDecimal> getStockQuantity(Long productModelId) { // å ¥åºæ°é BigDecimal sumQuantity = procurementRecordMapper.getSumQuantity(productModelId); // åºåºæ°é BigDecimal outQuantity = procurementRecordOutMapper.getSumQuantity(productModelId); // å©ä½åºå BigDecimal stockQuantity = outQuantity.compareTo(sumQuantity) > 0 ? BigDecimal.ZERO : sumQuantity.subtract(outQuantity); Map<String, BigDecimal> stockMap = new HashMap<>(); stockMap.put("inboundNum", sumQuantity); stockMap.put("outboundNum", outQuantity); stockMap.put("stockQuantity", stockQuantity); return stockMap; } } src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.service.ProcessRouteItemService; import com.ruoyi.production.service.ProcessRouteService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Arrays; @RestController @RequestMapping("processRoute") @Api(tags = "å·¥èºè·¯çº¿") public class ProcessRouteController { @Autowired private ProcessRouteService processRouteService; @Autowired private ProcessRouteItemService processRouteItemService; @GetMapping("page") @ApiOperation("å页æ¥è¯¢") public R page(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) { return R.ok(processRouteService.pageProcessRouteDto(page, processRouteDto)); } @ApiOperation("æ°å¢å·¥èºè·¯çº¿") @PostMapping () public R add(@RequestBody ProcessRoute processRoute) { return R.ok(processRouteService.saveProcessRoute(processRoute)); } @ApiOperation("ä¿®æ¹å·¥èºè·¯çº¿") @PutMapping () public R update(@RequestBody ProcessRoute processRoute) { return R.ok(processRouteService.updateById(processRoute)); } @ApiOperation("å é¤å·¥èºè·¯çº¿") @DeleteMapping("/{ids}") public R delete(@PathVariable("ids") Long[] ids) { //å é¤å·¥èºè·¯çº¿è¯¦æ processRouteItemService.remove(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId,Arrays.asList(ids))); return R.ok(processRouteService.removeBatchByIds(Arrays.asList(ids))); } } src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.production.controller; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.service.ProcessRouteItemService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("processRouteItem") @Api(tags = "å·¥èºè·¯çº¿æç»") public class ProcessRouteItemController { @Autowired private ProcessRouteItemService processRouteItemService; @GetMapping("list") public R listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) { return R.ok(processRouteItemService.listProcessRouteItemDto(processRouteItemDto)); } @PostMapping () @ApiOperation("æ°å¢ä¿®æ¹") public R addOrUpdate(@RequestBody ProcessRouteItem processRouteItem) { return R.ok(processRouteItemService.saveOrUpdate(processRouteItem)); } @PostMapping ("/sort") @ApiOperation("æåº") public R sort(@RequestBody ProcessRouteItem processRouteItem) { return R.ok(processRouteItemService.sort(processRouteItem)); } @ApiOperation("å é¤å·¥èºè·¯çº¿æç»") @DeleteMapping("/batchDelete/{id}") @Log(title = "å é¤", businessType = BusinessType.DELETE) public AjaxResult batchDelete(@PathVariable("id") Long id) { return AjaxResult.success(processRouteItemService.batchDelete(id)); } } src/main/java/com/ruoyi/production/controller/ProductBomController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,84 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductBomDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductBom; import com.ruoyi.production.service.ProcessRouteService; import com.ruoyi.production.service.ProductBomService; 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 java.util.List; /** * <p> * BOM主表 å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 09:59:27 */ @RestController @RequestMapping("/productBom") public class ProductBomController { @Autowired private ProductBomService productBomService; @Autowired private ProcessRouteService processRouteService; @GetMapping("/listPage") @Log(title = "BOM-å页æ¥è¯¢", businessType = BusinessType.OTHER) @ApiOperation("BOM-å页æ¥è¯¢") public AjaxResult listPage(Page page, ProductBomDto productBomDto) { IPage<ProductBomDto> listPage = productBomService.listPage(page, productBomDto); return AjaxResult.success(listPage); } @ApiModelProperty("æ°å¢BOM") @PostMapping("/add") @Log(title = "æ°å¢", businessType = BusinessType.INSERT) public AjaxResult add( @RequestBody ProductBom productBom) { return productBomService.add(productBom); } @ApiOperation("æ´æ°BOM") @Log(title = "ä¿®æ¹", businessType = BusinessType.UPDATE) @PutMapping("/update") public AjaxResult update(@RequestBody ProductBom productBom) { return AjaxResult.success(productBomService.updateById(productBom)); } @ApiOperation("å é¤BOM") @DeleteMapping("/batchDelete") @Log(title = "å é¤", businessType = BusinessType.DELETE) public AjaxResult batchDelete(@RequestBody List<Integer> ids) { List<ProcessRoute> list = processRouteService.list(Wrappers.<ProcessRoute>lambdaQuery().in(ProcessRoute::getBomId, ids)); if (list.size()>0){ return AjaxResult.error("该BOMå·²ç»åå¨å¯¹åºçå·¥èºè·¯çº¿,æ æ³è¿è¡å é¤"); } if(CollectionUtils.isEmpty(ids)){ return AjaxResult.error("è¯·éæ©è³å°ä¸æ¡æ°æ®"); } return AjaxResult.success(productBomService.removeBatchByIds(ids)); } @GetMapping("/getByModel") @Log(title = "BOM-æ ¹æ®éæ©çè§æ ¼åå·idæ¥è¯¢åå¨çbom", businessType = BusinessType.OTHER) @ApiOperation("BOM-æ ¹æ®éæ©çè§æ ¼åå·idæ¥è¯¢åå¨çbom") public AjaxResult getByModel(Long productModelId) { List<ProductBom> productBoms = productBomService.list(Wrappers.<ProductBom>lambdaQuery().eq(ProductBom::getProductModelId, productModelId)); return AjaxResult.success(productBoms); } } src/main/java/com/ruoyi/production/controller/ProductOrderController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.service.ProductOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; @RequestMapping("productOrder") @RestController @Api(tags = "ç产订å") public class ProductOrderController { @Autowired private ProductOrderService productOrderService; @ApiOperation("å页æ¥è¯¢") @GetMapping("page") public R page(ProductOrderDto productOrder, Page page) { return R.ok(productOrderService.pageProductOrder(page, productOrder)); } @ApiOperation("ç»å®å·¥èºè·¯çº¿") @PostMapping("/bindingRoute") public R bindingRoute(@RequestBody ProductOrder productOrder) { return R.ok(productOrderService.bindingRoute(productOrder)); } @ApiOperation("æ¥è¯¢è§æ ¼åå·å¯¹åºçå·¥èºè·¯çº¿") @GetMapping("/listProcessRoute") public R listProcessRoute(Long productModelId) { return R.ok(productOrderService.listProcessRoute(productModelId)); } /** * 导åºç产订å */ @Log(title = "ç产订å", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ProductOrderDto productOrderDto) { List<ProductOrderDto> list; list = productOrderService.pageProductOrder(new Page<>(1, -1), productOrderDto).getRecords(); ExcelUtil<ProductOrderDto> util = new ExcelUtil<ProductOrderDto>(ProductOrderDto.class); util.exportExcel(response, list, "çäº§è®¢åæ°æ®"); } @ApiOperation("æ¥è¯¢ç产订å对åºçBOM") @GetMapping("/listProcessBom") public R listProcessBom(Long orderId) { return R.ok(productOrderService.listProcessBom(orderId)); } } src/main/java/com/ruoyi/production/controller/ProductProcessController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; 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.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.service.impl.ProductProcessServiceImpl; 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; import javax.servlet.http.HttpServletResponse; import java.util.List; @RestController @Api(tags = "å·¥åº") @RequestMapping("/productProcess") public class ProductProcessController extends BaseController { @Autowired private ProductProcessServiceImpl productProcessService; @GetMapping("/listPage") @Log(title = "å·¥åº-å页æ¥è¯¢", businessType = BusinessType.OTHER) @ApiOperation("å·¥åº-å页æ¥è¯¢") public AjaxResult listPage(Page page, ProductProcessDto productProcessDto) { IPage<ProductProcessDto> listPage = productProcessService.listPage(page, productProcessDto); return AjaxResult.success(listPage); } @ApiModelProperty("æ°å¢å·¥åº") @PostMapping() @Log(title = "æ°å¢", businessType = BusinessType.INSERT) public AjaxResult add( @RequestBody ProductProcessDto productProcessDto) { return productProcessService.add(productProcessDto); } @ApiOperation("æ´æ°å·¥åº") @Log(title = "ä¿®æ¹", businessType = BusinessType.UPDATE) @PutMapping("/update") public AjaxResult update(@RequestBody ProductProcess productProcess) { return AjaxResult.success(productProcessService.updateById(productProcess)); } @ApiOperation("å é¤å·¥åº") @DeleteMapping("/batchDelete") @Log(title = "å é¤", businessType = BusinessType.DELETE) public AjaxResult batchDelete(@RequestBody List<Integer> ids) { if(CollectionUtils.isEmpty(ids)){ return AjaxResult.error("è¯·éæ©è³å°ä¸æ¡æ°æ®"); } return AjaxResult.success(productProcessService.removeBatchByIds(ids)); } @ApiOperation("æ¥è¯¢ææå·¥åº") @GetMapping("/list") 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); } @PostMapping("/downloadTemplate") @Log(title = "å·¥åº-ä¸è½½æ¨¡æ¿", businessType = BusinessType.EXPORT) public void downloadTemplate(HttpServletResponse response) { ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class); util.importTemplateExcel(response, "å·¥åºæ¨¡æ¿"); } } src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.production.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @RestController @RequestMapping("/productProcessRoute") public class ProductProcessRouteController { } src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package com.ruoyi.production.controller; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.pojo.ProductProcessRouteItem; import com.ruoyi.production.service.ProductProcessRouteItemService; import com.ruoyi.production.service.ProductProcessRouteService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; @RequestMapping("/productProcessRoute") @RestController @AllArgsConstructor @Api(tags = "ç产工èºè·¯çº¿") public class ProductProcessRouteItemController { private ProductProcessRouteItemService productProcessRouteItemService; private ProductProcessRouteService productProcessRouteService; @GetMapping("list") @ApiOperation("æ ¹æ®Idæ¥è¯¢å·¥èºè·¯çº¿å表") public R list(Long orderId) { return R.ok(productProcessRouteItemService.listItem(orderId)); } @GetMapping("listMain") @ApiOperation("æ ¹æ®Idæ¥è¯¢å·¥èºè·¯çº¿ä¸»è¡¨") public R listMain(Long orderId) { return R.ok(productProcessRouteService.listMain(orderId)); } @PostMapping("/addRouteItem") @ApiOperation("æ°å¢ç产订åçå·¥èºè·¯çº¿è¯¦æ ") public R addRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) { return productProcessRouteItemService.addRouteItem(productProcessRouteItem); } @PostMapping("/updateRouteItem") @ApiOperation("ä¿®æ¹ç产订åçå·¥èºè·¯çº¿è¯¦æ ") public R updateRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) { return R.ok(productProcessRouteItemService.updateById(productProcessRouteItem)); } @DeleteMapping("/deleteRouteItem/{id}") @ApiOperation("å é¤ç产工èºè·¯çº¿") public R deleteRouteItem(@PathVariable("id") Long id) { return productProcessRouteItemService.deleteRouteItem(id); } @PostMapping ("/sortRouteItem") @ApiOperation("æåº") public R sortRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) { return R.ok(productProcessRouteItemService.sortRouteItem(productProcessRouteItem)); } } src/main/java/com/ruoyi/production/controller/ProductStructureController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package com.ruoyi.production.controller; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.service.ProductStructureService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RequestMapping("productStructure") @RestController @Api(tags = "BOM") public class ProductStructureController { @Autowired private ProductStructureService productStructureService; @ApiOperation("æ°å¢BOM") @PostMapping() public R addOrUpdate(@RequestBody ProductStructureDto productStructureDto){ return R.ok(productStructureService.addProductStructureDto(productStructureDto)); } @ApiOperation("BOMæ¥ç详æ ") @GetMapping("/listBybomId/{bomId}") public R listBybomId( @PathVariable("bomId") Long bomId){ return R.ok(productStructureService.listBybomId(bomId)); } } src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductWorkOrderDto; import com.ruoyi.production.service.ProductWorkOrderService; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; @RestController @AllArgsConstructor @RequestMapping("/productWorkOrder") public class ProductWorkOrderController { private ProductWorkOrderService productWorkOrderservice; /** * 产åå·¥åå®ä½ç±»å页æ¥è¯¢ */ @ApiOperation("产åå·¥åå®ä½ç±»å页æ¥è¯¢") @GetMapping("/page") public R page(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) { return R.ok(productWorkOrderservice.listPage(page, productWorkOrder)); } /** * 产åå·¥åæ´æ° */ @ApiOperation("产å工忴æ°") @PostMapping ("/updateProductWorkOrder") public R updateProductWorkOrder(@RequestBody ProductWorkOrderDto productWorkOrderDto) { return R.ok(productWorkOrderservice.updateProductWorkOrder(productWorkOrderDto)); } } src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.service.ProductionProductInputService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("productionProductInput") @RestController @Api(value = "ç产æå ¥") public class ProductionProductInputController { @Autowired private ProductionProductInputService productionProductInputService; @GetMapping("listPage") public R page(Page<ProductionProductInputDto> page, ProductionProductInputDto productionProductInputDto) { return R.ok(productionProductInputService.listPageProductionProductInputDto(page, productionProductInputDto)); } } src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.service.ProductionProductMainService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @RequestMapping("productionProductMain") @RestController @Api(value = "ç产æ¥å·¥") public class ProductionProductMainController { @Autowired private ProductionProductMainService productionProductMainService; /** * æ¥å·¥æ¥è¯¢ * @param page * @param productionProductMainDto * @return */ @GetMapping("listPage") public R page(Page<ProductionProductMainDto> page, ProductionProductMainDto productionProductMainDto) { return R.ok(productionProductMainService.listPageProductionProductMainDto(page, productionProductMainDto)); } /** * æ¥å·¥æ°å¢æ´æ° * @param productionProductMainDto * @return */ @PostMapping("addProductMain") public R addProductMain(@RequestBody ProductionProductMainDto productionProductMainDto) { return R.ok(productionProductMainService.addProductMain(productionProductMainDto)); } @ApiOperation("å 餿¥å·¥") @DeleteMapping("/delete") @Transactional(rollbackFor = Exception.class) public R delete(@RequestBody ProductionProductMainDto productionProductMainDto) { return R.ok(productionProductMainService.removeProductMain(productionProductMainDto)); } } src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.service.ProductionProductOutputService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("productionProductOutput") @RestController @Api(value = "ç产产åº") public class ProductionProductOutputController { @Autowired private ProductionProductOutputService productionProductOutputService; @GetMapping("listPage") public R page(Page<ProductionProductOutputDto> page, ProductionProductOutputDto productionProductOutputDto) { return R.ok(productionProductOutputService.listPageProductionProductOutputDto(page, productionProductOutputDto)); } } src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProcessRoute; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ProcessRouteDto extends ProcessRoute { private Long productId; private String productName; @ApiModelProperty("è§æ ¼") private String model; private String bomNo; } src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProcessRouteItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ProcessRouteItemDto extends ProcessRouteItem { @ApiModelProperty(value = "å·¥åºåç§°") private String processName; @ApiModelProperty(value = "å·¥èºè·¯çº¿åç§°") private String routeName; @ApiModelProperty(value = "çäº§çæº") private String speculativeTradingName; @ApiModelProperty(value = "产ååç§°") private String productName; @ApiModelProperty(value = "åä½") private String unit; private Long productId; private String model; } src/main/java/com/ruoyi/production/dto/ProductBomDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductBom; import lombok.Data; //å页æ¥è¯¢åæ¾æ°æ® @Data public class ProductBomDto extends ProductBom { //产ååç§° private String productName; //产åè§æ ¼åå· private String productModelName; } src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.ruoyi.production.dto; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.production.pojo.ProductOrder; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ExcelIgnoreUnannotated public class ProductOrderDto extends ProductOrder { @ApiModelProperty(value = "éå®ååå·") @Excel(name = "éå®ååå·") private String salesContractNo; @ApiModelProperty(value = "项ç®å") @Excel(name = "项ç®å") private String projectName; @ApiModelProperty(value = "客æ·åç§°") @Excel(name = "客æ·åç§°") private String customerName; @ApiModelProperty(value = "产ååç§°") @Excel(name = "产ååç§°") private String productCategory; @ApiModelProperty(value = "è§æ ¼") @Excel(name = "è§æ ¼") private String specificationModel; @ApiModelProperty(value = "å·¥èºè·¯çº¿ç¼å·") @Excel(name = "å·¥èºè·¯çº¿ç¼å·") private String processRouteCode; @ApiModelProperty(value = "å®æç¶æ") @Excel(name = "å®æç¶æ") private BigDecimal completionStatus; @ApiModelProperty(value = "BOMç¼å·") @Excel(name = "BOMç¼å·") private String bomNo; } src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductProcess; import io.swagger.annotations.ApiModel; import lombok.Data; @Data @ApiModel public class ProductProcessDto extends ProductProcess { } src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductProcessRouteItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ProductProcessRouteItemDto extends ProductProcessRouteItem { @ApiModelProperty(value = "å·¥åºåç§°") private String processName; @ApiModelProperty(value = "产ååç§°") private String productCategory; @ApiModelProperty(value = "åä½") private String unit; private Long productId; private String productName; private String model; } src/main/java/com/ruoyi/production/dto/ProductStructureDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductStructure; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class ProductStructureDto extends ProductStructure { @ApiModelProperty(value = "å·¥èºåç§°") private String processName; @ApiModelProperty(value = "产ååç§°") private String productName; @ApiModelProperty(value = "产åid") private Long productId; private String model; private List<ProductStructure> productStructureList; } src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductWorkOrder; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; @EqualsAndHashCode(callSuper = true) @Data public class ProductWorkOrderDto extends ProductWorkOrder { //产ååç§° @ApiModelProperty(value = "产ååç§°") private String productName; //è§æ ¼ @ApiModelProperty(value = "è§æ ¼") private String model; //å·¥åº @ApiModelProperty(value = "å·¥åº") private String processName; //åä½ @ApiModelProperty(value = "åä½") private String unit; //ç产订åå· @ApiModelProperty(value = "ç产订åå·") private String productOrderNpsNo; @ApiModelProperty(value = "宿è¿åº¦") private BigDecimal completionStatus; } src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductInput; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ProductionProductInputDto extends ProductionProductInput { @ApiModelProperty(value = "æ¥å·¥åå·") private String productNo; @ApiModelProperty(value = "产ååå·") private String model; } src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductMain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class ProductionProductMainDto extends ProductionProductMain { @ApiModelProperty(value = "å·¥åç¼å·") private String workOrderNo; @ApiModelProperty(value = "å·¥åç¶æ") private String workOrderStatus; @ApiModelProperty(value = "æ¥å·¥äººåæµç§°") private String nickName; @ApiModelProperty(value = "æ¥å·¥æ°é") private BigDecimal quantity; @ApiModelProperty(value = "æ¯å¦æ¥å·¥") private boolean reportWork; @ApiModelProperty(value = "æ¥å·¥id") private Long productMainId; } src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductOutput; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ProductionProductOutputDto extends ProductionProductOutput { @ApiModelProperty(value = "æ¥å·¥åå·") private String productNo; @ApiModelProperty(value = "产ååå·") private String model; } src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.pojo.ProcessRouteItem; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProcessRouteItemMapper extends BaseMapper<ProcessRouteItem> { List<ProcessRouteItemDto> listProcessRouteItemDto(@Param("c") ProcessRouteItemDto processRouteItemDto); } src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProcessRoute; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface ProcessRouteMapper extends BaseMapper<ProcessRoute> { IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page,@Param("c") ProcessRouteDto processRouteDto); } src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProductBomDto; import com.ruoyi.production.pojo.ProductBom; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * <p> * BOM主表 Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 09:59:27 */ @Mapper public interface ProductBomMapper extends BaseMapper<ProductBom> { IPage<ProductBomDto> listPage(Page page, @Param("c") ProductBomDto productBomDto); ProductBomDto getById(@Param("bomId") Long bomId); } src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductOrder; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductOrderMapper extends BaseMapper<ProductOrder> { IPage<ProductOrderDto> pageProductOrder(Page page, @Param("c") ProductOrderDto productOrder); /** * æ ¹æ®è®¢åIDæ¥è¯¢å·¥åæ¥å·¥ */ ProductOrderDto productMainByOrderId(@Param("c") ProductOrder productOrder); List<ProcessRoute> listProcessRoute(@Param("productModelId") Long productModelId); List<ProductStructureDto> listProcessBom(@Param("orderId") Long orderId); } src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductProcess; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface ProductProcessMapper extends BaseMapper<ProductProcess> { IPage<ProductProcessDto> listPage(Page page,@Param("productProcessDto") ProductProcessDto productProcessDto); } src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.pojo.ProductProcessRouteItem; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductProcessRouteItemMapper extends BaseMapper<ProductProcessRouteItem> { List<ProductProcessRouteItemDto> listItem(@Param("orderId") Long orderId); } src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * <p> * Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @Mapper public interface ProductProcessRouteMapper extends BaseMapper<ProductProcessRoute> { ProcessRouteDto listMain(@Param("orderId") Long orderId); } src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProductStructure; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductStructureMapper extends BaseMapper<ProductStructure> { List<ProductStructureDto> listBybomId(@Param("bomId") Long bomId); List<ProductStructureDto> listByproductModelId(@Param("productModelId") Long productModelId); } src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProductWorkOrderDto; import com.ruoyi.production.pojo.ProductWorkOrder; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @Mapper public interface ProductWorkOrderMapper extends BaseMapper<ProductWorkOrder> { IPage<ProductWorkOrderDto> pageProductWorkOrder(Page<ProductWorkOrderDto> page, @Param("c") ProductWorkOrderDto productWorkOrder); int updatePlanQuantity(Map<String, Object> params); /** * 忻工åè®¡åæ°éï¼ä»production_product_outputåquantityå åplan_quantity * @param productMainId * @return */ int rollbackPlanQuantity(@Param("productMainId") Long productMainId); List<ProductWorkOrderDto> selectProductWorkOrderDtoList(); } src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.pojo.ProductionProductInput; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductionProductInputMapper extends BaseMapper<ProductionProductInput> { IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, @Param("c") ProductionProductInputDto productionProductInputDto); /** * æ ¹æ®ç产主表IDæ¹éå é¤æå ¥è¡¨æ°æ® */ int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds); } src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.pojo.ProductionProductMain; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductionProductMainMapper extends BaseMapper<ProductionProductMain> { IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, @Param("c") ProductionProductMainDto productionProductMainDto); /** * æ ¹æ®å·¥åIDæ¹éå é¤çäº§ä¸»è¡¨æ°æ® */ int deleteByWorkOrderIds(@Param("workOrderIds") List<Long> workOrderIds); } src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.production.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.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.pojo.ProductionProductOutput; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProductionProductOutputMapper extends BaseMapper<ProductionProductOutput> { IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, @Param("c") ProductionProductOutputDto productionProductOutputDto); /** * æ ¹æ®ç产主表IDæ¹éå é¤äº§åºè¡¨æ°æ® */ int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds); } src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @TableName("process_route") @Data @ApiModel(value = "processRoute", description = "å·¥èºè·¯çº¿ä¸»è¡¨") public class ProcessRoute { @ApiModelProperty(value = "åºå·") private Long id; @ApiModelProperty(value = "产åID") //product_model private Long productModelId; @ApiModelProperty(value = "æè¿°") private String description; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "å·¥èºè·¯çº¿ç¼ç ") private String processRouteCode; @ApiModelProperty(value = "BOMçID") private Long bomId; } src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("process_route_item") @ApiModel(value = "processRouteItem", description = "å·¥èºè·¯çº¿å表") public class ProcessRouteItem { @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "å·¥èºè·¯çº¿id") private Long routeId; @ApiModelProperty(value = "å·¥åºid") private Long processId; @ApiModelProperty(value ="产åid") private Long productModelId; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "å建æ¶é´") private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value ="æå¨æåº") private Integer dragSort; } src/main/java/com/ruoyi/production/pojo/ProductBom.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * BOM主表 * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 09:59:27 */ @Getter @Setter @TableName("product_bom") @ApiModel(value = "ProductBom对象", description = "BOM主表") public class ProductBom implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("bomç¼å·") private String bomNo; @ApiModelProperty("产åè§æ ¼id") private Long productModelId; @ApiModelProperty("夿³¨") private String remark; @ApiModelProperty("çæ¬å·") private String version; @ApiModelProperty("å建æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty("æ´æ°æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("å建è ") @TableField(fill = FieldFill.INSERT) private Long createUser; @ApiModelProperty("æ´æ°è ") @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; @ApiModelProperty("ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/pojo/ProductOrder.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,99 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @TableName("product_order") public class ProductOrder implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * éå®å°è´¦id */ @ApiModelProperty(value = "éå®å°è´¦id") private Long salesLedgerId; /** * éå®å°è´¦äº§åid(sales_ledger_product) */ @ApiModelProperty(value = "éå®å°è´¦äº§åid") private Long productModelId; /** * å·¥èºè·¯çº¿id */ @ApiModelProperty(value = "å·¥èºè·¯çº¿id") private Long routeId; /** * ç产订åå· */ @ApiModelProperty(value = "ç产订åå·") @Excel(name = "ç产订åå·") private String npsNo; /** * ç§æ·id */ @ApiModelProperty(value = "ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; //å建æ¶é´ @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "å建æ¶é´") private LocalDateTime createTime; //ä¿®æ¹æ¶é´ @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** * éæ±æ°é */ @ApiModelProperty(value = "éæ±æ°é") @Excel(name = "éæ±æ°é") private BigDecimal quantity; /** * 宿æ°é */ @ApiModelProperty(value = "宿æ°é") @Excel(name = "宿æ°é") private BigDecimal completeQuantity; @Excel(name = "å¼å§æ¶é´") @ApiModelProperty(value = "å¼å§æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; @ApiModelProperty(value = "ç»ææ¶é´") @Excel(name = "ç»ææ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; } src/main/java/com/ruoyi/production/pojo/ProductProcess.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,74 @@ package com.ruoyi.production.pojo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @TableName("product_process") @Data @ExcelIgnoreUnannotated @ApiModel(value = "productProcess", description = "å·¥åºè¡¨") public class ProductProcess implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * å·¥åºåç§° */ @Excel(name = "å·¥åºåç§°") private String name; /** * å·¥åºç¼å· */ @Excel(name = "å·¥åºç¼å·") private String no; /** * 夿³¨ */ @Excel(name = "夿³¨") private String remark; /** * å·¥èµå®é¢ */ @Excel(name = "å·¥èµå®é¢") private BigDecimal salaryQuota; /** * å建æ¶é´ */ @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * ä¿®æ¹æ¶é´ */ @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** * ç§æ·ID */ @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @Getter @Setter @TableName("product_process_route") @ApiModel(value = "ProductProcessRoute对象", description = "") public class ProductProcessRoute implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("产åid") //product_model private Long productModelId; @ApiModelProperty("æè¿°") private String description; @ApiModelProperty("ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("å½å ¥æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty("æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("å ³èbomçid") private Long bomId; @ApiModelProperty("å·¥èºè·¯çº¿ç¼ç ") private String processRouteCode; @ApiModelProperty("ç产订åçid") private Long productOrderId; } src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("product_process_route_item") public class ProductProcessRouteItem { @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "ç产订åid(product_order_id)") private Long productOrderId; @ApiModelProperty(value = "ç产订åçå·¥èºè·¯çº¿id(product_process_route)") private Long productRouteId; @ApiModelProperty(value = "å·¥åºid") private Long processId; @ApiModelProperty(value ="产åid") private Long productModelId; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "å建æ¶é´") private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value ="æå¨æåº") private Integer dragSort; } src/main/java/com/ruoyi/production/pojo/ProductStructure.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import lombok.Data; import java.math.BigDecimal; @TableName("product_structure") @Data @ApiModel(value = "ProductStructure", description = "BOMå表") public class ProductStructure { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 产ååç§° */ private Long productModelId; /** * å·¥åºid */ private Long processId; /** * åä½äº§åºéè¦æ°é */ private BigDecimal unitQuantity; /** * éæ±æ°é */ private BigDecimal demandedQuantity; /** * åä½ */ private String unit; /** * ç§æ·ID */ @TableField(fill = FieldFill.INSERT) private Long tenantId; /** * å ³èBOMid */ private Long bomId; } src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,124 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; /** * 产åå·¥åå®ä½ç±» * å¯¹åºæ°æ®åºè¡¨ï¼product_work_order */ @Data @TableName("product_work_order") public class ProductWorkOrder implements Serializable { private static final long serialVersionUID = 1L; /** * 主é®id */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * å·¥èºè·¯çº¿é¡¹ç®id */ @ApiModelProperty(value = "å·¥èºè·¯çº¿é¡¹ç®id") private Long productProcessRouteItemId; /** * ç产订åid */ @ApiModelProperty(value = "ç产订åid") private Long productOrderId; /** * å建æ¶é´ */ @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * ä¿®æ¹æ¶é´ */ @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** * å·¥åç¼å· */ @ApiModelProperty(value = "å·¥åç¼å·") private String workOrderNo; /** * ç¶æ 1 å¾ ç¡®è®¤ 2 å¾ ç产 3çäº§ä¸ 4已宿 */ @ApiModelProperty(value = "ç¶æ 1 å¾ ç¡®è®¤ 2 å¾ ç产 3çäº§ä¸ 4已宿") private Integer status; /** * ç§æ·id */ @ApiModelProperty(value = "ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; /** * 计åå¼å§æ¶é´ */ @ApiModelProperty(value = "计åå¼å§æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planStartTime; /** * 计åç»ææ¶é´ */ @ApiModelProperty(value = "计åç»ææ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planEndTime; /** * å®é å¼å§æ¶é´ */ @ApiModelProperty(value = "å®é å¼å§æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate actualStartTime; /** * å®é ç»ææ¶é´ */ @ApiModelProperty(value = "å®é ç»ææ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate actualEndTime; /** * éæ±é */ @ApiModelProperty(value = "éæ±æ°é") private BigDecimal planQuantity; /** * 宿æ°é */ @ApiModelProperty(value = "宿æ°é") private BigDecimal completeQuantity; } src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @TableName("production_product_input") public class ProductionProductInput { @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "æ¥å·¥id") private Long productMainId; @ApiModelProperty(value = "产åid") private Long productModelId; @ApiModelProperty(value = "æ°é") private BigDecimal quantity; @ApiModelProperty(value = "å建æ¶é´") private LocalDateTime createTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("production_product_main") public class ProductionProductMain { @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "æ¥å·¥åå·") private String productNo; @ApiModelProperty(value = "æ¥å·¥äººåid") private Long userId; @ApiModelProperty(value = "æ¥å·¥äººå") private String userName; @ApiModelProperty(value = "ç产项ç®id") private Long productProcessRouteItemId; @ApiModelProperty(value = "å·¥åid") private Long workOrderId; @ApiModelProperty(value = "æ¥å·¥ç¶æ") private Integer status; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @TableName("production_product_output") public class ProductionProductOutput { @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "æ¥å·¥id") private Long productMainId; @ApiModelProperty(value = "产åid") private Long productModelId; @ApiModelProperty(value = "æ°é") private BigDecimal quantity; @ApiModelProperty(value = "å建æ¶é´") private LocalDateTime createTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.pojo.ProcessRouteItem; import java.util.List; public interface ProcessRouteItemService extends IService<ProcessRouteItem> { List<ProcessRouteItemDto> listProcessRouteItemDto( ProcessRouteItemDto processRouteItemDto); int sort(ProcessRouteItem processRouteItem); String batchDelete(Long id); } src/main/java/com/ruoyi/production/service/ProcessRouteService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.production.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.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProcessRoute; public interface ProcessRouteService extends IService<ProcessRoute> { IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto); Integer saveProcessRoute(ProcessRoute processRoute); } src/main/java/com/ruoyi/production/service/ProductBomService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.production.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.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductBomDto; import com.ruoyi.production.pojo.ProductBom; /** * <p> * BOM主表 æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 09:59:27 */ public interface ProductBomService extends IService<ProductBom> { IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto); AjaxResult add(ProductBom productBom); } src/main/java/com/ruoyi/production/service/ProductOrderService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.production.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.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductOrder; import java.util.List; public interface ProductOrderService extends IService<ProductOrder> { IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder); int bindingRoute(ProductOrder productOrder); List<ProcessRoute> listProcessRoute(Long productModelId); List<ProductStructureDto> listProcessBom(Long orderId); } src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.pojo.ProductProcessRouteItem; import java.util.List; public interface ProductProcessRouteItemService extends IService<ProductProcessRouteItem> { List<ProductProcessRouteItemDto> listItem(Long orderId); R deleteRouteItem(Long id); R addRouteItem(ProductProcessRouteItem productProcessRouteItem); int sortRouteItem(ProductProcessRouteItem productProcessRouteItem); } src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; /** * <p> * æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ public interface ProductProcessRouteService extends IService<ProductProcessRoute> { ProcessRouteDto listMain(Long orderId); } src/main/java/com/ruoyi/production/service/ProductProcessService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.production.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.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductProcess; import org.springframework.web.multipart.MultipartFile; /** * @author :yys * @date : 2025/7/21 14:39 */ public interface ProductProcessService extends IService<ProductProcess> { IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto); AjaxResult add(ProductProcessDto productProcessDto); AjaxResult importData(MultipartFile file); } src/main/java/com/ruoyi/production/service/ProductStructureService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProductStructure; import java.util.List; public interface ProductStructureService extends IService<ProductStructure> { Boolean addProductStructureDto(ProductStructureDto productStructureDto); List<ProductStructureDto> listBybomId(Long bomId); } src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.production.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.production.dto.ProductWorkOrderDto; import com.ruoyi.production.pojo.ProductWorkOrder; public interface ProductWorkOrderService extends IService<ProductWorkOrder>{ IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder); int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto); } src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.ruoyi.production.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.production.dto.ProductionProductInputDto; import com.ruoyi.production.pojo.ProductionProductInput; public interface ProductionProductInputService extends IService<ProductionProductInput> { IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto); } src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.production.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.production.dto.ProductionProductMainDto; import com.ruoyi.production.pojo.ProductionProductMain; public interface ProductionProductMainService extends IService<ProductionProductMain> { IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto); Boolean addProductMain(ProductionProductMainDto productionProductMainDto); Boolean removeProductMain(ProductionProductMainDto productionProductMainDto); } src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.ruoyi.production.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.production.dto.ProductionProductOutputDto; import com.ruoyi.production.pojo.ProductionProductOutput; public interface ProductionProductOutputService extends IService<ProductionProductOutput> { IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto); } src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,88 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.mapper.ProcessRouteItemMapper; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.service.ProcessRouteItemService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class ProcessRouteItemServiceImpl extends ServiceImpl<ProcessRouteItemMapper, ProcessRouteItem> implements ProcessRouteItemService { @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Override public List<ProcessRouteItemDto> listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) { return processRouteItemMapper.listProcessRouteItemDto( processRouteItemDto); } //æåº @Override public int sort(ProcessRouteItem processRouteItem) { //æ¥è¯¢è¢«æ¹å¨çè¿æ¡æ°æ® ProcessRouteItem oldProcessRouteItem = processRouteItemMapper.selectById(processRouteItem.getId()); //æ¥è¯¢è¯¥å·¥èºè·¯çº¿çææå·¥åºå¹¶æç §é¡ºåºæåº List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery() .eq(ProcessRouteItem::getRouteId, oldProcessRouteItem.getRouteId()) .orderByAsc(ProcessRouteItem::getDragSort)); // è·åç®æ ä½ç½®ï¼ç§»å¨å°ç¬¬å 个ä¹åï¼ Integer targetPosition = processRouteItem.getDragSort(); if (targetPosition != null && targetPosition >= 0) { // ç§»å¨å ç´ å°æ°çä½ç½® processRouteItems.remove(oldProcessRouteItem); processRouteItems.add(targetPosition-1, oldProcessRouteItem); // æ´æ°ææåå½±åçæåºå段 for (int i = 0; i < processRouteItems.size(); i++) { ProcessRouteItem item = processRouteItems.get(i); if (!item.getId().equals(oldProcessRouteItem.getId())) { // æ£æ¥æ¯å¦éè¦æ´æ°æåºå¼ if (item.getDragSort() != i+1) { item.setDragSort(i+1); processRouteItemMapper.updateById(item); } } else { // æ´æ°åè®°å½çæ°æåºä½ç½® oldProcessRouteItem.setDragSort(targetPosition); processRouteItemMapper.updateById(oldProcessRouteItem); } } return 1; } return 0; } @Override public String batchDelete(Long id) { // æ¥è¯¢è¦å é¤çæ°æ® ProcessRouteItem deleteProcessRouteItem = processRouteItemMapper.selectById(id); if (deleteProcessRouteItem == null) { return "å é¤å¤±è´¥ï¼æªæ¾å°å¯¹åºæ°æ®"; } Long routeId = deleteProcessRouteItem.getRouteId(); // å 餿宿°æ® processRouteItemMapper.deleteById(id); // æ¥è¯¢è¯¥å·¥èºè·¯çº¿çææå·¥åºå¹¶æç §é¡ºåºæåº List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery() .eq(ProcessRouteItem::getRouteId, routeId) .orderByAsc(ProcessRouteItem::getDragSort)); // éæ°è®¾ç½®æåºå¼ï¼ä½¿åºå·è¿ç» for (int i = 0; i < processRouteItems.size(); i++) { ProcessRouteItem item = processRouteItems.get(i); if (!item.getDragSort().equals(i+1)) { item.setDragSort(i+1); processRouteItemMapper.updateById(item); } } return "å 餿å"; } } src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.mapper.ProcessRouteMapper; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.service.ProcessRouteService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @Service @AllArgsConstructor @Slf4j public class ProcessRouteServiceImpl extends ServiceImpl<ProcessRouteMapper, ProcessRoute> implements ProcessRouteService { @Autowired private ProcessRouteMapper processRouteMapper; @Override public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) { return processRouteMapper.pageProcessRouteDto(page, processRouteDto); } @Override public Integer saveProcessRoute(ProcessRoute processRoute) { this.save(processRoute); String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String idStr = String.format("%06d", processRoute.getId()); String newProductCode = "GYLX" + dateStr + idStr; // æ´æ°æ°æ®åºä¸çproductCode processRoute.setProcessRouteCode(newProductCode); return processRouteMapper.updateById(processRoute); } } src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductBomDto; import com.ruoyi.production.mapper.ProductBomMapper; import com.ruoyi.production.pojo.ProductBom; import com.ruoyi.production.service.ProductBomService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * BOM主表 æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 09:59:27 */ @Service public class ProductBomServiceImpl extends ServiceImpl<ProductBomMapper, ProductBom> implements ProductBomService { @Autowired private ProductBomMapper productBomMapper; @Override public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) { return productBomMapper.listPage(page,productBomDto); } @Override public AjaxResult add(ProductBom productBom) { boolean save = productBomMapper.insert(productBom) > 0; if (save) { // æ ¹æ®idçænoåæ®µï¼GX + 8使°åï¼ä¸è¶³8ä½åé¢è¡¥0ï¼ String no = "BM." + String.format("%05d", productBom.getId()); productBom.setBomNo(no); productBomMapper.updateById(productBom); return AjaxResult.success(); } return AjaxResult.error(); } } src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,109 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.List; @Service public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, ProductOrder> implements ProductOrderService { @Autowired private ProductOrderMapper productOrderMapper; @Autowired private ProcessRouteMapper processRouteMapper; @Autowired private ProductProcessRouteMapper productProcessRouteMapper; @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; @Autowired private ProductWorkOrderMapper productWorkOrderMapper; @Override public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) { return productOrderMapper.pageProductOrder(page, productOrder); } @Override public int bindingRoute(ProductOrder productOrder) { //æ°å¢ç产订åä¸çå·¥èºè·¯çº¿ä¸»è¡¨ ProcessRoute processRoute = processRouteMapper.selectById(productOrder.getRouteId()); ProductProcessRoute productProcessRoute = new ProductProcessRoute(); productProcessRoute.setProductModelId(processRoute.getProductModelId()); productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode()); productProcessRoute.setProductOrderId(productOrder.getId()); productProcessRoute.setBomId(processRoute.getBomId()); productProcessRouteMapper.insert(productProcessRoute); //æ°å¢ç产订åä¸çå·¥èºè·¯çº¿å表 List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId())); // çæå½åæ¥æçåç¼ï¼å¹´ææ¥ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); for (ProcessRouteItem processRouteItem : processRouteItems) { ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem(); productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId()); productProcessRouteItem.setProcessId(processRouteItem.getProcessId()); productProcessRouteItem.setProductOrderId(productOrder.getId()); productProcessRouteItem.setProductRouteId(productProcessRoute.getId()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .orderByDesc("work_order_no") .last("LIMIT 1"); ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper); int sequenceNumber = 1; // é»è®¤åºå· if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) { String lastNo = lastWorkOrder.getWorkOrderNo().toString(); if (lastNo.startsWith(datePrefix)) { String seqStr = lastNo.substring(datePrefix.length()); try { sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; } } } // çæå®æ´çå·¥åå· String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(productOrder.getId()); productWorkOrder.setPlanQuantity(productOrder.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } } return productOrderMapper.updateById(productOrder); } @Override public List<ProcessRoute> listProcessRoute(Long productModelId) { return productOrderMapper.listProcessRoute(productModelId); } @Override public List<ProductStructureDto> listProcessBom(Long orderId) { return productOrderMapper.listProcessBom(orderId); } } src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,198 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductProcessRouteItemService; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.List; @Service @Transactional(rollbackFor = Exception.class) @AllArgsConstructor public class ProductProcessRouteItemServiceImpl extends ServiceImpl<ProductProcessRouteItemMapper, ProductProcessRouteItem> implements ProductProcessRouteItemService { private ProductProcessRouteItemMapper productProcessRouteItemMapper; private ProductionProductMainMapper productionProductMainMapper; private ProductionProductInputMapper productionProductInputMapper; private ProductionProductOutputMapper productionProductOutputMapper; private QualityInspectMapper qualityInspectMapper; private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private ProductWorkOrderMapper productWorkOrderMapper; private ProductOrderMapper productOrderMapper; private ProductProcessRouteMapper productProcessRouteMapper; private SalesLedgerProductMapper salesLedgerProductMapper; @Override public List<ProductProcessRouteItemDto> listItem(Long orderId) { return productProcessRouteItemMapper.listItem(orderId); } @Override public R deleteRouteItem(Long id) { Long routeItemId = id; try { // æ¥è¯¢å·¥å ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectOne( new LambdaQueryWrapper<ProductWorkOrder>() .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId) .last("LIMIT 1") ); if (productWorkOrder == null) { throw new RuntimeException("å é¤å¤±è´¥ï¼æªæ¾å°å ³èçç产工å"); } Long workOrderId = productWorkOrder.getId(); Long productOrderId = productWorkOrder.getProductOrderId(); // æ¥è¯¢ç产主表 List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList( new LambdaQueryWrapper<ProductionProductMain>() .eq(ProductionProductMain::getWorkOrderId, workOrderId) ); if (!productionProductMains.isEmpty()) { // æ¹éå é¤å表 for (ProductionProductMain main : productionProductMains) { Long mainId = main.getId(); // å é¤æå ¥ productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>() .eq(ProductionProductInput::getProductMainId, mainId)); // å é¤äº§åº productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>() .eq(ProductionProductOutput::getProductMainId, mainId)); // å é¤è´¨æ£ qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>() .eq(QualityInspect::getProductMainId, mainId)); } } // å 餿¥å·¥ï¼çäº§ä¸»è¡¨ï¼ productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>() .eq(ProductionProductMain::getWorkOrderId, workOrderId)); // æ¥è¯¢è®¢å + å 餿 ¸ç® ProductOrder productOrder = productOrderMapper.selectById(productOrderId); if (productOrder != null && productOrder.getSalesLedgerId() != null) { salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerId, productOrder.getSalesLedgerId())); } // å é¤å ³èå·¥å productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>() .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId)); // å é¤ä¸»è¡¨æ°æ® ProductProcessRouteItem deleteProductProcessRouteItem = productProcessRouteItemMapper.selectById(routeItemId); Long productRouteId = deleteProductProcessRouteItem.getProductRouteId(); // å 餿宿°æ® productProcessRouteItemMapper.deleteById(id); // æ¥è¯¢è¯¥å·¥èºè·¯çº¿çææå·¥åºå¹¶æç §é¡ºåºæåº List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, productRouteId) .orderByAsc(ProductProcessRouteItem::getDragSort)); // éæ°è®¾ç½®æåºå¼ï¼ä½¿åºå·è¿ç» for (int i = 0; i < productProcessRouteItems.size(); i++) { ProductProcessRouteItem item = productProcessRouteItems.get(i); if (!item.getDragSort().equals(i + 1)) { item.setDragSort(i + 1); productProcessRouteItemMapper.updateById(item); } } return R.ok(); } catch (Exception e) { throw new RuntimeException("å é¤ç产工èºè·¯çº¿å¤±è´¥ï¼" + e.getMessage()); } } @Override public R addRouteItem(ProductProcessRouteItem productProcessRouteItem) { ProductOrder productOrder = productOrderMapper.selectById(productProcessRouteItem.getProductOrderId()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); // çæå½åæ¥æçåç¼ï¼å¹´ææ¥ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); if (insert > 0) { // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§å·¥åå· QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .orderByDesc("work_order_no") .last("LIMIT 1"); ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper); int sequenceNumber = 1; // é»è®¤åºå· if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) { String lastNo = lastWorkOrder.getWorkOrderNo().toString(); if (lastNo.startsWith(datePrefix)) { String seqStr = lastNo.substring(datePrefix.length()); try { sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; } } } // çæå®æ´çå·¥åå· String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(productProcessRouteItem.getProductOrderId()); productWorkOrder.setPlanQuantity(productOrder.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } return R.ok(); } @Override public int sortRouteItem(ProductProcessRouteItem productProcessRouteItem) { //æ¥è¯¢è¢«æ¹å¨çè¿æ¡æ°æ® ProductProcessRouteItem oldProductProcessRouteItem = productProcessRouteItemMapper.selectById(productProcessRouteItem.getId()); //æ¥è¯¢è¯¥å·¥èºè·¯çº¿çææå·¥åºå¹¶æç §é¡ºåºæåº List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, oldProductProcessRouteItem.getProductRouteId()) .orderByAsc(ProductProcessRouteItem::getDragSort)); // è·åç®æ ä½ç½®ï¼ç§»å¨å°ç¬¬å 个ä¹åï¼ Integer targetPosition = productProcessRouteItem.getDragSort(); if (targetPosition != null && targetPosition >= 0) { // ç§»å¨å ç´ å°æ°çä½ç½® productProcessRouteItems.remove(oldProductProcessRouteItem); productProcessRouteItems.add(targetPosition-1, oldProductProcessRouteItem); // æ´æ°ææåå½±åçæåºå段 for (int i = 0; i < productProcessRouteItems.size(); i++) { ProductProcessRouteItem item = productProcessRouteItems.get(i); if (!item.getId().equals(oldProductProcessRouteItem.getId())) { // æ£æ¥æ¯å¦éè¦æ´æ°æåºå¼ if (item.getDragSort() != i+1) { item.setDragSort(i+1); productProcessRouteItemMapper.updateById(item); } } else { // æ´æ°åè®°å½çæ°æåºä½ç½® oldProductProcessRouteItem.setDragSort(targetPosition); productProcessRouteItemMapper.updateById(oldProductProcessRouteItem); } } return 1; } return 0; } } src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.mapper.ProductProcessRouteMapper; import com.ruoyi.production.pojo.ProductProcessRoute; import com.ruoyi.production.service.ProductProcessRouteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-15 02:51:09 */ @Service public class ProductProcessRouteServiceImpl extends ServiceImpl<ProductProcessRouteMapper, ProductProcessRoute> implements ProductProcessRouteService { @Autowired private ProductProcessRouteMapper productProcessRouteMapper; @Override public ProcessRouteDto listMain(Long orderId) { return productProcessRouteMapper.listMain(orderId); } } src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.mapper.ProductProcessMapper; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.service.ProductProcessService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.util.List; @Service public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService { @Autowired private ProductProcessMapper productProcessMapper; @Override public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) { return productProcessMapper.listPage(page, productProcessDto); } @Override public AjaxResult add(ProductProcessDto productProcessDto) { ProductProcess productProcess = new ProductProcess(); BeanUtils.copyProperties(productProcessDto,productProcess); boolean save = productProcessMapper.insert(productProcess) > 0; if (save && ObjectUtils.isNotNull(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(); } return AjaxResult.error(); } @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("模æ¿é误æå¯¼å ¥æ°æ®ä¸ºç©º"); } this.saveOrUpdateBatch(productProcessList); return AjaxResult.success(true); }catch (Exception e){ e.printStackTrace(); return AjaxResult.error("å¯¼å ¥å¤±è´¥"); } } } src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.mapper.ProductStructureMapper; import com.ruoyi.production.pojo.ProductStructure; import com.ruoyi.production.service.ProductStructureService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service @RequiredArgsConstructor @Slf4j public class ProductStructureServiceImpl extends ServiceImpl<ProductStructureMapper, ProductStructure> implements ProductStructureService { @Autowired private ProductStructureMapper productStructureMapper; @Override public Boolean addProductStructureDto(ProductStructureDto productStructureDto) { this.remove(new QueryWrapper<ProductStructure>().lambda().eq(ProductStructure::getBomId, productStructureDto.getBomId())); productStructureDto.getProductStructureList().forEach(productStructure -> { productStructure.setBomId(productStructureDto.getBomId()); }); return this.saveBatch(productStructureDto.getProductStructureList()); } @Override public List<ProductStructureDto> listBybomId(Long bomId) { List<ProductStructureDto> tree = productStructureMapper.listBybomId(bomId); return tree; } } src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductWorkOrderDto; import com.ruoyi.production.mapper.ProductWorkOrderMapper; import com.ruoyi.production.pojo.ProductWorkOrder; import com.ruoyi.production.service.ProductWorkOrderService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class ProductWorkOrderServiceImpl extends ServiceImpl<ProductWorkOrderMapper, ProductWorkOrder> implements ProductWorkOrderService { private ProductWorkOrderMapper productWorkOrdermapper; @Override public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) { return productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder); } @Override public int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto) { return productWorkOrdermapper.updateById(productWorkOrderDto); } } src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.mapper.ProductionProductInputMapper; import com.ruoyi.production.pojo.ProductionProductInput; import com.ruoyi.production.service.ProductionProductInputService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service @AllArgsConstructor public class ProductionProductInputServiceImpl extends ServiceImpl<ProductionProductInputMapper, ProductionProductInput> implements ProductionProductInputService { @Autowired private ProductionProductInputMapper productionProductInputMapper; @Override public IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto) { return productionProductInputMapper.listPageProductionProductInputDto(page, productionProductInputDto); } } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,294 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.production.controller.ProductWorkOrderController; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductionProductMainService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.mapper.QualityInspectParamMapper; import com.ruoyi.quality.mapper.QualityTestStandardMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityTestStandard; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @AllArgsConstructor public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService { private final ProcurementRecordOutMapper procurementRecordOutMapper; private ProductionProductMainMapper productionProductMainMapper; private ProductWorkOrderController productWorkOrderController; private ProductWorkOrderMapper productWorkOrderMapper; private ProductProcessRouteItemMapper productProcessRouteItemMapper; private ProductionProductOutputMapper productionProductOutputMapper; private ProcessRouteItemMapper processRouteItemMapper; private ProductModelMapper productModelMapper; private QualityInspectMapper qualityInspectMapper; private ProductProcessMapper productProcessMapper; private ProductMapper productMapper; private QualityTestStandardMapper qualityTestStandardMapper; private QualityInspectParamMapper qualityInspectParamMapper; private ProductStructureMapper productStructureMapper; private ProductionProductInputMapper productionProductInputMapper; private ProductOrderMapper productOrderMapper; private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private StockUtils stockUtils; @Override public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) { return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto); } @Override @Transactional(rollbackFor = Exception.class) public Boolean addProductMain(ProductionProductMainDto dto) { if (dto == null) { throw new RuntimeException("åæ°ä¸è½ä¸ºç©º"); } SysUser user = SecurityUtils.getLoginUser().getUser(); // æ°å¢é»è¾ ProductionProductMain productionProductMain = new ProductionProductMain(); ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId()); if (productProcessRouteItem == null) { throw new RuntimeException("å·¥èºè·¯çº¿é¡¹ä¸åå¨"); } String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); QueryWrapper<ProductionProductMain> queryWrapper = new QueryWrapper<>(); queryWrapper.select("MAX(product_no) as maxNo") .likeRight("product_no", datePrefix); List<Map<String, Object>> resultList = productionProductMainMapper.selectMaps(queryWrapper); int sequenceNumber = 1; if (resultList != null && !resultList.isEmpty()) { Map<String, Object> result = resultList.get(0); if (result != null) { Object maxNoObj = result.get("maxNo"); if (maxNoObj != null) { String lastNo = maxNoObj.toString(); System.out.println("lastNo: " + lastNo); if (lastNo.startsWith(datePrefix)) { try { String seqStr = lastNo.substring(datePrefix.length()); sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; } } } } } String productNo = String.format("%s%03d", datePrefix, sequenceNumber); productionProductMain.setProductNo(productNo); productionProductMain.setUserId(user.getUserId()); productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId()); productionProductMain.setWorkOrderId(dto.getWorkOrderId()); productionProductMain.setStatus(0); // æ·»å æ¥å·¥ä¸»è¡¨ int insert = productionProductMainMapper.insert(productionProductMain); //æ´æ°å·¥å if (insert > 0) { Map<String, Object> params = new HashMap<>(); params.put("workOrderId", dto.getWorkOrderId()); params.put("deductQuantity", dto.getQuantity()); productWorkOrderMapper.updatePlanQuantity(params); } ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId()); ProductModel productModel = productProcessRouteItem.getProductModelId() != null ? productModelMapper.selectById(productProcessRouteItem.getProductModelId()) : null; if (productModel != null) { Product product = productMapper.selectById(productModel.getProductId()); int inspectType = "ç»è£ ".equals(productProcess.getName()) ? 2 : 1; QualityInspect qualityInspect = new QualityInspect(); qualityInspect.setProductId(product.getId()); qualityInspect.setProductName(product.getProductName()); qualityInspect.setModel(productModel.getModel()); qualityInspect.setUnit(productModel.getUnit()); qualityInspect.setQuantity(dto.getQuantity()); qualityInspect.setProcess(productProcess.getName()); qualityInspect.setInspectState(0); qualityInspect.setInspectType(inspectType); qualityInspect.setProductMainId(productionProductMain.getId()); qualityInspect.setProductModelId(productModel.getId()); qualityInspectMapper.insert(qualityInspect); qualityTestStandardMapper.selectList( new LambdaQueryWrapper<QualityTestStandard>() .eq(QualityTestStandard::getProductId, product.getId()) ).forEach(standard -> { QualityInspectParam param = new QualityInspectParam(); BeanUtils.copyProperties(standard, param); param.setId(null); param.setInspectId(qualityInspect.getId()); qualityInspectParamMapper.insert(param); }); } // æ·»å æå ¥ if (productModel != null) { List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(productModel.getId()); for (ProductStructureDto productStructureDto : productStructureDtos) { ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); Product product = productMapper.selectById(productModel1.getProductId()); BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity"); if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { throw new RuntimeException(product.getProductName() + "åºå为0"); } if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) { throw new RuntimeException(product.getProductName() + "åºåä¸è¶³"); } ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); productionProductInput.setProductMainId(productionProductMain.getId()); productionProductInputMapper.insert(productionProductInput); DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd"); LocalDate now = LocalDate.now(); ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now)); Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS"+dateFormat.format(now))[1]); //æ·»å åºåºå¤ç ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(0) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1)) .salesLedgerProductId(0) .inboundBatches(aLong.equals(0L) ? "第1æ¹æ¬¡" : "第"+ (aLong + 1) + "æ¹æ¬¡") .inboundNum(productionProductInput.getQuantity()) .type(4) .createTime(LocalDateTime.now()) .createUser(user.getUserId()) .createBy(user.getNickName()) .updateUser(user.getUserId()) .updateTime(LocalDateTime.now()) .productModelId(productModel1.getId()); procurementRecordOutMapper.insert(procurementRecordOut.build()); } } // æ·»å äº§åº ProductionProductOutput productionProductOutput = new ProductionProductOutput(); productionProductOutput.setProductMainId(productionProductMain.getId()); productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId()); productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO); productionProductOutputMapper.insert(productionProductOutput); // è·åç产订å ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(new QueryWrapper<ProductionProductMain>().lambda().eq(ProductionProductMain::getWorkOrderId, dto.getWorkOrderId())); if (productionProductMains.isEmpty()) { productWorkOrder.setActualStartTime(LocalDate.now()); } ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId()); if (productOrder == null) { throw new RuntimeException("ç产订åä¸åå¨"); } // æ·»å çäº§æ ¸ç® SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder() .salesLedgerWorkId(productionProductMain.getId()) .salesLedgerSchedulingId(0L) .salesLedgerId(productOrder.getSalesLedgerId()) .salesLedgerProductId(productOrder.getProductModelId()) .schedulingUserId(user.getUserId()) .schedulingUserName(user.getNickName()) .finishedNum(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO) .workHours(productProcess.getSalaryQuota()) .process(productProcess.getName()) .schedulingDate(LocalDate.now()) .tenantId(dto.getTenantId()) .build(); salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting); return true; } @Override @Transactional public Boolean removeProductMain(ProductionProductMainDto dto) { Long id = dto.getId(); // æ´æ°å·¥å productWorkOrderMapper.rollbackPlanQuantity(id); // å é¤è´¨æ£åæ°åè´¨æ£è®°å½ qualityInspectMapper.selectList( new LambdaQueryWrapper<QualityInspect>() .eq(QualityInspect::getProductMainId, id) ).forEach(q -> { qualityInspectParamMapper.delete( new LambdaQueryWrapper<QualityInspectParam>() .eq(QualityInspectParam::getInspectId, q.getId())); qualityInspectMapper.deleteById(q.getId()); }); // å é¤äº§åºè®°å½ productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>() .eq(ProductionProductOutput::getProductMainId, id) ); // å é¤å ³èçæ ¸ç®æ°æ® salesLedgerProductionAccountingMapper.delete( new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id) ); // å é¤ä¸»è¡¨ return productionProductMainMapper.deleteById(id) > 0; } } src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.mapper.ProductionProductOutputMapper; import com.ruoyi.production.pojo.ProductionProductOutput; import com.ruoyi.production.service.ProductionProductOutputService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service @AllArgsConstructor public class ProductionProductOutputServiceImpl extends ServiceImpl<ProductionProductOutputMapper, ProductionProductOutput> implements ProductionProductOutputService { @Autowired private ProductionProductOutputMapper productionProductOutputMapper; @Override public IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto) { return productionProductOutputMapper.listPageProductionProductOutputDto(page, productionProductOutputDto); } } src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -137,6 +137,16 @@ * ç±»å«(0:æªæäº¤;1:å·²æäº¤) */ private Integer inspectState; private Long purchaseLedgerId; /** * æ¥å·¥id */ private Long productMainId; private Long productModelId; //ä¸åæ ¼ç°è±¡ private String defectivePhenomena; } src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -163,4 +163,9 @@ left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id left join purchase_ledger t3 on t3.id = t2.sales_ledger_id </select> <select id="getSumQuantity" resultType="BigDecimal"> select COALESCE(sum(inbound_num), 0) from procurement_record_storage where product_model_id = #{productModelId} </select> </mapper> src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -50,4 +50,17 @@ left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id left join purchase_ledger t3 on t3.id = t2.sales_ledger_id </select> <select id="getSumQuantity" resultType="BigDecimal"> select COALESCE(sum(inbound_num), 0) from procurement_record_out where product_model_id = #{productModelId} </select> <select id="selectCode" resultType="com.ruoyi.procurementrecord.pojo.ProcurementRecordOut"> select * from procurement_record_out where code like concat('%', #{format}) order by id desc limit 1 </select> </mapper> src/main/resources/mapper/production/ProcessRouteItemMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ <?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.ruoyi.production.mapper.ProcessRouteItemMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRouteItem"> <id property="id" column="id"/> <result property="routeId" column="route_id"/> <result property="processId" column="process_id"/> <result property="productModelId" column="product_model_id"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> <result property="dragSort" column="drag_sort"/> </resultMap> <select id="listProcessRouteItemDto" resultType="com.ruoyi.production.dto.ProcessRouteItemDto"> select pri.*, pr.description , pp.name as process_name, pm.speculative_trading_name, pm.product_id, pm.model, p.product_name, pm.unit from process_route_item pri left join product_model pm on pri.product_model_id = pm.id left join product_process pp on pp.id = pri.process_id left join product p on p.id = pm.product_id left join process_route pr on pr.id = pri.route_id where pri.route_id = #{c.routeId} order by pri.drag_sort </select> </mapper> src/main/resources/mapper/production/ProcessRouteMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ <?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.ruoyi.production.mapper.ProcessRouteMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRoute"> <id property="id" column="id"/> <result property="productModelId" column="product_model_id"/> <result property="description" column="description"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> </resultMap> <select id="pageProcessRouteDto" resultType="com.ruoyi.production.dto.ProcessRouteDto"> select ps.*, p.product_name,pm.product_id,pm.model,pb.bom_no from process_route ps left join product_bom pb on ps.bom_id = pb.id left join product_model pm on ps.product_model_id = pm.id left join product p on pm.product_id = p.id <where> <if test="c.model != null and c.model != ''"> and pm.model like concat('%',#{c.model},'%') </if> </where> order by ps.id asc </select> </mapper> src/main/resources/mapper/production/ProductBomMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ <?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.ruoyi.production.mapper.ProductBomMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductBom"> <id column="id" property="id"/> <result column="product_model_id" property="productModelId"/> <result column="bom_no" property="bomNo"/> <result column="remark" property="remark"/> <result column="version" property="version"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="create_user" property="createUser"/> <result column="update_user" property="updateUser"/> <result column="tenant_id" property="tenantId"/> </resultMap> <select id="listPage" resultType="com.ruoyi.production.dto.ProductBomDto"> select * from (select pb.*, pm.model productModelName, p.product_name productName from product_bom pb left join product_model pm on pb.product_model_id = pm.id left join product p on pm.product_id = p.id)A where 1=1 <if test="c.productModelName != null"> and productModelName = #{c.productModelName} </if> <if test="c.productName != null"> and productName = #{c.productName} </if> <if test="c.bomNo != null"> and bom_no = #{c.bomNo} </if> <if test="c.version != null"> and version = #{c.version} </if> </select> <select id="getById" resultType="com.ruoyi.production.dto.ProductBomDto"> select pb.*, pm.model productModelName, p.product_name productName from product_bom pb left join product_model pm on pb.product_model_id = pm.id left join product p on pm.product_id = p.id </select> </mapper> src/main/resources/mapper/production/ProductOrderMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,89 @@ <?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.ruoyi.production.mapper.ProductOrderMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductOrder"> <id property="id" column="id"/> <result property="productModelId" column="product_model_id"/> <result property="tenantId" column="tenant_id"/> <result property="salesLedgerId" column="sales_ledger_id"/> <result property="routeId" column="route_id"/> <result property="npsNo" column="nps_no"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> </resultMap> <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto"> select po.*, sl.sales_contract_no, sl.customer_name, slp.product_category, slp.specification_model, ppr.process_route_code, pb.bom_no, ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus from product_order po left join sales_ledger sl on po.sales_ledger_id = sl.id left join sales_ledger_product slp on po.product_model_id = slp.id left join product_process_route ppr on po.id = ppr.product_order_id left join product_bom pb on pb.id = ppr.bom_id <where> <if test="c.npsNo != null and c.npsNo != ''"> and po.nps_no like concat('%',#{c.npsNo},'%') </if> <if test="c.salesContractNo != null and c.salesContractNo != ''"> and sl.sales_contract_no like concat('%',#{c.salesContractNo},'%') </if> <if test="c.customerName != null and c.customerName != ''"> and sl.customer_name like concat('%',#{c.customerName},'%') </if> <if test="c.productCategory != null and c.productCategory != ''"> and slp.product_category like concat('%',#{c.productCategory},'%') </if> <if test="c.specificationModel != null and c.specificationModel != ''"> and slp.specification_model like concat('%',#{c.specificationModel},'%') </if> </where> </select> <select id="productMainByOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto"> select po.*, pwo.work_order_no, pwo.report_work, pwo.status, pwo.quantity, pwo.plan_quantity from product_order po left join product_work_order pwo on po.id = pwo.product_order_id where po.id = #{c.id} </select> <select id="listProcessRoute" resultType="com.ruoyi.production.pojo.ProcessRoute"> select pr.* from process_route pr left join product_model pm on pr.product_model_id = pm.id left join sales_ledger_product slp on pm.id = slp.product_model_id where slp.id = #{productModelId} </select> <select id="listProcessBom" resultType="com.ruoyi.production.dto.ProductStructureDto"> select ps.id, ps.product_model_id, ps.process_id, ps.unit_quantity, ps.unit_quantity * po.quantity as demandedQuantity, ps.unit, p.product_name, pp.name as process_name, pm.product_id, pm.model from product_structure ps left join product_model pm on ps.product_model_id = pm.id left join product p on pm.product_id = p.id left join product_process pp on ps.process_id = pp.id left join product_process_route ppr on ps.bom_id = ppr.bom_id left join product_order po on po.id = ppr.product_order_id where ppr.product_order_id = #{orderId} order by ps.id </select> </mapper> src/main/resources/mapper/production/ProductProcessMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ <?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.ruoyi.production.mapper.ProductProcessMapper"> <select id="listPage" resultType="com.ruoyi.production.dto.ProductProcessDto"> SELECT * FROM product_process p <where> <if test="productProcessDto.name != null and productProcessDto.name != '' "> AND p.name LIKE CONCAT('%',#{productProcessDto.name},'%') </if> <if test="productProcessDto.no != null and productProcessDto.no != '' "> AND p.no LIKE CONCAT('%',#{productProcessDto.no},'%') </if> </where> order by p.id asc </select> </mapper> src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ <?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.ruoyi.production.mapper.ProductProcessRouteItemMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductProcessRouteItem"> <id property="id" column="id"/> <result property="productModelId" column="product_model_id"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> </resultMap> <select id="listItem" resultType="com.ruoyi.production.dto.ProductProcessRouteItemDto"> select ppri.*, pp.name as process_name, pm.model, pm.unit, p.product_name from product_process_route_item ppri left join product_model pm on ppri.product_model_id = pm.id left join product p on pm.product_id = p.id left join product_process pp on pp.id = ppri.process_id where ppri.product_order_id = #{orderId} order by ppri.drag_sort </select> </mapper> src/main/resources/mapper/production/ProductProcessRouteMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ <?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.ruoyi.production.mapper.ProductProcessRouteMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductProcessRoute"> <id column="id" property="id"/> <result column="product_model_id" property="productModelId"/> <result column="description" property="description"/> <result column="tenant_id" property="tenantId"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="bom_id" property="bomId"/> <result column="process_route_code" property="processRouteCode"/> <result column="product_order_id" property="productOrderId"/> </resultMap> <select id="listMain" resultType="com.ruoyi.production.dto.ProcessRouteDto"> select ppr.*, p.product_name, pm.product_id, pm.model, pb.bom_no from product_process_route ppr left join product_bom pb on ppr.bom_id = pb.id left join product_model pm on ppr.product_model_id = pm.id left join product p on pm.product_id = p.id where ppr.product_order_id = #{orderId} </select> </mapper> src/main/resources/mapper/production/ProductStructureMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ <?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.ruoyi.production.mapper.ProductStructureMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductStructure"> <id property="id" column="id"/> <result property="productModelId" column="product_model_id"/> <result property="processId" column="process_id"/> <result property="unitQuantity" column="unit_quantity"/> <result property="demandedQuantity" column="demanded_quantity"/> <result property="unit" column="unit"/> <result property="tenantId" column="tenant_id"/> </resultMap> <select id="listBybomId" resultType="com.ruoyi.production.dto.ProductStructureDto"> select ps.*, p.product_name, pp.name as process_name, pm.product_id, pm.model from product_structure ps left join product_model pm on ps.product_model_id = pm.id left join product p on pm.product_id = p.id left join product_process pp on ps.process_id = pp.id where ps.bom_id = #{bomId} order by ps.id </select> <select id="listByproductModelId" resultType="com.ruoyi.production.dto.ProductStructureDto"> select ps.*, p.product_name, pp.name as process_name, pm.product_id, pm.model from product_structure ps left join product_bom pb on ps.bom_id = pb.id left join product_model pm on ps.product_model_id = pm.id left join product p on pm.product_id = p.id left join product_process pp on ps.process_id = pp.id where pb.product_model_id = #{productModelId} order by ps.id </select> </mapper> src/main/resources/mapper/production/ProductWorkOrderMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ <?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.ruoyi.production.mapper.ProductWorkOrderMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductWorkOrder"> <result column="id" property="id"/> <result column="product_process_route_item_id" property="productProcessRouteItemId"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="work_order_no" property="workOrderNo"/> <result column="status" property="status"/> <result column="tenant_id" property="tenantId"/> <result column="actual_end_time" property="planStartTime"/> <result column="plan_end_time" property="planEndTime"/> <result column="actual_start_time" property="actualStartTime"/> <result column="actualEndTime" property="actualEndTime"/> </resultMap> <select id="pageProductWorkOrder" resultType="com.ruoyi.production.dto.ProductWorkOrderDto"> SELECT pwo.*, pp.NAME as processName, pm.model, pm.unit, p.product_name AS productName, po.nps_no AS productOrderNpsNo, ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus FROM product_work_order pwo LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id LEFT JOIN product_order po ON po.id = pwo.product_order_id LEFT JOIN product_process pp ON pp.id = ppri.process_id LEFT JOIN product_model pm ON pm.id = ppri.product_model_id LEFT JOIN product p ON p.id = pm.product_id <where> <if test="c.workOrderNo != null and c.workOrderNo != ''"> pwo.work_order_no like concat('%',#{c.workOrderNo},'%') </if> </where> </select> <select id="selectProductWorkOrderDtoList" resultType="com.ruoyi.production.dto.ProductWorkOrderDto"> select * from product_work_order pwo left join product_order po on po.id = pwo.product_order_id </select> <update id="updatePlanQuantity" parameterType="java.util.Map"> UPDATE product_work_order SET report_work = #{reportWork}, plan_quantity = plan_quantity - #{deductQuantity} WHERE id = #{workOrderId} </update> <update id="rollbackPlanQuantity" parameterType="java.lang.Long"> UPDATE product_work_order pwo INNER JOIN production_product_main ppm ON pwo.id = ppm.work_order_id AND ppm.id = #{productMainId} INNER JOIN production_product_output ppo ON ppo.product_main_id = ppm.id SET pwo.plan_quantity = pwo.plan_quantity + ppo.quantity, pwo.report_work = 0, pwo.quantity = 0 WHERE pwo.id = ppm.work_order_id </update> </mapper> src/main/resources/mapper/production/ProductionProductInputMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ <?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.ruoyi.production.mapper.ProductionProductInputMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductInput"> <id property="id" column="id"/> <result property="productMainId" column="product_main_id"/> <result property="productModelId" column="product_model_id"/> <result property="quantity" column="quantity"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> </resultMap> <select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.dto.ProductionProductInputDto"> select ppi.*, pm.model as model, ppm.product_no as productNo from production_product_input ppi left join production_product_main ppm on ppm.id = ppi.product_main_id left join product_model pm on pm.id = ppi.product_model_id <where> <if test="c.productMainId != null and c.productMainId > 0"> and ppm.id = #{c.productMainId} </if> </where> order by ppi.id </select> <delete id="deleteByProductMainIds" parameterType="java.util.List"> DELETE FROM production_product_input WHERE product_main_id IN <foreach collection="productMainIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper> src/main/resources/mapper/production/ProductionProductMainMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ <?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.ruoyi.production.mapper.ProductionProductMainMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductMain"> <id property="id" column="id"/> <result property="productNo" column="product_no"/> <result property="userId" column="user_id"/> <result property="workOrderId" column="work_order_id"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> <result property="status" column="status"/> </resultMap> <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto"> select ppm.*, pwo.work_order_no as workOrderNo, pwo.status as workOrderStatus, u.nick_name as nickName from production_product_main ppm left join product_work_order pwo on pwo.id = ppm.work_order_id left join sys_user u on u.user_id = ppm.user_id <where> <if test="c.nickName != null and c.nickName != ''"> and u.nick_name like concat('%',#{c.nickName},'%') </if> <if test="c.workOrderNo != null and c.workOrderNo != ''"> and pwo.work_order_no like concat('%',#{c.workOrderNo},'%') </if> <if test="c.workOrderStatus != null and c.workOrderStatus != ''"> and pwo.status = #{c.workOrderStatus} </if> <if test="c.status != null and c.status != ''"> and ppm.status = #{c.status} </if> </where> order by ppm.id </select> <delete id="deleteByWorkOrderIds" parameterType="java.util.List"> DELETE FROM production_product_main WHERE work_order_id IN <foreach collection="workOrderIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper> src/main/resources/mapper/production/ProductionProductOutputMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ <?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.ruoyi.production.mapper.ProductionProductOutputMapper"> <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductOutput"> <id property="id" column="id"/> <result property="productMainId" column="product_main_id"/> <result property="productModelId" column="product_model_id"/> <result property="quantity" column="quantity"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> </resultMap> <select id="listPageProductionProductOutputDto" resultType="com.ruoyi.production.dto.ProductionProductOutputDto"> select ppo.*, pm.model as model, ppm.product_no as productNo from production_product_output ppo left join production_product_main ppm on ppm.id = ppo.product_main_id left join product_model pm on pm.id = ppo.product_model_id <where> <if test="c.productMainId != null and c.productMainId > 0"> and ppm.id = #{c.productMainId} </if> </where> order by ppo.id </select> <delete id="deleteByProductMainIds" parameterType="java.util.List"> DELETE FROM production_product_output WHERE product_main_id IN <foreach collection="productMainIds" item="id" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper>