Min 1 年之前
父节点
当前提交
4763dbfbef

+ 5 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ReportController.java

@@ -1596,5 +1596,10 @@ public class ReportController {
     public HttpRespMsg deleteReport(String id) {
         return reportService.deleteReport(id);
     }
+
+    @RequestMapping("/productionQuantityList")
+    public HttpRespMsg productionQuantityList(Integer productId,String startDate,String endDate){
+        return reportService.productionQuantityList(productId,startDate,endDate);
+    }
 }
 

+ 2 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ReportService.java

@@ -142,4 +142,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg exportReport(String startDate, String endDate, Integer planId, Integer stateKey, Integer departmentId, HttpServletRequest request);
 
     HttpRespMsg deleteReport(String id);
+
+    HttpRespMsg productionQuantityList(Integer productId, String startDate, String endDate);
 }

+ 3 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanProcedureTotalServiceImpl.java

@@ -1,6 +1,7 @@
 package com.management.platform.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
@@ -56,6 +57,7 @@ public class PlanProcedureTotalServiceImpl extends ServiceImpl<PlanProcedureTota
         List<HashMap> dataList = prodProcedureTeamMapper.getReportForWorkList(user.getId(),vehicleNum);
         //抽取出所有的planId
         List<Integer> planIdList = dataList.stream().map(item -> (Integer) item.get("planId")).collect(Collectors.toList());
+        List<Integer> teamIds = dataList.stream().map(item -> (Integer) item.get("id")).collect(Collectors.toList());
         //重新封装成两层结构,第一层为planId,第二层为planId下的数据
         List<HashMap> resultList = new ArrayList<>();
         Integer prePlanId = null;
@@ -80,6 +82,7 @@ public class PlanProcedureTotalServiceImpl extends ServiceImpl<PlanProcedureTota
                 planMap.put("plan_type", map.get("plan_type"));
                 planMap.put("num", map.get("num"));
                 planMap.put("procedureList", procedureList);
+                planMap.put("isReported", map.get("isReported"));
                 resultList.add(planMap);
             } else {
                 procedureList = (List<HashMap>) resultList.get(resultList.size() - 1).get("procedureList");

+ 11 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java

@@ -186,13 +186,22 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         );
 
         if(count==0){
-
             prodProcedureMapper.delete(new LambdaQueryWrapper<ProdProcedure>().eq(id!=null,ProdProcedure::getProductId,id));
             prodMaterialMapper.delete(new LambdaQueryWrapper<ProdMaterial>().eq(id!=null,ProdMaterial::getProductId,id));
             productMapper.deleteById(id);
 
         }else{
-            msg.setError("该产品已被使用!");
+            List<Plan> planList = planMapper.selectList(new LambdaQueryWrapper<Plan>().eq(Plan::getProductId, id));
+            StringBuilder sb=new StringBuilder();
+            for (int i = 0; i < planList.size(); i++) {
+                Plan p = planList.get(i);
+                if(i<planList.size()-1){
+                    sb.append(p.getProductSchedulingNum()+"/");
+                }else {
+                    sb.append(p.getProductSchedulingNum());
+                }
+            }
+            msg.setError("该产品已被计划["+sb.toString()+"]使用!");
         }
 
         return msg;

+ 85 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -114,6 +114,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     RestTemplate restTemplate;
     @Resource
     private ProductMapper productMapper;
+    @Resource
+    private ProdProcedureMapper prodProcedureMapper;
 
     @Value(value = "${upload.path}")
     private String path;
@@ -4598,4 +4600,87 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         return httpRespMsg;
     }
