Browse Source

车间看板

yzc 1 year ago
parent
commit
1f1adbdad5

+ 29 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionTaskProgressController.java

@@ -1,8 +1,18 @@
 package com.fjhx.mes.controller.production;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.mes.entity.production.bo.WorkshopReportBo;
+import com.fjhx.mes.entity.production.dto.ProductionTaskProgressSelectDto;
+import com.fjhx.mes.entity.production.vo.ProductionTaskProgressVo;
+import com.fjhx.mes.service.production.ProductionTaskProgressService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -16,5 +26,24 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/productionTaskProgress")
 public class ProductionTaskProgressController {
 
+    @Autowired
+    private ProductionTaskProgressService productionTaskProgressService;
+
+    /**
+     * 库存查询
+     */
+    @PostMapping("/workshopReportStatistics")
+    public List<ProductionTaskProgressVo> workshopReportStatistics(@RequestBody ProductionTaskProgressSelectDto dto) {
+        return productionTaskProgressService.workshopReportStatistics(dto);
+    }
+
+    /**
+     * 库存查询
+     */
+    @PostMapping("/workshopReport")
+    public Page<WorkshopReportBo> workshopReport(@RequestBody ProductionTaskProgressSelectDto dto) {
+        return productionTaskProgressService.workshopReport(dto);
+    }
+
 
 }

+ 92 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/bo/WorkshopReportBo.java

@@ -0,0 +1,92 @@
+package com.fjhx.mes.entity.production.bo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class WorkshopReportBo {
+    private Long id;
+    /**
+     * 任务id
+     */
+    private Long taskId;
+    /**
+     * 生产订单id
+     */
+    private Long produceOrderId;
+    /**
+     * 工序id
+     */
+    private Long progressId;
+    /**
+     * 工序名称
+     */
+    private String progressName;
+    /**
+     * 订单号
+     */
+    private String orderCode;
+    /**
+     * 产品id
+     */
+    private Long productId;
+    /**
+     * 产品编号
+     */
+    private String productCode;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 产品长
+     */
+    private BigDecimal productLength;
+    /**
+     * 产品宽
+     */
+    private BigDecimal productWidth;
+    /**
+     * 产品高
+     */
+    private BigDecimal productHeight;
+    /**
+     * 产品颜色
+     */
+    private String productColor;
+    /**
+     * 工单数量
+     */
+    private BigDecimal quantity;
+    /**
+     * 完工数量
+     */
+    private BigDecimal finishQuantity;
+    /**
+     * 欠量
+     */
+    private BigDecimal residueQuantity;
+    /**
+     * 昨天排程数量
+     */
+    private BigDecimal yesterdaySchedulingQuantity;
+    /**
+     * 昨天完成数量
+     */
+    private BigDecimal yesterdayFinishQuantity;
+    /**
+     * 今天排程数量
+     */
+    private BigDecimal todaySchedulingQuantity;
+    /**
+     * 今天完成数量
+     */
+    private BigDecimal todayFinishQuantity;
+    /**
+     * 明天完成数量
+     */
+    private BigDecimal tomorrowSchedulingQuantity;
+}

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionScheduling.java

@@ -47,4 +47,9 @@ public class ProductionScheduling extends BasePo {
      */
     private Long companyId;
 
+    /**
+     * 排程完成数
+     */
+    private Integer finishQuantity;
+
 }

+ 6 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskProgressVo.java

@@ -5,6 +5,7 @@ import com.fjhx.mes.entity.production.po.ProductionTaskProgress;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -32,4 +33,9 @@ public class ProductionTaskProgressVo extends ProductionTaskProgress {
      */
     private Integer schedulingCount;
 
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
 }

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

@@ -1,6 +1,8 @@
 package com.fjhx.mes.mapper.production;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.mes.entity.production.bo.WorkshopReportBo;
 import com.fjhx.mes.entity.production.po.ProductionTaskProgress;
 import com.fjhx.mes.entity.production.vo.ProductionTaskProgressVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
@@ -26,4 +28,9 @@ public interface ProductionTaskProgressMapper extends BaseMapper<ProductionTaskP
      */
     List<ProductionTaskProgressVo> getList(@Param("ew") IWrapper<ProductionTaskProgress> wrapper);
 
