Browse Source

生产任务,工单定制

yzc 2 years ago
parent
commit
20e63e7fe0

+ 8 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/work/WorkOrderController.java

@@ -79,4 +79,12 @@ public class WorkOrderController {
         workOrderService.delete(dto.getId());
     }
 
+    /**
+     * 工单分页 嘉新双拓
+     */
+    @PostMapping("/pageByJxst")
+    public Page<WorkOrderVo> getPageByJxst(@RequestBody WorkOrderSelectDto dto) {
+        return workOrderService.getPageByJxst(dto);
+    }
+
 }

+ 10 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskDetailVo.java

@@ -14,4 +14,14 @@ import lombok.Setter;
 @Setter
 public class ProductionTaskDetailVo extends ProductionTaskDetail {
 
+    /**
+     * 工序名称
+     */
+    private String productionProcessesName;
+
+    /**
+     * 累计耗时
+     */
+    private String cumulativeTime;
+
 }

+ 11 - 1
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskVo.java

@@ -5,6 +5,7 @@ import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -32,7 +33,16 @@ public class ProductionTaskVo extends ProductionTask {
     private String personLiableName;
 
     /**
+     * 待排程数
+     */
+    private BigDecimal remainingQuantity;
+    /**
+     * 生产计划编号
+     */
+    private String productionPlanCode;
+
+    /**
      * 生产任务明细列表
      */
-    private List<ProductionTaskDetail> productionTaskDetailList;
+    private List<ProductionTaskDetailVo> productionTaskDetailList;
 }

+ 16 - 2
hx-mes/src/main/java/com/fjhx/mes/entity/work/vo/WorkOrderVo.java

@@ -23,10 +23,14 @@ public class WorkOrderVo extends WorkOrder {
      */
     private String productName;
 
-    /**生产计划列表*/
+    /**
+     * 生产计划列表
+     */
     private List<ProductionPlan> productionPlans;
 
-    /**待排程数量*/
+    /**
+     * 待排程数量
+     */
     private BigDecimal remainingQuantity;
 
     /**
@@ -34,4 +38,14 @@ public class WorkOrderVo extends WorkOrder {
      */
     private BigDecimal sumQuantity;
 
+    /**
+     * 已计划数量
+     */
+    private BigDecimal arrangedQuantity;
+
+    /**
+     * 完成率
+     */
+    private BigDecimal completionRate;
+
 }

+ 59 - 5
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -14,8 +14,10 @@ import com.fjhx.mes.entity.bom.po.BomInfo;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDto;
 import com.fjhx.mes.entity.production.dto.ProductionTaskSelectDto;
 import com.fjhx.mes.entity.production.po.ProductionPlan;
+import com.fjhx.mes.entity.production.po.ProductionProcesses;
 import com.fjhx.mes.entity.production.po.ProductionTask;
 import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
+import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskVo;
 import com.fjhx.mes.entity.technology.po.Technology;
 import com.fjhx.mes.entity.work.po.WorkOrder;
@@ -26,6 +28,7 @@ import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.bom.BomDetailService;
 import com.fjhx.mes.service.bom.BomInfoService;
 import com.fjhx.mes.service.production.ProductionPlanService;
+import com.fjhx.mes.service.production.ProductionProcessesService;
 import com.fjhx.mes.service.production.ProductionTaskDetailService;
 import com.fjhx.mes.service.production.ProductionTaskService;
 import com.fjhx.mes.service.technology.TechnologyService;
@@ -45,10 +48,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.text.DecimalFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -86,6 +87,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     private ApplicableProductsService applicableProductsService;
     @Autowired
     private ProductionTaskDetailService productionTaskDetailService;
+    @Autowired
+    private ProductionProcessesService productionProcessesService;
 
     @Override
     public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