+
+    @Override
+    public HttpRespMsg productionQuantityList(Integer productId, String startDate, String endDate) {
+        HttpRespMsg msg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        //获取所有产品信息
+        List<Product> products = productMapper.selectList(new LambdaQueryWrapper<Product>().eq(productId != null, Product::getId, productId).eq(Product::getCompanyId,companyId));
+        List<Integer> productIds = products.stream().map(Product::getId).distinct().collect(Collectors.toList());
+        //获取产品下的所有工序数据
+        List<ProdProcedure> prodProcedureList = prodProcedureMapper.selectList(new LambdaQueryWrapper<ProdProcedure>().in(productIds != null, ProdProcedure::getProductId, productIds).eq(ProdProcedure::getCompanyId,companyId));
+        //获取产品下所有已完工的日报数据
+        LambdaQueryWrapper<Report> reportLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        reportLambdaQueryWrapper.eq(Report::getStatus, 2).in(productIds != null, Report::getProductId, productIds).eq(Report::getCompanyId,companyId);
+        if(!StringUtils.isEmpty(startDate)&&!StringUtils.isEmpty(endDate)){
+            reportLambdaQueryWrapper.between(Report::getCreateDate,startDate,endDate);
+        }
+        List<Report> reportList = reportMapper.selectList(reportLambdaQueryWrapper);
+        List<Integer> reportIds = reportList.stream().map(Report::getId).distinct().collect(Collectors.toList());
+        List<ReportSteelNum> reportSteelNums = reportSteelNumMapper.selectList(new LambdaQueryWrapper<ReportSteelNum>().in(reportIds != null, ReportSteelNum::getReportId, reportIds));
+        List<Map<String,Object>> resultMapList=new ArrayList<>();
+        for (Product product : products) {
+            Map<String,Object> resultMap=new HashMap<>();
+            resultMap.put("productName",product.getName());
+            //完整件数
+            Integer integrated=0;
+            //凑整件数
+            Integer rounding=0;
+            //
+            Integer converted=0;
+            //找到产品下的工序
+            List<ProdProcedure> targetProdProcedures = prodProcedureList.stream().filter(p -> p.getProductId().equals(product.getId())).collect(Collectors.toList());
+            //过滤工序id 作为完整件数 需要路过的全部工序
+            List<Integer> targetProdProduceIds = targetProdProcedures.stream().map(ProdProcedure::getId).collect(Collectors.toList());
+            //找到产品下的所日报
+            List<Report> targetReportList = reportList.stream().filter(r ->r.getProductId()!=null&& r.getProductId().equals(product.getId())).collect(Collectors.toList());
+            //找到目标下的所有钢印号数据
+            List<Integer> targetReportIds = targetReportList.stream().map(Report::getId).distinct().collect(Collectors.toList());
+            //过滤已经填报过的所有钢印号去重
+            List<ReportSteelNum> targetReportSteelNums = reportSteelNums.stream().filter(r -> targetReportIds.contains(r.getReportId())).collect(Collectors.toList());
+            List<String> steelNums = targetReportSteelNums.stream().map(ReportSteelNum::getSteelNum).distinct().collect(Collectors.toList());
+            for (String steelNum : steelNums) {
+                //找到该产品下填报了该钢印号的所有日报数据
+                List<Integer> hasReportIds = reportSteelNums.stream().filter(r -> r.getSteelNum().equals(steelNum)).collect(Collectors.toList()).stream().map(ReportSteelNum::getReportId).collect(Collectors.toList());
+                List<Report> hasReportList = targetReportList.stream().filter(r->hasReportIds.contains(r.getId())).collect(Collectors.toList());
+                //过滤日报所填了哪些工序
+                List<Integer> hasReportProdProduceIds = hasReportList.stream().map(Report::getProdProcedureId).collect(Collectors.toList());
+                //如果全包含了所需路过的全部工序内容 就算完整件数
+                if(hasReportProdProduceIds.containsAll(targetProdProduceIds)){
+                    integrated+=1;
+                }else {
+                    //如果没有包含所需路过的全部工序内容 (有任意工序可以共同完成)-->凑整
+                    //根据当前钢印号已经填报的内容 对比出没有填报的工序内容
+                    List<Integer> hasNotReportProdProduceIds=new ArrayList<>();
+                    targetProdProduceIds.forEach(tp->{
+                        if(!hasReportProdProduceIds.contains(tp)){
+                            hasNotReportProdProduceIds.add(tp);
+                        }
+                    });
+                    //所有已填报的钢印号有任意满足 上面未填报工序集合 就算凑整件数
+                    //找到所有填报了未填报工序日报数据
+                    List<Report> comparatorReportList = targetReportList.stream().filter(r ->r.getProdProcedureId()!=null && hasNotReportProdProduceIds.contains(r.getProdProcedureId())).collect(Collectors.toList());
+                    //过滤这些日报下的工序数据
+                    List<Integer> targetComparator = comparatorReportList.stream().map(Report::getProdProcedureId).distinct().collect(Collectors.toList());
+                    boolean match = targetComparator.containsAll(hasNotReportProdProduceIds);
+                    if(match){
+                        rounding+=1;
+                    }else {
+                        converted+=1;
+                    }
+                }
+
+            }
+            resultMap.put("integrated",integrated);
+            resultMap.put("rounding",rounding);
+            resultMap.put("converted",converted);
+            BigDecimal bigDecimal=new BigDecimal(integrated);
+            bigDecimal=bigDecimal.add(new BigDecimal(rounding)).add(new BigDecimal(converted));
+            resultMap.put("total",bigDecimal.doubleValue());
+            resultMapList.add(resultMap);
+        }
+        msg.setData(resultMapList);
+        return msg;
+    }
 }