+
+    List<ProductionTaskProgressVo> workshopReportStatistics(@Param("ew") IWrapper<ProductionTaskProgress> wrapper);
+
+    Page<WorkshopReportBo> workshopReport(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductionTaskProgress> wrapper);
+
 }

+ 16 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionTaskProgressService.java

@@ -1,8 +1,14 @@
 package com.fjhx.mes.service.production;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.mes.entity.production.bo.WorkshopReportBo;
+import com.fjhx.mes.entity.production.dto.ProductionTaskProgressSelectDto;
 import com.fjhx.mes.entity.production.po.ProductionTaskProgress;
+import com.fjhx.mes.entity.production.vo.ProductionTaskProgressVo;
 import com.ruoyi.common.core.service.BaseService;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -14,4 +20,14 @@ import com.ruoyi.common.core.service.BaseService;
  */
 public interface ProductionTaskProgressService extends BaseService<ProductionTaskProgress> {
 
+
+    /**
+     * 车间统计
+     */
+    List<ProductionTaskProgressVo> workshopReportStatistics(ProductionTaskProgressSelectDto dto);
+
+    /**
+     * 车间看板
+     */
+    Page<WorkshopReportBo> workshopReport(ProductionTaskProgressSelectDto dto);
 }

+ 31 - 4
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionSchedulingServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 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.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.production.dto.ProductionSchedulingDto;
 import com.fjhx.mes.entity.production.dto.ProductionSchedulingSelectDto;
@@ -12,11 +13,13 @@ import com.fjhx.mes.entity.production.po.ProductionScheduling;
 import com.fjhx.mes.entity.production.vo.ProductionSchedulingVo;
 import com.fjhx.mes.mapper.production.ProductionSchedulingMapper;
 import com.fjhx.mes.service.production.ProductionSchedulingService;
