Min преди 1 година
родител
ревизия
9c5b5c178a

+ 73 - 17
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java

@@ -387,6 +387,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
             List<Product> productList = productMapper.selectList(new QueryWrapper<Product>().eq("company_id", companyId));
+            List<ProdProcedure> allProcedureList = prodProcedureMapper.selectList(new QueryWrapper<ProdProcedure>().eq("company_id", companyId).orderByDesc("id"));
             List<Plan> needInsertList=new ArrayList<>();
             for (int rowIndex = 1; rowIndex <= rowNum; rowIndex++) {
                 XSSFRow row = sheet.getRow(rowIndex);
@@ -405,16 +406,18 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                     XSSFCell productSchedulingNumCell = row.getCell(0);
                     XSSFCell productNameCell = row.getCell(1);
                     XSSFCell steelStampNumberCell = row.getCell(2);
-                    XSSFCell numCell = row.getCell(3);
-                    XSSFCell mainProcessCell = row.getCell(4);
-                    XSSFCell stationNameCell = row.getCell(5);
-                    XSSFCell startDateCell = row.getCell(6);
-                    XSSFCell endDateCell = row.getCell(7);
-                    XSSFCell describtionCell = row.getCell(8);
+                    XSSFCell progressCell = row.getCell(3);
+                    XSSFCell numCell = row.getCell(4);
+                    XSSFCell mainProcessCell = row.getCell(5);
+                    XSSFCell stationNameCell = row.getCell(6);
+                    XSSFCell startDateCell = row.getCell(7);
+                    XSSFCell endDateCell = row.getCell(8);
+                    XSSFCell describtionCell = row.getCell(9);
 
                     if (productSchedulingNumCell != null) productSchedulingNumCell.setCellType(CellType.STRING);
                     if (productNameCell != null) productNameCell.setCellType(CellType.STRING);
                     if (steelStampNumberCell != null) steelStampNumberCell.setCellType(CellType.STRING);
+                    if (progressCell != null) progressCell.setCellType(CellType.STRING);
                     if (numCell != null) numCell.setCellType(CellType.NUMERIC);
                     if (mainProcessCell != null) mainProcessCell.setCellType(CellType.STRING);
                     if (stationNameCell != null) stationNameCell.setCellType(CellType.STRING);
@@ -424,11 +427,13 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                     plan.setStartDate(planType==0?LocalDate.now():LocalDate.now().plusDays(1));
                     if(productSchedulingNumCell!=null){
                         if(count(new QueryWrapper<Plan>().eq("product_scheduling_num",productSchedulingNumCell.getStringCellValue()))>0){
-                            Optional<Plan> first = needInsertList.stream().filter(nl -> nl.getTaskChangeNoticeNum().equals(productSchedulingNumCell.getStringCellValue())).findFirst();
-                            if(first.isPresent()){
-                                msg.setError("已存在的排产工单号"+productSchedulingNumCell.getStringCellValue());
-                                return msg;
-                            }
+                            msg.setError("已存在的排产工单号"+productSchedulingNumCell.getStringCellValue());
+                            return msg;
+                        }
+                        Optional<Plan> first = needInsertList.stream().filter(nl -> nl.getProductSchedulingNum().equals(productSchedulingNumCell.getStringCellValue())).findFirst();
+                        if(first.isPresent()){
+                            msg.setError("重复的排产工单号"+productSchedulingNumCell.getStringCellValue());
+                            return msg;
                         }
                         plan.setProductSchedulingNum(productSchedulingNumCell.getStringCellValue());
                     }
@@ -437,10 +442,14 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                         if(first.isPresent()){
                             plan.setProductId(first.get().getId());
                             plan.setProductName(first.get().getName());
+                            plan.setProjectCode(first.get().getCode());
                         }else {
                             msg.setError("产品["+productNameCell.getStringCellValue()+"]不存在");
                             return msg;
                         }
+                    }else {
+                        msg.setError("产品名称不能为空");
+                        return msg;
                     }
                     if(steelStampNumberCell!=null){
                         String value = steelStampNumberCell.getStringCellValue();
@@ -453,6 +462,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                         msg.setError("钢印号不能为空");
                         return msg;
                     }