+ 2 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ProdProcedureTeamMapper.xml

@@ -27,7 +27,8 @@
     <select id="getReportForWorkList" resultType="java.util.HashMap" >
         SELECT a.*, plan_procedure_total.plan_id, plan_procedure_total.prod_procedure_id,plan_procedure_total.total_working_hours,plan_procedure_total.total_wages, date_format(plan.`start_date`,'%Y-%m-%d') as start_date, date_format(plan.`end_date`,'%Y-%m-%d') as end_date, plan.`plan_type`,
         plan.`product_scheduling_num`,plan.task_type_name,plan.task_name,plan.task_change_notice_num,
-        product.`name` AS product_name,prod_procedure.name AS procedure_name, prod_procedure.check_type, plan.check_type as plan_check_type,plan.vehicle_num_start,plan.vehicle_num_end,plan.num
+        product.`name` AS product_name,prod_procedure.name AS procedure_name, prod_procedure.check_type, plan.check_type as plan_check_type,plan.vehicle_num_start,plan.vehicle_num_end,plan.num,
+        (case when (select count(1) from report where user_procedure_team_id=a.id and creator_id=#{userId} and create_date=DATE_FORMAT(DATE(NOW()),'%Y-%m-%d'))>0 then 1 else 0 end ) isReported
         FROM prod_procedure_team a
         left join plan_procedure_total on plan_procedure_total.id = a.plan_procedure_id
         LEFT JOIN plan ON plan.id = plan_procedure_total.plan_id

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml

@@ -312,7 +312,7 @@
 
     <select id="getPlanRealTimeProgressList" resultType="java.util.Map">
         select b.id as planId,(Case when b.plan_type=0 then b.product_scheduling_num else b.task_change_notice_num end) as taskName,
-        b.foreman_name as userName,IFNULL(SUM(d.work_time),0) as planWorkTime,SUM(d.job_of_money) as planCost,
+        b.foreman_name as userName,IFNULL(ROUND(SUM(d.work_time),2),0) as planWorkTime,SUM(d.job_of_money) as planCost,
         IFNULL(SUM((select SUM(working_time) from report where user_procedure_team_id = d.id)),0)  as nowWorkTime,
         SUM((select SUM(cost) from report where user_procedure_team_id = d.id)) as nowCost
         from plan_procedure_total a

+ 9 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/workView.vue

@@ -40,6 +40,7 @@
 
           <!-- 列表内容 -->
           <div class="distribution_box" v-for="item, index in prod.procedureList" :key="index" @click="reportItem(item, prod)">
+            <div class="distribution_box_active" v-if="prod.isReported == 1"></div>
             <!-- 状态 -->
             <div class="statusLeft" :style="`background: ${statusColor[item.status]}`" v-if="item.status"></div>
             <div v-if="reportBoolean" class="marginBtnPro">{{ item.productName }}</div>
@@ -447,6 +448,14 @@ export default {
       margin-bottom: 15px;
       position: relative;
       overflow: hidden;
+      .distribution_box_active {
+        position: absolute;
+        width: 4px;
+        height: 100%;
+        left: 0;
+        top: 0;
+        background: rgb(98, 236, 1);
+      }
 
       .distribution_ItemBom {
         font-size: 16px;