yzc пре 1 година
родитељ
комит
7ed9378338

+ 29 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/report/po/ReportLossesDetails.java

@@ -60,4 +60,33 @@ public class ReportLossesDetails extends BasePo {
      */
     private Long companyId;
 
+    /**
+     * 报损工序id
+     */
+    private Long processId;
+
+    /**
+     * 报工单价
+     */
+    private BigDecimal materialPrice;
+
+    /**
+     * 生产任务id
+     */
+    private Long prodTaskId;
+
+    /**
+     * 返工道数
+     */
+    private Integer reCount;
+    /**
+     * 返工价格
+     */
+    private BigDecimal rePrice;
+
+    /**
+     * 产品id_冗余
+     */
+    private Long productId;
+
 }

+ 70 - 2
hx-mes/src/main/java/com/fjhx/mes/service/report/impl/ReportLossesDetailsServiceImpl.java

@@ -6,23 +6,31 @@ import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.production.po.ProductionOrder;
+import com.fjhx.mes.entity.production.po.ProductionOrderDetail;
+import com.fjhx.mes.entity.production.po.ProductionProcesses;
 import com.fjhx.mes.entity.report.dto.ReportLossesDetailsDto;
 import com.fjhx.mes.entity.report.dto.ReportLossesDetailsSelectDto;
 import com.fjhx.mes.entity.report.po.ReportLossesDetails;
 import com.fjhx.mes.entity.report.vo.ReportLossesDetailsVo;
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
 import com.fjhx.mes.mapper.report.ReportLossesDetailsMapper;
+import com.fjhx.mes.service.production.ProduceOrderDetailService;
 import com.fjhx.mes.service.production.ProduceOrderService;
+import com.fjhx.mes.service.production.ProductionProcessesService;
 import com.fjhx.mes.service.report.ReportLossesDetailsService;
+import com.fjhx.mes.service.technology.TechnologyProcessLineService;
 import com.fjhx.tenant.utils.DeptUstil;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +48,6 @@ import java.util.stream.Collectors;
  * 报损管理 服务实现类
  * </p>
  *
- * @author
  * @since 2024-01-26
  */
 @Service
@@ -50,13 +57,19 @@ public class ReportLossesDetailsServiceImpl extends ServiceImpl<ReportLossesDeta
     private final StockWaitService stockWaitService;
     private final StockWaitDetailsService stockWaitDetailsService;
     private final ProduceOrderService produceOrderService;
+    private final ProductionProcessesService productionProcessesService;
+    private final TechnologyProcessLineService technologyProcessLineService;
+    private final ProduceOrderDetailService produceOrderDetailService;
 
     @Autowired
-    public ReportLossesDetailsServiceImpl(ProductInfoService productInfoService, StockWaitService stockWaitService, StockWaitDetailsService stockWaitDetailsService, ProduceOrderService produceOrderService) {
+    public ReportLossesDetailsServiceImpl(ProductInfoService productInfoService, StockWaitService stockWaitService, StockWaitDetailsService stockWaitDetailsService, ProduceOrderService produceOrderService, ProductionProcessesService productionProcessesService, TechnologyProcessLineService technologyProcessLineService, ProduceOrderDetailService produceOrderDetailService) {
         this.productInfoService = productInfoService;
         this.stockWaitService = stockWaitService;
         this.stockWaitDetailsService = stockWaitDetailsService;
         this.produceOrderService = produceOrderService;
+        this.productionProcessesService = productionProcessesService;
+        this.technologyProcessLineService = technologyProcessLineService;
+        this.produceOrderDetailService = produceOrderDetailService;
     }
 
     @Override
@@ -145,6 +158,51 @@ public class ReportLossesDetailsServiceImpl extends ServiceImpl<ReportLossesDeta
         Long companyId = SecurityUtils.getCompanyId();
         dto.setCompanyId(companyId);
 
+        ProductInfo materialInfo = productInfoService.getById(dto.getMaterialId());
+        Assert.notEmpty(materialInfo, "查询不到报损物品信息!");
+
+        //赋值报损时物料价格
+        dto.setMaterialPrice(materialInfo.getPrice());
+
+        //报损原材料 有工序 计算返工成本,返工道数
+        Long processId = dto.getProcessId();
+        if (ObjectUtil.isNotEmpty(processId) && ObjectUtil.notEqual(processId, -1)) {
+            //获取任务产品 工艺线路
+            ProductionOrderDetail productionOrderDetail = produceOrderDetailService.getById(dto.getProdTaskId());
+            Assert.notEmpty(productionOrderDetail, "查询不到生产任务信息!!!");
+            ProductInfo productInfo = productInfoService.getById(productionOrderDetail.getProductId());
+            Assert.notEmpty(productInfo, "查询不到产品信息");
+
+            //冗余产品id
+            dto.setProductId(productionOrderDetail.getProductId());
+
+            Map<Long, TechnologyProcessLine> technologyLineMap = technologyProcessLineService
+                    .mapKEntity(TechnologyProcessLine::getTargetProcessesId, q -> q
+                            .eq(TechnologyProcessLine::getTechnologyId, productInfo.getTechnologyId()));
+
+            Long tempProcessId = processId;
+            int reCount = 0;
+            BigDecimal rePrice = BigDecimal.ZERO;
+            while (true) {
+                ProductionProcesses productionProcesses = productionProcessesService.getById(tempProcessId);
+                TechnologyProcessLine technologyProcessLine = technologyLineMap.get(tempProcessId);
+                if (ObjectUtil.isEmpty(technologyProcessLine)) {
+                    break;
+                }
+                tempProcessId = technologyProcessLine.getSourceProcessesId();
+
+                reCount++;
+
+                //赋值报损工序价格
+                BigDecimal costPrice = productionProcesses.getCostPrice();
+                costPrice = ObjectUtil.isEmpty(costPrice) ? BigDecimal.ZERO : costPrice;
+                rePrice = rePrice.add(costPrice);
+            }
+            //赋值成本价
+            dto.setReCount(reCount);
+            dto.setRePrice(rePrice);
+        }
+
         this.save(dto);
 
         //保存附件
@@ -186,8 +244,18 @@ public class ReportLossesDetailsServiceImpl extends ServiceImpl<ReportLossesDeta
     }
 
     @Override
+    @DSTransactional
     public void delete(Long id) {
         this.removeById(id);
+
+        StockWait stockWait = stockWaitService.getOne(q -> q.eq(StockWait::getBusinessId, id));
+        if (ObjectUtil.equals(stockWait.getStatus(), 0)) {
+            throw new ServiceException("报损已出库,禁止删除!");
+        }
+
+        //删除待出库
+        stockWaitService.removeById(stockWait.getId());
+        stockWaitDetailsService.remove(q -> q.eq(StockWaitDetails::getStockWaitId, stockWait.getId()));
     }
 
     @Override