+                    plan.setProgress(progressCell==null?"":progressCell.getStringCellValue());
                     plan.setNum(numCell==null?0:Double.valueOf(numCell.getNumericCellValue()).intValue());
                     plan.setMainProcess(mainProcessCell==null?"":mainProcessCell.getStringCellValue());
                     if(stationNameCell!=null){
@@ -514,11 +524,13 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
 
                     if(taskChangeNoticeNumCell!=null){
                         if(count(new QueryWrapper<Plan>().eq("product_scheduling_num",taskChangeNoticeNumCell.getStringCellValue()))>0){
-                            Optional<Plan> first = needInsertList.stream().filter(nl -> nl.getTaskChangeNoticeNum().equals(taskChangeNoticeNumCell.getStringCellValue())).findFirst();
-                            if(first.isPresent()){
-                                msg.setError("已存在的任务变更通知号"+taskChangeNoticeNumCell.getStringCellValue());
-                                return msg;
-                            }
+                            msg.setError("已存在的任务变更通知号"+taskChangeNoticeNumCell.getStringCellValue());
+                            return msg;
+                        }
+                        Optional<Plan> first = needInsertList.stream().filter(nl -> nl.getTaskChangeNoticeNum().equals(taskChangeNoticeNumCell.getStringCellValue())).findFirst();
+                        if(first.isPresent()){
+                            msg.setError("重复的任务变更通知号"+taskChangeNoticeNumCell.getStringCellValue());
+                            return msg;
                         }
                         plan.setTaskChangeNoticeNum(taskChangeNoticeNumCell.getStringCellValue());
                     }
@@ -581,7 +593,51 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                 needInsertList.add(plan);
             }
             if(needInsertList.size()>0){
-                saveBatch(needInsertList);
+                if(saveBatch(needInsertList)){
+                    List<PlanProcedureTotal> planProcedureTotals=new ArrayList<>();
+                    for (Plan plan : needInsertList) {
+                        if(plan.getPlanType()==0){
+                            //处理工序  获取当前产品最新版本的工序的版本号
+                            List<ProdProcedure> procedureList = allProcedureList.stream().filter(al -> al.getProductId().equals(plan.getProductId())).collect(Collectors.toList());
+                            if(procedureList!=null&&procedureList.size()>0){
+                                String versionNumber = procedureList.get(0).getVersionNumber();
+                                plan.setVersionNumber(versionNumber);
+                            }
+                            List<ProdProcedure> list = procedureList.stream().filter(pl -> pl.getVersionNumber().equals(procedureList.get(0).getVersionNumber())).collect(Collectors.toList());
+                            list=list.stream().sorted(Comparator.comparing(ProdProcedure::getId)).collect(Collectors.toList());
+                            for (ProdProcedure prodProcedure : list) {
+                                PlanProcedureTotal p=new PlanProcedureTotal();
+                                p.setPlanId(plan.getId());
+                                p.setProdProcedureId(prodProcedure.getId());
+                                BigDecimal totalWages=new BigDecimal(String.valueOf(prodProcedure.getUnitPrice()));
+                                totalWages=totalWages.multiply(new BigDecimal(plan.getNum()));
+                                p.setTotalWages(totalWages.doubleValue());
+                                BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(prodProcedure.getWorkingTime()));
+                                totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.getNum()));
+                                p.setTotalWorkingHours(totalWorkingHours.doubleValue());
+                                planProcedureTotals.add(p);
+                            }
+                            planProcedureTotalService.saveBatch(planProcedureTotals);
+                            List<PlanProcedureTotal> totals = planProcedureTotals.stream().filter(ps -> ps.getPlanId().equals(plan.getId())).collect(Collectors.toList());
+                            if(totals.size()>0){
+                                double sum = totals.stream().filter(t->t.getTotalWages()!=null).mapToDouble(PlanProcedureTotal::getTotalWages).sum();
+                                plan.setPlanTotalWages(new BigDecimal(sum));
+                            }
+                        }else {
+                            PlanProcedureTotal p=new PlanProcedureTotal();
+                            p.setPlanId(plan.getId());
+                            BigDecimal bigDecimal=new BigDecimal(String.valueOf(plan.getMoneyOfJob()));
+                            bigDecimal=bigDecimal.multiply(new BigDecimal(String.valueOf(plan.getPlanWorkHour())));
+                            p.setTotalWages(bigDecimal.doubleValue());
+                            p.setTotalWorkingHours(plan.getPlanWorkHour());
+                            planProcedureTotals.add(p);
+                        }
+                    }
+                    planProcedureTotalService.saveBatch(planProcedureTotals);
+                    saveOrUpdateBatch(needInsertList);
+                }else {
+                    msg.setError("验证失败");
+                };
             }
         } catch (IOException e) {
             e.printStackTrace();

+ 79 - 9
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/orderInsert.vue

@@ -50,7 +50,13 @@
         <el-table-column prop="num" label="数量" width="180"></el-table-column>
         <el-table-column prop="planWorkHour" label="计划工时" width="180"></el-table-column>
         <el-table-column prop="totalMoney" label="工钱" width="180"></el-table-column>
-        <el-table-column prop="foremanName" label="工长" width="180"></el-table-column>
+        <el-table-column prop="foremanName" label="工长" width="180">
+            <template slot-scope="scope">
+            <div @click="getFormenDetail(scope.row)" class="colorText">
+              {{ scope.row.foremanName}}
+            </div>
+          </template>
+        </el-table-column>
         <el-table-column prop="startDate" label="开工时间" width="180"></el-table-column>
         <el-table-column prop="endDate" label="完工时间" width="180"></el-table-column>
         <el-table-column label="编辑">
@@ -73,10 +79,10 @@
       <div class="planDialog">
         <el-form ref="todayPlanForm" :rules="todayPlanFormrules" :model="todayPlanForm" label-width="120px">
           <el-form-item label="任务变更通知号" style="width: 100%" prop="taskChangeNoticeNum">
-            <el-input v-model="todayPlanForm.taskChangeNoticeNum" placeholder="请输入"></el-input>
+            <el-input v-model="todayPlanForm.taskChangeNoticeNum" placeholder="请输入" maxlength="50"></el-input>
           </el-form-item>
           <el-form-item label="任务名称" style="width: 100%" prop="taskName">
-            <el-input v-model="todayPlanForm.taskName" placeholder="请输入"></el-input>
+            <el-input v-model="todayPlanForm.taskName" placeholder="请输入" maxlength="50"></el-input>
           </el-form-item>
           <el-form-item label="任务类型" prop="taskTypeId">
             <el-select v-model="todayPlanForm.taskTypeId" placeholder="请选择" class="w100">
@@ -85,20 +91,20 @@
             </el-select>
           </el-form-item>
           <el-form-item label="计划人数" prop="planManNum">
-            <el-input v-model="todayPlanForm.planManNum" type="number" placeholder="请输入"></el-input>
+            <el-input v-model="todayPlanForm.planManNum" type="number" placeholder="请输入" maxlength="5"></el-input>
           </el-form-item>
           <el-form-item label="数量" prop="num">
-            <el-input v-model="todayPlanForm.num" type="number" placeholder="请输入"></el-input>
+            <el-input v-model="todayPlanForm.num" type="number" placeholder="请输入" maxlength="5"></el-input>
           </el-form-item>
           <el-form-item label="计划工时" prop="planWorkHour">
             <div style="display: flex;">
-              <el-input v-model="todayPlanForm.planWorkHour" type="number" placeholder="请输入" style="flex: 1;"></el-input>
+              <el-input v-model="todayPlanForm.planWorkHour" type="number" placeholder="请输入" style="flex: 1;" maxlength="5"></el-input>
               <div style="margin-left: 10px;">小时</div>
             </div>
           </el-form-item>
           <el-form-item label="单价" prop="moneyOfJob">
             <div style="display: flex;">
-              <el-input v-model="todayPlanForm.moneyOfJob" type="number" placeholder="请输入" style="flex: 1;"></el-input>
+              <el-input v-model="todayPlanForm.moneyOfJob" type="number" placeholder="请输入" style="flex: 1;" maxlength="5"></el-input>
               <div style="margin-left: 10px;">元/小时</div>
             </div>
           </el-form-item>
@@ -127,7 +133,7 @@
             </el-date-picker>
           </el-form-item>
           <el-form-item label="描述" style="width: 100%">
-            <el-input type="textarea" :rows="6" placeholder="请输入描述" v-model="todayPlanForm.describtion">
+            <el-input type="textarea" :rows="6" placeholder="请输入描述" v-model="todayPlanForm.describtion" maxlength="200">
             </el-input>
           </el-form-item>
         </el-form>
@@ -193,6 +199,22 @@
         <el-button type="primary" @click="addTaskType('taskTypeForm')">确 定</el-button>
       </span>
     </el-dialog>
+
+    <!-- 工长弹框 -->
+    <el-dialog title="工长信息" :visible.sync="foremanDetailDialog" width="30%" :before-close="handleClose">
+      <div>
+        <span>姓名:{{this.foremanDetail.name}}</span>
+      </div>
+      <div>
+        <span>工种:{{this.foremanDetail.workType}}</span>
+      </div>
+      <div>
+        <span>工号:{{this.foremanDetail.jobNumber}}</span>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="foremanDetailDialog = false">关闭</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
   
@@ -247,6 +269,9 @@ export default {
         companyId: "",
         taskTypeName: "",
       },
+      user: JSON.parse(sessionStorage.getItem("user")),
+      foremanDetailDialog:false,
+      foremanDetail:{},
       taskTypeList:[],
       checkTypeList:[
         {id:0,name:"自检"},{id:1,name:"互检"},{id:2,name:"专检"}
@@ -299,6 +324,50 @@ export default {
       this.getTaskTypeList();
   },
   methods: {
+    // 初始化 Form
+    initTodayPlanForm() {
+      this.todayPlanForm = {
+        id: null,
+        taskChangeNoticeNum: "",
+        taskName: "",
+        taskTypeId: "",
+        taskTypeName: "",
+        planManNum: "",
+        num: "",
+        planWorkHour: "",
+        moneyOfJob: "",
+        foremanId: "",
+        foremanName: "",
+        startDate: "",
+        endDate: "",
+        describtion: "",
+        versionNumber: "",
+        checkType:0,
+      }
+    },
+    getFormenDetail(item){
+      this.foremanDetailDialog=true;
+      this.http.post(
+        "/user/getUserInfo",
+        {userId:item.foremanId},
+        (res) => {
+          if (res.code == "ok") {
+            this.foremanDetail=res.data
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error",
+            });
+          }
+        },
+        (error) => {
+          this.$message({
+            message: error,
+            type: "error",
+          });
+        }
+      );
+    },
     today() {
       let date = new Date();
       let year = date.getFullYear();
@@ -495,6 +564,7 @@ export default {
       this.titleName = `新增${this.titleText}`;
       this.editPlanDiaLog = true;
       this.getDepartmentList();
+      this.initTodayPlanForm();
       this.getProductList();
       this.getTaskTypeList();
       // this.todayPlanForm
@@ -525,7 +595,7 @@ export default {
                   type: "success",
                 });
                 this.editPlanDiaLog = false;
-                this.getTableData()
+                this.getTableData(this.hasChooseDept)
               } else {
                 this.$message({
                   message: res.msg,

+ 49 - 2
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

@@ -64,6 +64,11 @@
         <el-table-column prop="stationName" label="工位名称" width="180">
         </el-table-column>
         <el-table-column prop="foremanName" label="工长" width="180">
+          <template slot-scope="scope">
+            <div @click="getFormenDetail(scope.row)" class="colorText">
+              {{ scope.row.foremanName}}
+            </div>
+          </template>
         </el-table-column>
         <el-table-column prop="startDate" label="开工时间" width="180">
         </el-table-column>
@@ -106,13 +111,13 @@
             <el-input class="w45" v-model="todayPlanForm.steelStampNumberEnd" maxlength="20"></el-input>
           </el-form-item>
           <el-form-item label="计划总工价" v-if="this.titleName==='编辑今日计划'"  prop="planTotalWages">
-            <el-input v-model="todayPlanForm.planTotalWages" ></el-input>
+            <el-input v-model="todayPlanForm.planTotalWages" type="number"></el-input>
           </el-form-item>
           <el-form-item label="进度"  :style="this.titleName==='编辑今日计划'?'':'width: 100%'" prop="progress">
             <el-input v-model="todayPlanForm.progress" maxlength="20"></el-input>
           </el-form-item>
           <el-form-item label="数量" prop="num">
-            <el-input v-model="todayPlanForm.num" maxlength="10"></el-input>
+            <el-input v-model="todayPlanForm.num" maxlength="10" type="number"></el-input>
           </el-form-item>
           <el-form-item label="主工序" prop="mainProcess">
             <el-input v-model="todayPlanForm.mainProcess" maxlength="20"></el-input>
@@ -179,6 +184,22 @@
         <el-button type="primary" @click="deptSet()">确 定</el-button>
       </span>
     </el-dialog>
+
+    <!-- 工长弹框 -->
+    <el-dialog title="工长信息" :visible.sync="foremanDetailDialog" width="30%" :before-close="handleClose">
+      <div>
+        <span>姓名:{{this.foremanDetail.name}}</span>
+      </div>
+      <div>
+        <span>工种:{{this.foremanDetail.workType}}</span>
+      </div>
+      <div>
+        <span>工号:{{this.foremanDetail.jobNumber}}</span>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="foremanDetailDialog = false">关闭</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
   
@@ -237,6 +258,9 @@ export default {
         versionNumber: "",
         planTotalWages:0
       },
+      user: JSON.parse(sessionStorage.getItem("user")),
+      foremanDetailDialog:false,
+      foremanDetail:{},
       todayTabIndex: 0,
       tableDataLoading: false,
       tableData: [],
@@ -279,6 +303,29 @@ export default {
       this.getProductList();
   },
   methods: {
+    getFormenDetail(item){
+      this.foremanDetailDialog=true;
+      this.http.post(
+        "/user/getUserInfo",
+        {userId:item.foremanId},
+        (res) => {
+          if (res.code == "ok") {
+            this.foremanDetail=res.data
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error",
+            });
+          }
+        },
+        (error) => {
+          this.$message({
+            message: error,
+            type: "error",
+          });
+        }
+      );
+    },
     setProductCode() {
       let arrList = this.productList.filter(item => item.id == this.todayPlanForm.productId) 
       console.log('====>', arrList)

+ 3 - 1
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponentDetil.vue

@@ -35,7 +35,9 @@
                     <el-table-column label="质检类型" width="180">
                         <template slot-scope="scope">{{ scope.row.prodProcedure.checkType==0?"自检": scope.row.prodProcedure.checkType==1?"互检":"专检"}}</template>
                     </el-table-column>
-                    <el-table-column label="组员" width="180"></el-table-column>
+                    <el-table-column label="组员" width="180">
+                        <template slot-scope="scope">{{ scope.row.teamNames }}</template>
+                    </el-table-column>
                 </el-table>
             </div>
             <!-- <div v-if="TabIndex == 1"  v-loading="tableDataLoading">