|
@@ -11,6 +11,8 @@ import com.fjhx.item.service.product.ProductInfoService;
|
|
import com.fjhx.mes.entity.bom.po.BomDetail;
|
|
import com.fjhx.mes.entity.bom.po.BomDetail;
|
|
import com.fjhx.mes.entity.bom.po.BomInfo;
|
|
import com.fjhx.mes.entity.bom.po.BomInfo;
|
|
import com.fjhx.mes.entity.production.po.ProductionPlan;
|
|
import com.fjhx.mes.entity.production.po.ProductionPlan;
|
|
|
|
+import com.fjhx.mes.entity.production.po.ProductionTask;
|
|
|
|
+import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
|
|
import com.fjhx.mes.entity.work.dto.WorkOrderDto;
|
|
import com.fjhx.mes.entity.work.dto.WorkOrderDto;
|
|
import com.fjhx.mes.entity.work.dto.WorkOrderSelectDto;
|
|
import com.fjhx.mes.entity.work.dto.WorkOrderSelectDto;
|
|
import com.fjhx.mes.entity.work.po.WorkOrder;
|
|
import com.fjhx.mes.entity.work.po.WorkOrder;
|
|
@@ -19,6 +21,8 @@ import com.fjhx.mes.mapper.work.WorkOrderMapper;
|
|
import com.fjhx.mes.service.bom.BomDetailService;
|
|
import com.fjhx.mes.service.bom.BomDetailService;
|
|
import com.fjhx.mes.service.bom.BomInfoService;
|
|
import com.fjhx.mes.service.bom.BomInfoService;
|
|
import com.fjhx.mes.service.production.ProductionPlanService;
|
|
import com.fjhx.mes.service.production.ProductionPlanService;
|
|
|
|
+import com.fjhx.mes.service.production.ProductionTaskDetailService;
|
|
|
|
+import com.fjhx.mes.service.production.ProductionTaskService;
|
|
import com.fjhx.mes.service.work.WorkOrderService;
|
|
import com.fjhx.mes.service.work.WorkOrderService;
|
|
import com.fjhx.mes.utils.code.CodeEnum;
|
|
import com.fjhx.mes.utils.code.CodeEnum;
|
|
import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
@@ -33,6 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
@@ -65,14 +70,21 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
private StockService stockService;
|
|
private StockService stockService;
|
|
@Autowired
|
|
@Autowired
|
|
private StockFrozenService stockFrozenService;
|
|
private StockFrozenService stockFrozenService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ProductionTaskService productionTaskService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ProductionTaskDetailService productionTaskDetailService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
|
|
public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
|
|
IWrapper<WorkOrder> wrapper = getWrapper();
|
|
IWrapper<WorkOrder> wrapper = getWrapper();
|
|
|
|
+ if(ObjectUtil.isNotEmpty(dto.getKeyword())){
|
|
|
|
+ wrapper.and(q->q.like("wo", WorkOrder::getCode, dto.getKeyword())
|
|
|
|
+ .or()
|
|
|
|
+ .like("wo", WorkOrder::getQuantity, dto.getKeyword()));
|
|
|
|
+ }
|
|
|
|
+ wrapper.eq("wo",WorkOrder::getSource,dto.getSource());
|
|
wrapper.orderByDesc("wo", WorkOrder::getId);
|
|
wrapper.orderByDesc("wo", WorkOrder::getId);
|
|
- wrapper.like("wo", WorkOrder::getCode, dto.getKeyword());
|
|
|
|
- wrapper.or();
|
|
|
|
- wrapper.like("wo", WorkOrder::getQuantity, dto.getKeyword());
|
|
|
|
Page<WorkOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
Page<WorkOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
List<WorkOrderVo> records = page.getRecords();
|
|
List<WorkOrderVo> records = page.getRecords();
|
|
//赋值产品名
|
|
//赋值产品名
|
|
@@ -129,17 +141,17 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
this.save(workOrderDto);
|
|
this.save(workOrderDto);
|
|
//获取产品信息
|
|
//获取产品信息
|
|
ProductInfo productInfo = productInfoService.getById(workOrderDto.getProductId());
|
|
ProductInfo productInfo = productInfoService.getById(workOrderDto.getProductId());
|
|
- if(ObjectUtil.isEmpty(productInfo)){
|
|
|
|
|
|
+ if (ObjectUtil.isEmpty(productInfo)) {
|
|
throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
|
|
throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
|
|
}
|
|
}
|
|
//搜索BOM明细并到冻结库存
|
|
//搜索BOM明细并到冻结库存
|
|
BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()));
|
|
BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()));
|
|
if (ObjectUtil.isEmpty(bomInfo)) {
|
|
if (ObjectUtil.isEmpty(bomInfo)) {
|
|
- throw new ServiceException("查询不到产品的BOM信息 产品名称->"+productInfo.getName());
|
|
|
|
|
|
+ throw new ServiceException("查询不到产品的BOM信息 产品名称->" + productInfo.getName());
|
|
}
|
|
}
|
|
List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
|
|
List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
|
|
if (ObjectUtil.isEmpty(bomDetailList)) {
|
|
if (ObjectUtil.isEmpty(bomDetailList)) {
|
|
- throw new ServiceException("查询不到产品BOM明细 产品名称->"+productInfo.getName());
|
|
|
|
|
|
+ throw new ServiceException("查询不到产品BOM明细 产品名称->" + productInfo.getName());
|
|
}
|
|
}
|
|
List<Long> productIds = bomDetailList.stream().map(BomDetail::getProductId).collect(Collectors.toList());
|
|
List<Long> productIds = bomDetailList.stream().map(BomDetail::getProductId).collect(Collectors.toList());
|
|
Map<Long, List<Stock>> productMap = stockService.mapKGroup(Stock::getProductId, q -> q.in(Stock::getProductId, productIds));
|
|
Map<Long, List<Stock>> productMap = stockService.mapKGroup(Stock::getProductId, q -> q.in(Stock::getProductId, productIds));
|
|
@@ -157,7 +169,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
BigDecimal quantity = stocks.stream().map(Stock::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal quantity = stocks.stream().map(Stock::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
Map<Long, StockFrozen> stockFrozenMap = stockFrozenService.mapKEntity(StockFrozen::getProductId, q -> q.in(StockFrozen::getProductId, productIds));
|
|
Map<Long, StockFrozen> stockFrozenMap = stockFrozenService.mapKEntity(StockFrozen::getProductId, q -> q.in(StockFrozen::getProductId, productIds));
|
|
StockFrozen stockFrozen = stockFrozenMap.get(bomDetail.getProductId());
|
|
StockFrozen stockFrozen = stockFrozenMap.get(bomDetail.getProductId());
|
|
- if(ObjectUtil.isEmpty(stockFrozen)){
|
|
|
|
|
|
+ if (ObjectUtil.isEmpty(stockFrozen)) {
|
|
stockFrozen = new StockFrozen();
|
|
stockFrozen = new StockFrozen();
|
|
stockFrozen.setProductId(bomDetail.getProductId());
|
|
stockFrozen.setProductId(bomDetail.getProductId());
|
|
stockFrozen.setFrozenQuantity(BigDecimal.ZERO);
|
|
stockFrozen.setFrozenQuantity(BigDecimal.ZERO);
|
|
@@ -220,4 +232,32 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
this.removeById(id);
|
|
this.removeById(id);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public Page<WorkOrderVo> getPageByJxst(WorkOrderSelectDto dto) {
|
|
|
|
+ Page<WorkOrderVo> page = getPage(dto);
|
|
|
|
+ List<WorkOrderVo> records = page.getRecords();
|
|
|
|
+ for (WorkOrderVo workOrderVo : records) {
|
|
|
|
+ //赋值已计划数量
|
|
|
|
+ workOrderVo.setArrangedQuantity(workOrderVo.getQuantity().subtract(workOrderVo.getRemainingQuantity()));
|
|
|
|
+ //赋值完成率
|
|
|
|
+ long count =0;
|
|
|
|
+ //获取工单下的所有计划
|
|
|
|
+ List<Long> productionPlanIds = productionPlanService.listObject(ProductionPlan::getId,
|
|
|
|
+ q -> q.eq(ProductionPlan::getWorkOrderId, workOrderVo.getId()));
|
|
|
|
+ if (ObjectUtil.isNotEmpty(productionPlanIds)) {
|
|
|
|
+ //获取计划下的所有任务
|
|
|
|
+ List<Long> productionTaskIds = productionTaskService.listObject(ProductionTask::getId,
|
|
|
|
+ q -> q.in(ProductionTask::getId, productionPlanIds));
|
|
|
|
+ if (ObjectUtil.isNotEmpty(productionTaskIds)) {
|
|
|
|
+ count = productionTaskDetailService.count(q ->
|
|
|
|
+ q.in(ProductionTaskDetail::getProductionTaskId, productionTaskIds)
|
|
|
|
+ .eq(ProductionTaskDetail::getFinishStatus, 1));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ BigDecimal divide = BigDecimal.valueOf(count).divide(workOrderVo.getQuantity(), 2, RoundingMode.HALF_UP);
|
|
|
|
+ workOrderVo.setCompletionRate(divide);
|
|
|
|
+ }
|
|
|
|
+ return page;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|