doc/ºÓÄϺױÚÌìãå¸Ö»¯²£Á§³§.sql
@@ -49,3 +49,16 @@ MODIFY COLUMN `settle_total_area` decimal(20, 15) NULL DEFAULT NULL COMMENT 'ç»ç®æ»é¢ç§¯(ã¡)' AFTER `settle_piece_area`, ADD COLUMN `perimeter` decimal(20, 15) NULL COMMENT 'å¨é¿' AFTER `settle_total_area`, ADD COLUMN `heavy_box` decimal(20, 15) NULL COMMENT 'éç®±' AFTER `perimeter`; ALTER TABLE `product-inventory-management-hbtmblc`.`process_route` MODIFY COLUMN `product_model_id` bigint NULL DEFAULT 0 COMMENT '产åid' AFTER `id`, MODIFY COLUMN `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT 'æè¿°' AFTER `product_model_id`, ADD COLUMN `is_default` tinyint(1) NULL COMMENT 'æ¯å¦é»è®¤(0-å¦,1-æ¯)' AFTER `bom_id`; ALTER TABLE `product-inventory-management-hbtmblc`.`process_route` ADD COLUMN `process_route_name` varchar(255) NULL COMMENT 'å·¥èºè·¯çº¿åç§°' AFTER `product_model_id`; ALTER TABLE `product-inventory-management-hbtmblc`.`process_route_item` MODIFY COLUMN `product_model_id` bigint NULL DEFAULT 0 COMMENT '产åid' AFTER `route_id`, MODIFY COLUMN `process_id` bigint NULL DEFAULT 0 COMMENT 'å·¥åºid' AFTER `product_model_id`, ADD COLUMN `process_name` varchar(255) NULL COMMENT 'å·¥åºåç§°' AFTER `process_id`; src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
@@ -44,4 +44,11 @@ public R delete(@PathVariable("ids") Long[] ids) { return R.ok(processRouteService.batchDelete(Arrays.asList(ids))); } @ApiOperation("é»è®¤å·¥èºè·¯çº¿") @PutMapping("/default/{id}") public R updateDefault(@PathVariable("id") Long id) { processRouteService.updateDefault(id); return R.ok(); } } src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
@@ -9,9 +9,6 @@ @Data public class ProcessRouteItemDto extends ProcessRouteItem { @ApiModelProperty(value = "å·¥åºåç§°") private String processName; @ApiModelProperty(value = "å·¥èºè·¯çº¿åç§°") private String routeName; src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
@@ -24,6 +24,12 @@ @ApiModelProperty(value = "æè¿°") private String description; @ApiModelProperty(value = "å·¥èºè·¯çº¿åç§°") private String processRouteName; @ApiModelProperty(value = "æ¯å¦é»è®¤(0-å¦,1-æ¯)") private Integer isDefault; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
@@ -24,6 +24,9 @@ @ApiModelProperty(value ="产åid") private Long productModelId; @ApiModelProperty(value = "å·¥åºåç§°") private String processName; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; src/main/java/com/ruoyi/production/service/ProcessRouteService.java
@@ -16,4 +16,6 @@ Integer saveProcessRoute(ProcessRoute processRoute); int batchDelete(List<Long> ids); void updateDefault(Long id); } src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
@@ -78,13 +78,13 @@ .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); } } // 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
@@ -1,9 +1,12 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.mapper.ProcessRouteItemMapper; import com.ruoyi.production.mapper.ProcessRouteMapper; @@ -14,6 +17,9 @@ import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.pojo.ProductProcessRoute; import com.ruoyi.production.service.ProcessRouteService; import com.ruoyi.sales.pojo.SalesLedgerProcessRoute; import com.ruoyi.sales.service.ISalesLedgerProcessRouteService; import com.ruoyi.sales.service.ISalesLedgerProductProcessService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +35,9 @@ @AllArgsConstructor @Slf4j public class ProcessRouteServiceImpl extends ServiceImpl<ProcessRouteMapper, ProcessRoute> implements ProcessRouteService { @Autowired private ISalesLedgerProcessRouteService salesLedgerProcessRouteService; @Autowired private ProcessRouteMapper processRouteMapper; @@ -47,6 +56,12 @@ @Override public Integer saveProcessRoute(ProcessRoute processRoute) { if (processRoute == null) { throw new ServiceException("å·¥èºè·¯çº¿æ°å¢å¤±è´¥,æ°æ®ä¸è½ä¸ºç©º"); } if (StringUtils.isEmpty(processRoute.getProcessRouteName())) { throw new ServiceException("å·¥èºè·¯çº¿æ°å¢å¤±è´¥,åç§°ä¸è½ä¸ºç©º"); } this.save(processRoute); String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String idStr = String.format("%06d", processRoute.getId()); @@ -59,12 +74,30 @@ @Override public int batchDelete(List<Long> ids) { //å 夿æ¯å¦å·²ç»å¼ç¨äº List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids)); if (productOrders.size()>0){ throw new RuntimeException("该工èºè·¯çº¿ç产已å¼ç¨ï¼ä¸è½å é¤"); List<SalesLedgerProcessRoute> list = salesLedgerProcessRouteService.list(new LambdaQueryWrapper<SalesLedgerProcessRoute>().in(SalesLedgerProcessRoute::getProcessRouteId, ids)); if (list != null && list.size() > 0) { throw new ServiceException("该工èºè·¯çº¿å·²è¢«å¼ç¨ä¸è½å é¤"); } //å é¤å·¥èºè·¯çº¿è¯¦æ processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids)); return processRouteMapper.deleteBatchIds(ids); } @Override @Transactional(rollbackFor = Exception.class) public void updateDefault(Long id) { ProcessRoute currentRoute = this.getById(id); if (currentRoute == null) { throw new ServiceException("å·¥èºè·¯çº¿ä¸åå¨"); } if (Integer.valueOf(1).equals(currentRoute.getIsDefault())) { return; } this.update(Wrappers.<ProcessRoute>lambdaUpdate() .set(ProcessRoute::getIsDefault, 0) .eq(ProcessRoute::getIsDefault, 1)); this.update(Wrappers.<ProcessRoute>lambdaUpdate() .set(ProcessRoute::getIsDefault, 1) .eq(ProcessRoute::getId, id)); } } src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -17,6 +17,7 @@ import com.ruoyi.sales.mapper.ReceiptPaymentMapper; import com.ruoyi.sales.pojo.ReceiptPayment; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProcessRoute; import com.ruoyi.sales.service.ICommonFileService; import com.ruoyi.sales.service.ISalesLedgerService; import io.swagger.annotations.Api; @@ -189,6 +190,16 @@ } /** * éå®è®¢åç»å®å·¥èºè·¯çº¿ */ @PostMapping("/saleProcessBind") @ApiOperation("éå®è®¢åç»å®å·¥èºè·¯çº¿") public AjaxResult saleProcessBind(@RequestBody SalesLedgerProcessRoute salesLedgerProcessRoute) { salesLedgerService.saleProcessBind(salesLedgerProcessRoute); return AjaxResult.success(); } /** * å é¤éå®å°è´¦ */ @Log(title = "éå®å°è´¦", businessType = BusinessType.DELETE) src/main/java/com/ruoyi/sales/controller/SalesLedgerProcessRouteController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.sales.controller; import io.swagger.annotations.ApiModel; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * éå®è®¢åç»å®çå·¥èºè·¯çº¿ å端æ§å¶å¨ * </p> * * @author deslrey * @since 2026-03-26 */ @RestController @RequestMapping("/salesLedgerProcessRoute") @ApiModel(value = "SalesLedgerProcessRouteController", description = "éå®è®¢åç»å®çå·¥èºè·¯çº¿") public class SalesLedgerProcessRouteController { } src/main/java/com/ruoyi/sales/mapper/SalesLedgerProcessRouteMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.sales.mapper; import com.ruoyi.sales.pojo.SalesLedgerProcessRoute; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * éå®è®¢åç»å®çå·¥èºè·¯çº¿ Mapper æ¥å£ * </p> * * @author deslrey * @since 2026-03-26 */ public interface SalesLedgerProcessRouteMapper extends BaseMapper<SalesLedgerProcessRoute> { } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProcessRoute.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ package com.ruoyi.sales.pojo; import com.baomidou.mybatisplus.annotation.*; import java.time.LocalDateTime; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * éå®è®¢åç»å®çå·¥èºè·¯çº¿ * </p> * * @author deslrey * @since 2026-03-26 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("sales_ledger_process_route") @ApiModel(value = "SalesLedgerProcessRoute对象", description = "éå®è®¢åç»å®çå·¥èºè·¯çº¿") public class SalesLedgerProcessRoute implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主é®") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "éå®å°è´¦ID") private Long salesLedgerId; @ApiModelProperty(value = "å·¥èºè·¯çº¿ID") private Long processRouteId; @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "æå¨æåº") private Integer dragSort; @ApiModelProperty(value = "å·¥èºè·¯çº¿èç¹ID") private Long processRouteItemId; @ApiModelProperty(value = "åå»ºæ¥æ") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/sales/service/ISalesLedgerProcessRouteService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.sales.service; import com.ruoyi.sales.pojo.SalesLedgerProcessRoute; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * éå®è®¢åç»å®çå·¥èºè·¯çº¿ æå¡ç±» * </p> * * @author deslrey * @since 2026-03-26 */ public interface ISalesLedgerProcessRouteService extends IService<SalesLedgerProcessRoute> { } src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -10,6 +10,7 @@ import com.ruoyi.sales.dto.MonthlyAmountDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProcessRoute; import com.ruoyi.sales.pojo.SalesLedgerProduct; import org.springframework.web.multipart.MultipartFile; @@ -54,4 +55,6 @@ List<LossProductModelDto> getSalesLedgerWithProductsLoss(Long salesLedgerId); IPage<SalesLedgerDto> listSalesLedger(SalesLedgerDto salesLedgerDto, Page page); void saleProcessBind(SalesLedgerProcessRoute salesLedgerProcessRoute); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProcessRouteServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.sales.service.impl; import com.ruoyi.sales.pojo.SalesLedgerProcessRoute; import com.ruoyi.sales.mapper.SalesLedgerProcessRouteMapper; import com.ruoyi.sales.service.ISalesLedgerProcessRouteService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; /** * <p> * éå®è®¢åç»å®çå·¥èºè·¯çº¿ æå¡å®ç°ç±» * </p> * * @author deslrey * @since 2026-03-26 */ @Slf4j @Service public class SalesLedgerProcessRouteServiceImpl extends ServiceImpl<SalesLedgerProcessRouteMapper, SalesLedgerProcessRoute> implements ISalesLedgerProcessRouteService { } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -15,6 +15,7 @@ import com.ruoyi.basic.pojo.Customer; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.enums.SaleEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.EnumUtil; @@ -26,6 +27,8 @@ import com.ruoyi.other.mapper.TempFileMapper; import com.ruoyi.other.pojo.TempFile; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.service.ProductionProductMainService; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.domain.SysUser; @@ -37,6 +40,7 @@ import com.ruoyi.sales.dto.*; import com.ruoyi.sales.mapper.*; import com.ruoyi.sales.pojo.*; import com.ruoyi.sales.service.ISalesLedgerProcessRouteService; import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService; import com.ruoyi.sales.service.ISalesLedgerProductProcessService; import com.ruoyi.sales.service.ISalesLedgerService; @@ -116,6 +120,8 @@ private final ISalesLedgerProductProcessService salesLedgerProductProcessService; private final ISalesLedgerProductProcessBindService salesLedgerProductProcessBindService; private final ISalesLedgerProcessRouteService salesLedgerProcessRouteService; @Autowired private SysDeptMapper sysDeptMapper; @@ -521,6 +527,38 @@ return salesLedgerDtoIPage; } @Override @Transactional(rollbackFor = Exception.class) public void saleProcessBind(SalesLedgerProcessRoute salesLedgerProcessRoute) { if (salesLedgerProcessRoute == null) { throw new ServiceException("ç»å®å¤±è´¥,æ°æ®ä¸è½ä¸ºç©º"); } SalesLedger salesLedger = baseMapper.selectById(salesLedgerProcessRoute.getSalesLedgerId()); if (salesLedger == null) { throw new ServiceException("ç»å®å¤±è´¥,éå®è®¢åä¸åå¨"); } ProcessRoute processRoute = processRouteMapper.selectById(salesLedgerProcessRoute.getProcessRouteId()); if (processRoute == null) { throw new ServiceException("ç»å®å¤±è´¥,å·¥èºè·¯çº¿ä¸åå¨"); } // æ¸ é¤å·²ç»å®çæ°æ® salesLedgerProcessRouteService.remove(new LambdaQueryWrapper<SalesLedgerProcessRoute>().eq(SalesLedgerProcessRoute::getSalesLedgerId, salesLedger.getId()).eq(SalesLedgerProcessRoute::getProcessRouteId, processRoute.getId())); // å°æ°æ®è¿ç§»å°sales_ledger_process_route List<ProcessRouteItem> routeItems = processRouteItemMapper.selectList(new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRoute.getId())); SalesLedgerProcessRoute ledgerProcessRoute; List<SalesLedgerProcessRoute> salesLedgerProcessRouteList = new ArrayList<>(); for (ProcessRouteItem routeItem : routeItems) { ledgerProcessRoute = new SalesLedgerProcessRoute(); ledgerProcessRoute.setProcessRouteId(processRoute.getId()); ledgerProcessRoute.setSalesLedgerId(salesLedger.getId()); ledgerProcessRoute.setProcessRouteItemId(routeItem.getId()); salesLedgerProcessRouteList.add(ledgerProcessRoute); } salesLedgerProcessRouteService.saveBatch(salesLedgerProcessRouteList); } /** * ä¸å线å½å转驼峰å½å */ src/main/resources/mapper/production/ProcessRouteItemMapper.xml
@@ -7,6 +7,7 @@ <result property="routeId" column="route_id"/> <result property="processId" column="process_id"/> <result property="productModelId" column="product_model_id"/> <result property="processName" column="process_name"/> <result property="tenantId" column="tenant_id"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> @@ -14,22 +15,9 @@ </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} select * from process_route_item pri where pri.route_id = #{c.routeId} order by pri.drag_sort </select> </mapper> src/main/resources/mapper/production/ProcessRouteMapper.xml
@@ -7,22 +7,16 @@ <id property="id" column="id"/> <result property="productModelId" column="product_model_id"/> <result property="description" column="description"/> <result property="processRouteName" column="process_route_name"/> <result property="isDefault" column="is_default"/> <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 select * 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 order by ps.id </select> </mapper> src/main/resources/mapper/sales/SalesLedgerProcessRouteMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ <?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.sales.mapper.SalesLedgerProcessRouteMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.sales.pojo.SalesLedgerProcessRoute"> <id column="id" property="id" /> <result column="sales_ledger_id" property="salesLedgerId" /> <result column="process_route_id" property="processRouteId" /> <result column="remark" property="remark" /> <result column="drag_sort" property="dragSort" /> <result column="process_route_item_id" property="processRouteItemId" /> <result column="create_time" property="createTime" /> <result column="tenant_id" property="tenantId" /> </resultMap> </mapper>