@@ -268,8 +271,59 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     @Override
     public ProductionTaskVo detailByJxst(Long id) {
         ProductionTaskVo detail = detail(id);
+        //赋值待排程数
+        Long productionPlanId = detail.getProductionPlanId();
+        ProductionPlan productionPlan = productionPlanService.getById(productionPlanId);
+        List<ProductionTask> list1 = list(q -> q.eq(ProductionTask::getProductionPlanId, productionPlan.getId()));
+        BigDecimal remainingQuantity = productionPlan.getQuantity().subtract(BigDecimal.valueOf(list1.size()));
+        detail.setRemainingQuantity(remainingQuantity);
+        detail.setProductionPlanCode(productionPlan.getCode());
+
         List<ProductionTaskDetail> list = productionTaskDetailService.list(q -> q.eq(ProductionTaskDetail::getProductionTaskId, id));
-        detail.setProductionTaskDetailList(list);
+        List<ProductionTaskDetailVo> productionTaskDetailVos = BeanUtil.copyToList(list, ProductionTaskDetailVo.class);
+        //赋值当前工序名称
+        WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
+        //判断是否是定制工单 获取指定工序
+        if ("1".equals(workOrder.getIsCustomized())) {
+            //获取定制工序
+            Map<Long, String> gxmap = workOrderProductionProcessesService.mapKV(WorkOrderProductionProcesses::getId, WorkOrderProductionProcesses::getName, q -> q.eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId()));
+            if (ObjectUtil.isNotEmpty(gxmap)) {
+                for (ProductionTaskDetailVo productionTaskDetail : productionTaskDetailVos) {
+                    String gxname = gxmap.get(productionTaskDetail.getProductionProcessesId());
+                    productionTaskDetail.setProductionProcessesName(gxname);
+                }
+            }
+        } else {
+            //获取基本工序
+            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
+            if (ObjectUtil.isNotEmpty(applicableProducts)) {
+                Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
+                if (ObjectUtil.isNotEmpty(technology)) {
+                    String processRoute = technology.getProcessRoute();
+                    if (ObjectUtil.isNotEmpty(processRoute)) {
+                        String[] split = processRoute.split(",");
+                        Map<Long, String> gxmap = productionProcessesService.mapKV(ProductionProcesses::getId, ProductionProcesses::getName, q -> q.in(ProductionProcesses::getId, split));
+                        for (ProductionTaskDetailVo productionTaskDetail : productionTaskDetailVos) {
+                            String gxname = gxmap.get(productionTaskDetail.getProductionProcessesId());
+                            productionTaskDetail.setProductionProcessesName(gxname);
+                        }
+                    }
+                }
+            }
+        }
+        //赋值累计耗时
+        for (ProductionTaskDetailVo productionTaskDetail : productionTaskDetailVos) {
+            long diff = new Date().getTime() - productionTaskDetail.getCreateTime().getTime();
+            DecimalFormat decimalFormat = new DecimalFormat("#0.00");
+            String formattedResult = decimalFormat.format(diff / 60.0 / 60.0 / 1000.0);
+            productionTaskDetail.setCumulativeTime(formattedResult);
+
+            //判断是否完工
+            if(productionTaskDetail.getFinishStatus()==1){
+                productionTaskDetail.setProductionProcessesName("已完成");
+            }
+        }
+        detail.setProductionTaskDetailList(productionTaskDetailVos);
         return detail;
     }
 

+ 1 - 1
hx-mes/src/main/java/com/fjhx/mes/service/work/WorkOrderService.java

@@ -51,5 +51,5 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
     void delete(Long id);
 
 
-
+    Page<WorkOrderVo> getPageByJxst(WorkOrderSelectDto dto);
 }

+ 47 - 7
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -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.BomInfo;
 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.WorkOrderSelectDto;
 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.BomInfoService;
 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.utils.code.CodeEnum;
 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 java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -65,14 +70,21 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     private StockService stockService;
     @Autowired
     private StockFrozenService stockFrozenService;
+    @Autowired
+    private ProductionTaskService productionTaskService;
+    @Autowired
+    private ProductionTaskDetailService productionTaskDetailService;
 
     @Override
     public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
         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.like("wo", WorkOrder::getCode, dto.getKeyword());
-        wrapper.or();
-        wrapper.like("wo", WorkOrder::getQuantity, dto.getKeyword());
         Page<WorkOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<WorkOrderVo> records = page.getRecords();
         //赋值产品名
@@ -129,17 +141,17 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         this.save(workOrderDto);
         //获取产品信息
         ProductInfo productInfo = productInfoService.getById(workOrderDto.getProductId());
-        if(ObjectUtil.isEmpty(productInfo)){
+        if (ObjectUtil.isEmpty(productInfo)) {
             throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
         }
         //搜索BOM明细并到冻结库存
         BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()));
         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()));
         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());
         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);
             Map<Long, StockFrozen> stockFrozenMap = stockFrozenService.mapKEntity(StockFrozen::getProductId, q -> q.in(StockFrozen::getProductId, productIds));
             StockFrozen stockFrozen = stockFrozenMap.get(bomDetail.getProductId());
-            if(ObjectUtil.isEmpty(stockFrozen)){
+            if (ObjectUtil.isEmpty(stockFrozen)) {
                 stockFrozen = new StockFrozen();
                 stockFrozen.setProductId(bomDetail.getProductId());
                 stockFrozen.setFrozenQuantity(BigDecimal.ZERO);
@@ -220,4 +232,32 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         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;
+    }
+
 }

+ 1 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -171,6 +171,7 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
                     s.setProductName(p.getName());
                     s.setProductSpec(p.getSpec());
                     s.setProductCustomCode(p.getCustomCode());
+                    s.setProductDefinition(p.getDefinition());
 
                     //维多利亚赋值部门id
                     String victoriatouristJson = p.getVictoriatouristJson();