瀏覽代碼

生产任务添加统计以及过滤条件

yzc 1 年之前
父節點
當前提交
137a303e71

+ 6 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/production/ProduceOrderDetailController.java

@@ -1,5 +1,6 @@
 package com.fjhx.mes.controller.production;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.mes.entity.production.dto.ProduceOrderDetailSelectDto;
 import com.fjhx.mes.entity.production.dto.ProductionOrderDetailDto;
@@ -70,4 +71,9 @@ public class ProduceOrderDetailController {
         produceOrderDetailService.editRemark(dto);
     }
 
+    @PostMapping("/taskCount")
+    public JSONObject taskCount(@RequestBody ProduceOrderDetailSelectDto dto) {
+        return produceOrderDetailService.taskCount(dto);
+    }
+
 }

+ 9 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionSchedulingController.java

@@ -77,4 +77,13 @@ public class ProductionSchedulingController {
         return productionSchedulingService.schedulingTaskList();
     }
 
+    /**
+     * 获取所有工序指定日期排程信息
+     */
+    @PostMapping("/getProcessesSchedulingList")
+    List<ProductionSchedulingVo> getProcessesSchedulingList(ProductionSchedulingSelectDto dto) {
+        return productionSchedulingService.getProcessesSchedulingList(dto);
+    }
+
+
 }

+ 13 - 1
hx-mes/src/main/java/com/fjhx/mes/entity/production/dto/ProduceOrderDetailSelectDto.java

@@ -1,5 +1,6 @@
 package com.fjhx.mes.entity.production.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import lombok.Getter;
 import lombok.Setter;
@@ -20,7 +21,7 @@ public class ProduceOrderDetailSelectDto extends BaseSelectDto {
     /**
      * 生产状态 0未开始 1进行中 2已完成
      */
-    private Integer produceStatus;
+    private String produceStatus;
 
     /**
      * 交期开始时间
@@ -62,4 +63,15 @@ public class ProduceOrderDetailSelectDto extends BaseSelectDto {
      */
     private Long processesId;
 
+    /**
+     * 是否排程
+     */
+    private Integer isScheduling;
+
+    /**
+     * 排程时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date schedulingDate;
+
 }

+ 7 - 0
hx-mes/src/main/java/com/fjhx/mes/mapper/production/ProduceOrderDetailMapper.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.mes.entity.production.po.ProductionOrderDetail;
 import com.fjhx.mes.entity.production.vo.ProductionOrderDetailVo;
+import com.fjhx.mes.entity.production.vo.ProductionSchedulingVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -25,4 +28,8 @@ public interface ProduceOrderDetailMapper extends BaseMapper<ProductionOrderDeta
 
     Page<ProductionOrderDetailVo> schedulingTaskPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductionOrderDetail> wrapper);
 
+    /**
+     * 获取所有工序指定日期排程信息
+     */
+    List<ProductionSchedulingVo> getProcessesSchedulingByDay(String dayDate);
 }

+ 6 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/ProduceOrderDetailService.java

@@ -1,5 +1,6 @@
 package com.fjhx.mes.service.production;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.mes.entity.production.dto.ProduceOrderDetailSelectDto;
 import com.fjhx.mes.entity.production.dto.ProductionOrderDetailDto;
@@ -45,4 +46,9 @@ public interface ProduceOrderDetailService extends BaseService<ProductionOrderDe
      * 修改备注
      */
     void editRemark(ProductionOrderDetailDto dto);
+
+    /**
+     * 任务统计
+     */
+    JSONObject taskCount(ProduceOrderDetailSelectDto dto);
 }

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionSchedulingService.java

@@ -44,4 +44,9 @@ public interface ProductionSchedulingService extends BaseService<ProductionSched
      * 获取排程任务列表
      */
     List<ProductionOrderDetailVo> schedulingTaskList();
+
+    /**
+     * 获取所有工序指定日期排程信息
+     */
+    List<ProductionSchedulingVo> getProcessesSchedulingList(ProductionSchedulingSelectDto dto);
 }

+ 39 - 1
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProduceOrderDetailServiceImpl.java

@@ -1,7 +1,9 @@
 package com.fjhx.mes.service.production.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.utils.Assert;
