| doc/宁夏-中盛建材.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/pojo/ProductOrder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/productionPlan/pojo/ProductOrderPlan.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
doc/ÄþÏÄ-ÖÐÊ¢½¨²Ä.sql
@@ -92,7 +92,7 @@ add assigned_quantity DECIMAL(10, 4) default 0 not null COMMENT 'ä¸åæ°é'; alter table product_order add plan_complete_time datetime(0) NULL DEFAULT NULL COMMENT '计å宿æ¶é´'; add plan_complete_time date NULL DEFAULT NULL COMMENT '计å宿æ¶é´'; # ç产订åä¸ç产计åå ³è表 drop table if exists product_order_plan; @@ -103,6 +103,7 @@ production_plan_id bigint not null default 0 comment 'ç产计åid', create_time datetime null comment 'å½å ¥æ¶é´', update_time datetime null comment 'æ´æ°æ¶é´', assigned_quantity DECIMAL(10, 4) default 0 not null comment 'ä¸åæ°é', index idx_product_order_id (product_order_id), index idx_production_plan_id (production_plan_id), unique idx_product_order_production_plan (product_order_id, production_plan_id) src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -10,6 +10,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -36,18 +37,12 @@ private String npsNo; /** * åå¹¶ç产计åids */ @ApiModelProperty(value = "åå¹¶ç产计åids") private String combineProductionPlanIds; /** * 计å宿æ¶é´ */ @ApiModelProperty(value = "计å宿æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime planCompleteTime; @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planCompleteTime; /** * ç§æ·id src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -15,10 +15,15 @@ import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductOrderService; import com.ruoyi.productionPlan.mapper.ProductOrderPlanMapper; import com.ruoyi.productionPlan.mapper.ProductionPlanMapper; import com.ruoyi.productionPlan.pojo.ProductOrderPlan; import com.ruoyi.productionPlan.pojo.ProductionPlan; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; @@ -49,6 +54,12 @@ @Autowired private ProductionProductMainMapper productionProductMainMapper; @Autowired private ProductOrderPlanMapper productOrderPlanMapper; @Autowired private ProductionPlanMapper productionPlanMapper; @Autowired private ProductionProductOutputMapper productionProductOutputMapper; @@ -123,14 +134,25 @@ } @Override @Transactional(rollbackFor = Exception.class) public Boolean revoke(ProductOrder productOrder) { //夿æ¯å¦äº§çå·¥å List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(Wrappers.<ProductionProductMain>lambdaQuery().eq(ProductionProductMain::getProductOrderId, productOrder.getId())); if (!productionProductMains.isEmpty()) { throw new RuntimeException("ç产订åå·²ç»æ¥å·¥,ä¸è½æ¤é"); } // todo 夿æ¯å¦äº§çæ¥å·¥ä¿¡æ¯ // æ¥è¯¢åå¹¶çç产计å List<ProductOrderPlan> productOrderPlans = productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery().in(ProductOrderPlan::getProductOrderId, productOrder.getId())); if (productOrderPlans.isEmpty()) { throw new RuntimeException("åå¹¶çç产计åä¸åå¨"); } for (ProductOrderPlan productOrderPlan : productOrderPlans) { ProductionPlan productionPlan = productionPlanMapper.selectById(productOrderPlan.getProductionPlanId()); productionPlan.setAssignedQuantity(productionPlan.getAssignedQuantity().subtract(productOrderPlan.getAssignedQuantity())); productionPlanMapper.updateById(productionPlan); } // å é¤å ³èå ³ç³» productOrderPlanMapper.delete(Wrappers.<ProductOrderPlan>lambdaQuery().in(ProductOrderPlan::getProductOrderId, productOrder.getId())); // å é¤è®¢å productOrderMapper.deleteById(productOrder.getId()); // todo å é¤è®¢åä¸çå·¥èºè·¯çº¿å表 return null; } src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.LocalDate; import java.util.List; @Data @@ -20,7 +20,7 @@ private BigDecimal totalAssignedQuantity; @ApiModelProperty(value = "计å宿æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime planCompleteTime; @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planCompleteTime; } src/main/java/com/ruoyi/productionPlan/pojo/ProductOrderPlan.java
@@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -37,6 +40,10 @@ @ApiModelProperty("ç产计åid") private Long productionPlanId; @ApiModelProperty(value = "ä¸åæ°é") @Excel(name = "ä¸åæ°é") private BigDecimal assignedQuantity; @ApiModelProperty("å½å ¥æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -7,6 +7,7 @@ import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -126,6 +127,7 @@ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @ApiModelProperty("å¼å§æ¥æ") @Excel(name = "å¼å§æ¥æ", width = 20, dateFormat = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date startDate; /** @@ -134,6 +136,7 @@ @ApiModelProperty("ç»ææ¥æ") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @Excel(name = "ç»ææ¥æ", width = 20, dateFormat = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endDate; /** @@ -227,4 +230,19 @@ @ApiModelProperty(value = "ä¸åæ°é") @Excel(name = "ä¸åæ°é") private BigDecimal assignedQuantity; /** * 计ç®å©ä½æ¹æ° * @return å©ä½æ¹æ° */ @ApiModelProperty(value = "å©ä½æ¹æ°") public BigDecimal getRemainingVolume() { if (volume == null) { return BigDecimal.ZERO; } if (assignedQuantity == null) { return volume; } return volume.subtract(assignedQuantity); } } src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -107,6 +107,7 @@ // æ¥è¯¢ä¸»ç产计å List<ProductionPlan> plans = productionPlanMapper.selectBatchIds(productionPlanDto.getIds()); plans.sort(Comparator.comparingLong(ProductionPlan::getId)); // æ ¡éªæ¯å¦åå¨ä¸åç产ååç§° String firstProductName = plans.get(0).getProductName(); @@ -121,37 +122,14 @@ } // å å æ¹æ° BigDecimal totalVolume = plans.stream() .map(ProductionPlan::getVolume) // å å å©ä½æ¹æ° BigDecimal totalRemainingVolume = plans.stream() .map(ProductionPlan::getRemainingVolume) .filter(v -> v != null) .reduce(BigDecimal.ZERO, BigDecimal::add); // 夿ä¸åæ°éæ¯å¦å¤§äºçäºæ¹æ° if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalVolume) > 0) { log.warn("æä½å¤±è´¥ï¼ä¸åæ°éä¸è½å¤§äºæ¹æ°"); return false; } // æ ¹æ®ä¸åæ°éï¼ä»ç¬¬ä¸ä¸ªç产计åå¼å§åé æ¹æ° BigDecimal assignedVolume = BigDecimal.ZERO; for (ProductionPlan plan : plans) { BigDecimal volume = plan.getVolume(); if (volume == null) { continue; } if (assignedVolume.add(volume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) { // æåä¸ä¸ªè®¡åï¼åé å©ä½æ¹æ° plan.setAssignedQuantity(productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume)); productionPlanMapper.updateById(plan); break; } // åé å½åè®¡åæ¹æ° plan.setAssignedQuantity(volume); productionPlanMapper.updateById(plan); assignedVolume = assignedVolume.add(volume); // 夿ä¸åæ°éæ¯å¦å¤§äºçäºå©ä½æ¹æ° if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalRemainingVolume) > 0) { throw new BaseException("æä½å¤±è´¥ï¼ä¸åæ°éä¸è½å¤§äºå©ä½æ¹æ°"); } // å建ç产订å @@ -160,11 +138,41 @@ productOrder.setPlanCompleteTime(productionPlanDto.getPlanCompleteTime()); productOrderService.addProductOrder(productOrder); for (Long planId : productionPlanDto.getIds()) { // æ ¹æ®ä¸åæ°éï¼ä»ç¬¬ä¸ä¸ªç产计åå¼å§åé æ¹æ° BigDecimal assignedVolume = BigDecimal.ZERO; for (ProductionPlan plan : plans) { BigDecimal volume = plan.getVolume(); if (volume == null) { continue; } // 计ç®å©ä½æ¹æ° BigDecimal remainingVolume = plan.getRemainingVolume(); if (remainingVolume.compareTo(BigDecimal.ZERO) <= 0) { continue; } ProductOrderPlan productOrderPlan = new ProductOrderPlan(); productOrderPlan.setProductOrderId(productOrder.getId()); productOrderPlan.setProductionPlanId(planId); productOrderPlan.setProductionPlanId(plan.getId()); if (assignedVolume.add(remainingVolume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) { // æåä¸ä¸ªè®¡åï¼åé å©ä½æ¹æ° BigDecimal lastRemainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume); plan.setAssignedQuantity(plan.getAssignedQuantity().add(lastRemainingVolume)); productOrderPlan.setAssignedQuantity(lastRemainingVolume); productionPlanMapper.updateById(plan); productOrderPlanMapper.insert(productOrderPlan); break; } // åé å½åè®¡åæ¹æ° plan.setAssignedQuantity(plan.getAssignedQuantity().add(remainingVolume)); productOrderPlan.setAssignedQuantity(remainingVolume); // æ´æ°ç产计å productionPlanMapper.updateById(plan); // åå»ºå ³èå ³ç³» productOrderPlanMapper.insert(productOrderPlan); assignedVolume = assignedVolume.add(remainingVolume); } return true; } src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
@@ -54,6 +54,12 @@ <if test="c.materialCode != null and c.materialCode != '' "> AND pp.material_code LIKE CONCAT('%',#{c.materialCode},'%') </if> <if test="c.startDate != null"> AND pp.start_date >= DATE_FORMAT(#{c.startDate},'%Y-%m-%d') </if> <if test="c.endDate != null"> AND pp.end_date <= DATE_FORMAT(#{c.endDate},'%Y-%m-%d') </if> </select> <select id="selectSummaryByProductType" resultType="com.ruoyi.productionPlan.dto.ProductionPlanSummaryDto">