+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;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -88,19 +91,43 @@ public class ProductionSchedulingServiceImpl extends ServiceImpl<ProductionSched
     @DSTransactional
     @Override
     public void add(List<ProductionScheduling> dtoList) {
-        for (ProductionScheduling productionSchedulingDto : dtoList) {
-            productionSchedulingDto.setCompanyId(SecurityUtils.getCompanyId());
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        for (ProductionScheduling dto : dtoList) {
+            dto.setCompanyId(SecurityUtils.getCompanyId());
+
+            long count = this.count(q -> q
+                    .eq(ProductionScheduling::getTaskId, dto.getTaskId())
+                    .eq(ProductionScheduling::getProcessesId, dto.getProcessesId())
+                    .eq(ProductionScheduling::getSchedulingDate, dto.getSchedulingDate())
+            );
+            if (count > 0) {
+                throw new ServiceException(sdf.format(dto.getSchedulingDate()) + "已有排程信息,请前往修改或删除!");
+            }
         }
         this.saveBatch(dtoList);
     }
 
     @Override
-    public void edit(ProductionSchedulingDto productionSchedulingDto) {
-        this.updateById(productionSchedulingDto);
+    public void edit(ProductionSchedulingDto dto) {
+        ProductionScheduling oldPs = this.getById(dto.getId());
+        Assert.notEmpty(oldPs, "查询不到排程信息!");
+
+        if (dto.getQuantity() < oldPs.getFinishQuantity()) {
+            throw new ServiceException("排程数量不能小于已完工数量!");
+        }
+
+        this.updateById(dto);
     }
 
     @Override
     public void delete(Long id) {
+        ProductionScheduling oldPs = this.getById(id);
+        Assert.notEmpty(oldPs, "查询不到排程信息!");
+
+        if (oldPs.getFinishQuantity() > 0) {
+            throw new ServiceException("该排程已有完工信息,禁止删除!");
+        }
+
         this.removeById(id);
     }
 

+ 48 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskProgressServiceImpl.java

@@ -1,11 +1,21 @@
 package com.fjhx.mes.service.production.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.mes.entity.production.bo.WorkshopReportBo;
+import com.fjhx.mes.entity.production.dto.ProductionTaskProgressSelectDto;
 import com.fjhx.mes.entity.production.po.ProductionTaskProgress;
+import com.fjhx.mes.entity.production.vo.ProductionTaskProgressVo;
 import com.fjhx.mes.mapper.production.ProductionTaskProgressMapper;
 import com.fjhx.mes.service.production.ProductionTaskProgressService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -18,4 +28,42 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProductionTaskProgressServiceImpl extends ServiceImpl<ProductionTaskProgressMapper, ProductionTaskProgress> implements ProductionTaskProgressService {
 
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    private IWrapper<ProductionTaskProgress> getWorkshopReportWrapper(ProductionTaskProgressSelectDto dto) {
+        IWrapper<ProductionTaskProgress> wrapper = getWrapper();
+        return wrapper;
+    }
+
+    @Override
+    public List<ProductionTaskProgressVo> workshopReportStatistics(ProductionTaskProgressSelectDto dto) {
+        IWrapper<ProductionTaskProgress> wrapper = getWorkshopReportWrapper(dto);
+        wrapper.groupBy("ptp.processes_id");
+        List<ProductionTaskProgressVo> workshopReportStatistics = baseMapper.workshopReportStatistics(wrapper);
+        return workshopReportStatistics;
+    }
+
+    @Override
+    public Page<WorkshopReportBo> workshopReport(ProductionTaskProgressSelectDto dto) {
+        IWrapper<ProductionTaskProgress> wrapper = getWorkshopReportWrapper(dto);
+
+        wrapper.in("DATEDIFF( now(), ps.scheduling_date )", -1, 0, 1);
+
+        Page<WorkshopReportBo> workshopReportBoPage = baseMapper.workshopReport(dto.getPage(), wrapper);
+        List<WorkshopReportBo> records = workshopReportBoPage.getRecords();
+        if (ObjectUtil.isEmpty(records)) {
+            return workshopReportBoPage;
+        }
+        //赋值产品信息
+        productInfoService.attributeAssign(records, WorkshopReportBo::getProductId, (item, productInfo) -> {
+            item.setProductName(productInfo.getName());
+            item.setProductCode(productInfo.getCustomCode());
+            item.setProductLength(productInfo.getLength());
+            item.setProductWidth(productInfo.getWidth());
+            item.setProductHeight(productInfo.getHeight());
+            item.setProductColor(productInfo.getColor());
+        });
+        return workshopReportBoPage;
+    }
 }

+ 57 - 0
hx-mes/src/main/resources/mapper/production/ProductionTaskProgressMapper.xml

@@ -13,4 +13,61 @@
                  LEFT JOIN production_processes pp ON ptp.processes_id = pp.id
             ${ew.customSqlSegment}
     </select>
+    <select id="workshopReport" resultType="com.fjhx.mes.entity.production.bo.WorkshopReportBo">
+        SELECT ptp.id,
+               pod.id                                                    AS task_id,
+               pod.produce_order_id,
+               pp.id                                                     AS progressId,
+               pp.`name`                                                 AS progressName,
+               po.`code`                                                 AS orderCode,
+               pod.product_id,
+               pod.quantity,
+               ptp.finish_quantity,
+               (pod.quantity - ptp.finish_quantity)                      AS residueQuantity,
+               IFNULL((SELECT sum(quantity)
+                       FROM production_scheduling ps
+                       WHERE ps.task_id = pod.id
+                         AND ps.processes_id = ptp.processes_id
+                         AND DATEDIFF(now(), scheduling_date) = - 1), 0) as yesterdaySchedulingQuantity,
+               IFNULL((SELECT sum(finish_quantity)
+                       FROM production_scheduling ps
+                       WHERE ps.task_id = pod.id
+                         AND ps.processes_id = ptp.processes_id
+                         AND DATEDIFF(now(), scheduling_date) = - 1), 0) as yesterdayFinishQuantity,
+               IFNULL((SELECT sum(quantity)
+                       FROM production_scheduling ps
+                       WHERE ps.task_id = pod.id
+                         AND ps.processes_id = ptp.processes_id
+                         AND DATEDIFF(now(), scheduling_date) = 0), 0)   as todaySchedulingQuantity,
+               IFNULL((SELECT sum(finish_quantity)
+                       FROM production_scheduling ps
+                       WHERE ps.task_id = pod.id
+                         AND ps.processes_id = ptp.processes_id
+                         AND DATEDIFF(now(), scheduling_date) = 0), 0)   as todayFinishQuantity,
+               IFNULL((SELECT sum(quantity)
+                       FROM production_scheduling ps
+                       WHERE ps.task_id = pod.id
+                         AND ps.processes_id = ptp.processes_id
+                         AND DATEDIFF(now(), scheduling_date) = 1), 0)   as tomorrowSchedulingQuantity
+        FROM production_task_progress ptp
+                 LEFT JOIN production_processes pp ON ptp.processes_id = pp.id
+                 LEFT JOIN production_order_detail pod ON ptp.task_id = pod.id
+                 LEFT JOIN production_order po ON pod.produce_order_id = po.id
+                 LEFT JOIN production_scheduling ps on ps.task_id = pod.id
+            ${ew.customSqlSegment}
+    </select>
+    <select id="workshopReportStatistics"
+            resultType="com.fjhx.mes.entity.production.vo.ProductionTaskProgressVo">
+        SELECT ptp.processes_id,
+               pp.`name`                          AS progressName,
+               IFNULL(sum(ps.quantity), 0)        AS quantity,
+               IFNULL(sum(ps.finish_quantity), 0) AS finishQuantity
+        FROM production_task_progress ptp
+                 LEFT JOIN production_processes pp ON ptp.processes_id = pp.id
+                 LEFT JOIN production_order_detail pod ON ptp.task_id = pod.id
+                 LEFT JOIN production_scheduling ps ON ps.task_id = pod.id
+            AND ps.processes_id = ptp.processes_id
+            AND DATEDIFF(now(), ps.scheduling_date) = 0
+            ${ew.customSqlSegment}
+    </select>
 </mapper>

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/ext/po/ExtQuotation.java

@@ -130,4 +130,9 @@ public class ExtQuotation extends BasePo {
      * 创建产品状态 0待创建 1创建中 2已创建
      */
     private Integer createProductStatus;
+
+    /**
+     * 归属部门id
+     */
+    private Long ofDeptId;
 }

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/ext/vo/ExtQuotationProductVo.java

@@ -18,6 +18,8 @@ import java.util.List;
 public class ExtQuotationProductVo extends ExtQuotationProduct {
 
     List<ExtQuotationProductBomVo> quotationProductBomList;
+    private String extQuotationCode;
+
     private String productCode;
     private String productName;
     private BigDecimal productLength;

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/sale/po/SaleQuotation.java

@@ -127,4 +127,9 @@ public class SaleQuotation extends BasePo {
     private Integer confirmStatus;
 
     private BigDecimal prodAmount;
+
+    /**
+     * 归属部门id
+     */
+    private Long ofDeptId;
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -438,6 +438,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         if (CollectionUtils.isEmpty(list)) {
             return page;
         }
+
+        //赋值创建人名称
+        UserUtil.assignmentNickName(list, ContractVo::getCreateUser, ContractVo::setSalesmanName);
+
+
         //获取部门列表
         List<SysDept> companyList = deptService.list();
         Map<Long, String> companyMap = companyList.stream().collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));

+ 1 - 0
hx-sale/src/main/java/com/fjhx/sale/service/ext/impl/ExtQuotationProductServiceImpl.java

@@ -111,6 +111,7 @@ public class ExtQuotationProductServiceImpl extends ServiceImpl<ExtQuotationProd
 
         //赋值信息
         for (ExtQuotationProductVo record : records) {
+            //赋值单号
             //赋值BOM信息
             record.setQuotationProductBomList(eqpbMap.get(record.getId()));
             //赋值定制信息

+ 2 - 1
hx-sale/src/main/resources/mapper/ext/ExtQuotationProductMapper.xml

@@ -2,7 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.sale.mapper.ext.ExtQuotationProductMapper">
     <select id="waitCreateProductPage" resultType="com.fjhx.sale.entity.ext.vo.ExtQuotationProductVo">
-        SELECT eqp.*
+        SELECT eqp.*,
+               eq.code as extQuotationCode
         FROM ext_quotation_product eqp
                  JOIN ext_quotation eq
             ${ew.customSqlSegment}