@@ -15,6 +17,7 @@ import com.fjhx.mes.entity.production.po.ProductionOrderDetail;
 import com.fjhx.mes.entity.production.po.ProductionScheduling;
 import com.fjhx.mes.entity.production.po.ProductionTaskProgress;
 import com.fjhx.mes.entity.production.vo.ProductionOrderDetailVo;
+import com.fjhx.mes.entity.production.vo.ProductionSchedulingVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskProgressVo;
 import com.fjhx.mes.mapper.production.ProduceOrderDetailMapper;
 import com.fjhx.mes.mapper.production.ProductionTaskProgressMapper;
@@ -70,6 +73,13 @@ public class ProduceOrderDetailServiceImpl extends ServiceImpl<ProduceOrderDetai
     public Page<ProductionOrderDetailVo> getPage(ProduceOrderDetailSelectDto dto) {
         IWrapper<ProductionOrderDetail> wrapper = getPageCommWrapper(dto);
 
+        //是否排程过滤
+        if (ObjectUtil.isNotEmpty(dto.getIsScheduling())) {
+            wrapper.having("if(count( ps.id )>0,1,0)={0}", dto.getIsScheduling());
+        }
+
+        wrapper.groupBy("pod.id");
+
         Page<ProductionOrderDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
 
         return commPage(page);
@@ -97,7 +107,10 @@ public class ProduceOrderDetailServiceImpl extends ServiceImpl<ProduceOrderDetai
 
 
         //生产状态
-        wrapper.eq("pod", ProductionOrderDetail::getProduceStatus, dto.getProduceStatus());
+        String produceStatus = dto.getProduceStatus();
+        if (ObjectUtil.isNotEmpty(produceStatus)) {
+            wrapper.in("pod", ProductionOrderDetail::getProduceStatus, produceStatus.split(","));
+        }
         //交期-时间范围过滤
         wrapper.ge("po", ProductionOrder::getDeliveryPeriod, dto.getStaDeliveryPeriod());
         wrapper.le("po", ProductionOrder::getDeliveryPeriod, dto.getEndDeliveryPeriod());
@@ -134,6 +147,7 @@ public class ProduceOrderDetailServiceImpl extends ServiceImpl<ProduceOrderDetai
         if (ObjectUtil.isNotEmpty(dto.getContractType())) {
             wrapper.eq("c.contract_type", dto.getContractType());
         }
+
         return wrapper;
     }
 
@@ -347,4 +361,28 @@ public class ProduceOrderDetailServiceImpl extends ServiceImpl<ProduceOrderDetai
         );
     }
 
+    @Override
+    public JSONObject taskCount(ProduceOrderDetailSelectDto dto) {
+        //完成任务查询
+        ProduceOrderDetailSelectDto completedCountDto = BeanUtil.copyProperties(dto, ProduceOrderDetailSelectDto.class);
+        completedCountDto.setProduceStatus("2,5,10");
+        //在手任务查询
+        ProduceOrderDetailSelectDto onHandCountDto = BeanUtil.copyProperties(dto, ProduceOrderDetailSelectDto.class);
+        onHandCountDto.setIsScheduling(0);
+
+        //单个工序查询
+        String dayDate = DateUtil.format(dto.getSchedulingDate(), "yyyy-MM-dd");
+        List<ProductionSchedulingVo> productionSchedulingList = baseMapper.getProcessesSchedulingByDay(dayDate);
+
+        JSONObject json = new JSONObject();
+        json.put("onHandCount", getPage(onHandCountDto).getTotal());//在手任务(没排程的任务数)
+        json.put("completedCount", getPage(completedCountDto).getTotal());
+        json.put("allCount", getPage(dto).getTotal());//总任务数
+        json.put("balanceCount", json.get("allCount"));
+        for (ProductionScheduling productionScheduling : productionSchedulingList) {
+            json.put(productionScheduling.getProcessesId().toString(), productionScheduling.getQuantity());
+        }
+        return json;
+    }
+
 }

+ 19 - 3
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionSchedulingServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.mes.service.production.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,6 +13,7 @@ import com.fjhx.mes.entity.production.po.ProductionOrder;
 import com.fjhx.mes.entity.production.po.ProductionScheduling;
 import com.fjhx.mes.entity.production.vo.ProductionOrderDetailVo;
 import com.fjhx.mes.entity.production.vo.ProductionSchedulingVo;
+import com.fjhx.mes.mapper.production.ProduceOrderDetailMapper;
 import com.fjhx.mes.mapper.production.ProductionSchedulingMapper;
 import com.fjhx.mes.service.production.ProductionSchedulingService;
 import com.ruoyi.common.exception.ServiceException;
@@ -21,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -36,10 +39,12 @@ import java.util.stream.Collectors;
 public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSchedulingMapper, ProductionScheduling> implements ProductionSchedulingService {
 
     private final ProductInfoService productInfoService;
+    private final ProduceOrderDetailMapper produceOrderDetailMapper;
 
     @Autowired
-    public ProductionSchedulingServiceImpl(ProductInfoService productInfoService) {
+    public ProductionSchedulingServiceImpl(ProductInfoService productInfoService, ProduceOrderDetailMapper produceOrderDetailMapper) {
         this.productInfoService = productInfoService;
+        this.produceOrderDetailMapper = produceOrderDetailMapper;
     }
 
     @Override
@@ -55,7 +60,7 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
         wrapper.eq("po", ProductionOrder::getCompanyId, dto.getCompanyId());
 
         //排程日期过滤
-        wrapper.eq("ps", ProductionScheduling::getSchedulingDate, dto.getSchedulingDate());
+        wrapper.eq("ps", ProductionScheduling::getSchedulingDate, DateUtil.format(dto.getSchedulingDate(), "yyyy-MM-dd"));
 
         wrapper.orderByDesc("ps.scheduling_date");
 
@@ -101,6 +106,7 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
         for (ProductionScheduling dto : dtoList) {
             dto.setCompanyId(SecurityUtils.getCompanyId());
 
+            //检查是否重复排程
             long count = this.count(q -> q
                     .eq(ProductionScheduling::getTaskId, dto.getTaskId())
                     .eq(ProductionScheduling::getProcessesId, dto.getProcessesId())
@@ -109,8 +115,8 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
             if (count > 0) {
                 throw new ServiceException(sdf.format(dto.getSchedulingDate()) + "已有排程信息,请前往修改或删除!");
             }
+            this.save(dto);
         }
-        this.saveBatch(dtoList);
     }
 
     @Override
@@ -160,4 +166,14 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
         return voList;
     }
 
+    @Override
+    public List<ProductionSchedulingVo> getProcessesSchedulingList(ProductionSchedulingSelectDto dto) {
+        Date schedulingDate = dto.getSchedulingDate();
+        if (ObjectUtil.isEmpty(schedulingDate)) {
+            schedulingDate = new Date();
+        }
+        String dayDate = DateUtil.format(schedulingDate, "yyyy-MM-dd");
+        return produceOrderDetailMapper.getProcessesSchedulingByDay(dayDate);
+    }
+
 }

+ 11 - 0
hx-mes/src/main/resources/mapper/production/ProduceOrderDetailMapper.xml

@@ -37,6 +37,7 @@
 
     <select id="getPage" resultType="com.fjhx.mes.entity.production.vo.ProductionOrderDetailVo">
         <include refid="page"/>
+        LEFT JOIN production_scheduling ps ON ps.task_id = pod.id
         ${ew.customSqlSegment}
     </select>
 
@@ -47,4 +48,14 @@
         AND ps.processes_id = ptp.processes_id
         ${ew.customSqlSegment}
     </select>
+    <select id="getProcessesSchedulingByDay"
+            resultType="com.fjhx.mes.entity.production.vo.ProductionSchedulingVo">
+        SELECT pp.id                       AS processesId,
+               pp.`name`                   AS processesName,
+               IFNULL(sum(ps.quantity), 0) AS quantity
+        FROM production_processes pp
+                 LEFT JOIN production_scheduling ps ON ps.processes_id = pp.id
+            AND ps.scheduling_date = #{dayDate}
+        GROUP BY pp.id
+    </select>
 </mapper>