Ver Fonte

维保添加信息录入

HD_wangm há 4 meses atrás
pai
commit
f90f0491ea

+ 1 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtRepairOrderServiceImpl.java

@@ -946,6 +946,7 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
                                 person.setIsLeader(0);
                             }
                             person.setUserId(sysUser.getUserId());
+                            person.setUserName(sysUser.getUserName());
                             person.setNickName(sysUser.getNickName());
                             person.setOrderId(gxtRepairOrder.getId());
                             person.setOrderCode(gxtRepairOrder.getWorkOrderProjectNo());

+ 73 - 25
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtWorkOrderServiceImpl.java

@@ -727,20 +727,19 @@ public class GxtWorkOrderServiceImpl implements IGxtWorkOrderService
             {
 //                // 2. 删除旧的工作组成员
 //                gxtWorkOrderPersonMapper.deleteGxtWorkOrderPersonByOrderId(id);
-
-                // 3. 添加新的工作组成员
-                for (GxtWorkOrderPerson person : gxtWorkOrder.getWorkOrderPersonList())
-                {
-                    SysUser sysUser = new SysUser();
-                    sysUser.setUserName(person.getUserName());
-                    sysUser.setNickName(person.getNickName());
-                    List<SysUser> sysUserList = sysUserService.selectUserList(sysUser);
-                    if (sysUserList.size() > 0) {
-                        sysUser = sysUserList.get(0);
-                        if (sysUser.getUserId() == order.getTeamLeaderId()) continue;
-                    } else {
-                        continue;
-                    }
+                if (StringUtils.isNotEmpty(gxtWorkOrder.getInfoEntry()) && gxtWorkOrder.getInfoEntry().equals("1")) {
+                    // 3. 添加新的工作组成员
+                    for (GxtWorkOrderPerson person : gxtWorkOrder.getWorkOrderPersonList()) {
+                        SysUser sysUser = new SysUser();
+                        sysUser.setUserName(person.getUserName());
+                        sysUser.setNickName(person.getNickName());
+                        List<SysUser> sysUserList = sysUserService.selectUserList(sysUser);
+                        if (sysUserList.size() > 0) {
+                            sysUser = sysUserList.get(0);
+                            if (sysUser.getUserId().equals(order.getTeamLeaderId())) continue;  //检修人员是否已存在
+                        } else {
+                            throw new ServiceException("检修人员不存在");
+                        }
 //                    SysUser sysUser = null;
 //                    if(StringUtils.isNotEmpty(person.getUserName())){
 //                        sysUser = sysUserService.selectUserByUserName(person.getUserName());
@@ -768,18 +767,67 @@ public class GxtWorkOrderServiceImpl implements IGxtWorkOrderService
 //                        }
 //                    }
 //                    if(sysUser == null) continue;
-                    person.setUserId(sysUser.getUserId());
-                    if (sysUser.getUserId() == order.getTeamLeaderId()) {
-                        person.setIsLeader(1);
-                    } else {
-                        person.setIsLeader(0);
-                    }
-                    person.setOrderId(id);
-                    person.setOrderCode(order.getWorkOrderProjectNo());
-                    person.setStatus(1);
-                    person.setCreateBy(SecurityUtils.getUsername());
+                        person.setUserId(sysUser.getUserId());
+                        if (sysUser.getUserId() == order.getTeamLeaderId()) {
+                            person.setIsLeader(1);
+                        } else {
+                            person.setIsLeader(0);
+                        }
+                        person.setOrderId(id);
+                        person.setOrderCode(order.getWorkOrderProjectNo());
+                        person.setStatus(1);
+                        person.setCreateBy(SecurityUtils.getUsername());
 //                    person.setCreateTime(DateUtils.getNowDate());
-                    gxtWorkOrderPersonMapper.insertGxtWorkOrderPerson(person);
+                        gxtWorkOrderPersonMapper.insertGxtWorkOrderPerson(person);
+                    }
+                } else {
+                    if(StringUtils.isNotEmpty(gxtWorkOrder.getWorkGroupMemberName())){
+//                    gxtRepairOrderPersonMapper.deleteGxtRepairOrderPersonByOrderId(gxtRepairOrder.getId());
+                        String[] splitNames = gxtWorkOrder.getWorkGroupMemberName().split(",");
+                        for (String name : splitNames) {
+                            List<SysUser> sysUsers = sysUserService.selectUserByNickName(name);
+                            if(sysUsers != null && !sysUsers.isEmpty()){
+                                SysUser sysUser = null;
+                                // 如果只有一个用户,直接使用
+                                if (sysUsers.size() == 1) {
+                                    sysUser = sysUsers.get(0);
+                                    if (sysUser.getUserId().equals(order.getTeamLeaderId())) continue; //检修人员是否已存在
+                                } else {
+                                    if (sysUser.getUserId().equals(order.getTeamLeaderId())) continue; //检修人员是否已存在
+                                    // 如果有多个用户,查找部门ID与pcsStationPid相同的用户
+                                    for (SysUser user : sysUsers) {
+                                        if (user.getDeptId() != null && (user.getDeptId().equals(order.getPcsStationPid())
+                                                || user.getDeptId().equals(order.getPcsStationId()))) {
+                                            sysUser = user;
+                                            break;
+                                        }
+                                    }
+                                    // 如果没找到部门匹配的用户,则使用第一个用户
+                                    if (sysUser == null) {
+                                        sysUser = sysUsers.get(0);
+                                    }
+                                }
+                                GxtWorkOrderPerson person = new GxtWorkOrderPerson();
+                                person.setUserId(sysUser.getUserId());
+                                if (sysUser.getUserId() == order.getTeamLeaderId()) {
+                                    person.setIsLeader(1);
+                                } else {
+                                    person.setIsLeader(0);
+                                }
+                                person.setUserId(sysUser.getUserId());
+                                person.setUserName(sysUser.getUserName());
+                                person.setNickName(sysUser.getNickName());
+                                person.setOrderId(order.getId());
+                                person.setOrderCode(order.getWorkOrderProjectNo());
+                                person.setStatus(1);
+                                person.setCreateBy(SecurityUtils.getUsername());
+                                person.setCreateTime(DateUtils.getNowDate());
+                                gxtWorkOrderPersonMapper.insertGxtWorkOrderPerson(person);
+                            } else {
+                                throw new ServiceException("检修人员不存在");
+                            }
+                        }
+                    }
                 }
                 recordWorkOrderFlow(id, order.getWorkOrderProjectNo(), "complete", oldStatus, "completed",
                         "工单完成,工单状态变为已完成");

+ 88 - 31
ygtx-ui/src/views/gxt/gxtOrder/index.vue

@@ -183,7 +183,7 @@
       </el-table-column>
       <el-table-column label="MIS系统工单编码" align="center" prop="misNo" min-width="150">
         <template #default="scope">
-          {{ scope.row.misNo || '-' }}
+          {{ scope.row.infoEntry == '1' ? scope.row.misNo || '-' : '-' }}
         </template>
       </el-table-column>
       <el-table-column label="接单人" align="center" prop="acceptUserName">
@@ -338,6 +338,19 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="12">
+              <el-form-item label="信息录入" prop="infoEntry">
+                <el-radio-group v-model="form.infoEntry" @change="handleInfoEntryChange">
+                  <el-radio
+                      v-for="dict in gxt_info_entry"
+                      :key="dict.value"
+                      :label="dict.value"
+                  >
+                    {{ dict.label }}
+                  </el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" v-if="form.infoEntry == '1'">
               <el-form-item label="MIS工单编码" prop="misNo">
                 <el-input v-model="form.misNo"
                           placeholder="请输入MIS工单编码或点击搜索选择"
@@ -371,10 +384,34 @@
               </el-form-item>
             </el-col>
           </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="外委人员数(人)" prop="wwryNum">
+                <el-input-number
+                    v-model="form.wwryNum"
+                    placeholder="请输入外委人员数"
+                    controls-position="right"
+                    style="width: 100%"
+                    class="input-number-left"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="外来人员数(人)" prop="wlryNum">
+                <el-input-number
+                    v-model="form.wlryNum"
+                    placeholder="请输入外来人员数"
+                    controls-position="right"
+                    style="width: 100%"
+                    class="input-number-left"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
           <el-row :gutter="20">
             <el-col :span="24">
               <el-form-item label="维保内容" prop="content">
-                <el-input v-model="form.content" type="textarea" :rows="3" readonly />
+                <el-input v-model="form.content" type="textarea" :rows="3" :readonly="form.infoEntry == '1'" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -713,7 +750,7 @@
                     value-format="YYYY-MM-DD HH:mm"
                     placeholder="请选择开始时间"
                     style="width: 100%"
-                    readonly
+                    :readonly="finishForm.infoEntry == '1'"
                 />
               </el-form-item>
             </el-col>
@@ -727,7 +764,7 @@
                     value-format="YYYY-MM-DD HH:mm"
                     placeholder="请选择结束时间"
                     style="width: 100%"
-                    readonly
+                    :readonly="finishForm.infoEntry == '1'"
                 />
               </el-form-item>
             </el-col>
@@ -774,7 +811,7 @@
             <el-row>
               <el-col :span="24">
                 <el-form-item label="检修人员">
-                  <el-input v-model="finishForm.workGroupMemberName" readonly />
+                  <el-input v-model="finishForm.workGroupMemberName" :readonly="finishForm.infoEntry == '1'" />
                 </el-form-item>
 <!--                <el-form-item label="检修人员" prop="memberIds">-->
 <!--                  <el-checkbox-group v-model="finishForm.memberIds" style="width: 100%" @change="handleMembersChange">-->
@@ -1307,7 +1344,7 @@
                   <el-col :span="24">
                     <el-form-item label="检修人员">{{ detailData.workGroupMemberName || '-' }}</el-form-item>
                   </el-col>
-                  <el-col :span="24">
+                  <el-col :span="24" v-if="detailData.infoEntry == '1'">
                     <el-form-item label="MIS工单编码">{{ detailData.misNo || '-' }}</el-form-item>
                   </el-col>
                   <el-col :span="24">
@@ -1779,13 +1816,15 @@ const {
   gxt_inspection_type,
   gxt_pause_reasons,
   gxt_repair_order_flow_action_type,
-  gxt_order_suspend_reason
+  gxt_order_suspend_reason,
+  gxt_info_entry
 } = proxy.useDict(
     "gxt_work_order_status",
     "gxt_inspection_type",
     "gxt_pause_reasons",
     "gxt_repair_order_flow_action_type",
-    "gxt_order_suspend_reason"
+    "gxt_order_suspend_reason",
+    "gxt_info_entry"
 )
 const orderList = ref([])
 const open = ref(false)
@@ -2025,6 +2064,8 @@ const data = reactive({
     // memberIds: [{ required: true, message: "请至少选择一名检修人员", trigger: "change" }]
   },
   finishRules: {
+    realStartTime: [{ required: true, message: "请选择开始时间", trigger: "change" }],
+    realEndTime: [{ required: true, message: "请选择结束时间", trigger: "change" }]
     // teamLeaderId: [{ required: true, message: "请选择工作负责人", trigger: "change" }],
     // inspectionType: [{ required: true, message: "请选择维保类型", trigger: "change" }],
     // realContent: [{ required: true, message: "请输入实际维保内容", trigger: "change" }],
@@ -2173,6 +2214,7 @@ function handleSelectionChange(selection) {
 /** 新增按钮操作 */
 function handleAdd() {
   reset()
+  form.value.infoEntry = "1"
   //生成工单编码
   genCode('WORK_ORDER_CODE').then(response =>{
     form.value.workOrderProjectNo = response;
@@ -2268,30 +2310,36 @@ function handleFinish(row) {
   getGxtOrder(row.id).then(response => {
     finishForm.value = response.data
     finishForm.value.orderId = row.id
-    if (row.misNo != null) {
-      listMisInfo({misNo: row.misNo}).then(response => {
-        const misInfo = response.rows
-        debugger
-        if (misInfo.length > 0) {
-          finishForm.value.realStartTime = misInfo[0].realStartTime
-          finishForm.value.realEndTime = misInfo[0].realEndTime
+    if (finishForm.value.infoEntry != null && finishForm.value.infoEntry == '1') {
+      if (row.misNo != null) {
+        listMisInfo({misNo: row.misNo}).then(response => {
+          const misInfo = response.rows
+          debugger
+          if (misInfo.length > 0) {
+            finishForm.value.realStartTime = misInfo[0].realStartTime
+            finishForm.value.realEndTime = misInfo[0].realEndTime
+          }
+        })
+      }
+      listWorkPerson({misNo: row.misNo}).then(response => {
+        finishForm.value.workOrderPersonList = response.rows;
+        if (finishForm.value.workOrderPersonList) {
+          const nickNames = finishForm.value.workOrderPersonList
+              .map(person => person.nickName)
+              .join(',');
+          finishForm.value.workGroupMemberName = nickNames
+          finishDialogVisible.value = true
+          // 打开对话框后重置表单验证错误
+          proxy.$nextTick(() => {
+            proxy.$refs["finishRef"]?.clearValidate()
+          })
         }
       })
+    } else {
+      finishForm.value.realStartTime = null
+      finishForm.value.realEndTime = null
+      finishDialogVisible.value = true
     }
-    listWorkPerson({misNo: row.misNo }).then(response => {
-      finishForm.value.workOrderPersonList = response.rows;
-      if (finishForm.value.workOrderPersonList) {
-        const nickNames = finishForm.value.workOrderPersonList
-            .map(person => person.nickName)
-            .join(',');
-        finishForm.value.workGroupMemberName = nickNames
-        finishDialogVisible.value = true
-        // 打开对话框后重置表单验证错误
-        proxy.$nextTick(() => {
-          proxy.$refs["finishRef"]?.clearValidate()
-        })
-      }
-    })
     // finishForm.value.memberIds = []
     // listUser({ pageNum: 1, pageSize: 100, deptId: row.pcsStationId }).then(response => {
     //   userList.value = response.rows
@@ -2327,7 +2375,8 @@ function saveFinishWorkOrder() {
     proxy.$modal.msgSuccess("结单成功")
     getList()
   }).catch(error => {
-    proxy.$modal.msgError("结单失败:" + (error?.response?.data?.msg || "未知错误"))
+    debugger
+    proxy.$modal.msgError("结单失败:" + (error? error.message || "未知错误" : "未知错误"))
   })
 }
 
@@ -2883,7 +2932,15 @@ function onEquipmentSelected(row) {
   equipmentSelectVisible.value = false
   commonKey++
 }
-
+const handleInfoEntryChange = (val) => {
+  form.value.content = undefined;
+  // 选中2工作票编号时修改其他值
+  if (val === '2') {
+    form.value.misOrderNo = undefined;
+    form.value.realStartTime = undefined;
+    form.value.realEndTime = undefined;
+  }
+};
 
 
 getList()

+ 44 - 2
ygtx-ui/src/views/gxt/repairOrder/index.vue

@@ -975,6 +975,23 @@
 
           <!-- 正常维修时显示的字段 -->
           <template v-if="!finalizeForm.repairMethod || finalizeForm.repairMethod === '1'">
+            <el-col :span="12">
+              <el-form-item label="工作部位" prop="workArea">
+                <el-select
+                    v-model="finalizeForm.workArea"
+                    multiple
+                    placeholder="请选择工作部位"
+                    style="width: 100%"
+                >
+                  <el-option
+                      v-for="dict in gxt_work_area"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
             <el-col :span="24">
               <el-form-item label="信息录入" prop="infoEntry">
                 <el-radio-group v-model="finalizeForm.infoEntry" @change="handleInfoEntryChange">
@@ -1643,6 +1660,9 @@
                     </el-form-item>
                   </el-col>
                   <template v-if="viewForm.repairMethod !== '2'">
+                    <el-col :span="24">
+                      <el-form-item label="工作部位">{{ formattedWorkArea }}</el-form-item>
+                    </el-col>
                     <el-col :span="24">
                       <el-form-item label="MIS工单编码">{{ viewForm.misOrderNo || '-' }}</el-form-item>
                     </el-col>
@@ -1818,7 +1838,7 @@ import { watch } from 'vue'
 import { decryptParams } from '@/utils/encrypt'
 
 const { proxy } = getCurrentInstance()
-const { gxt_maintenance_type, gxt_work_order_status, gxt_order_priority_type,gxt_repair_order_flow_action_type,gxt_order_suspend_reason,gxt_repair_method,gxt_reset_method,gxt_return_type,gxt_info_entry } = proxy.useDict("gxt_maintenance_type", "gxt_work_order_status", "gxt_order_priority_type","gxt_repair_order_flow_action_type","gxt_order_suspend_reason","gxt_repair_method","gxt_reset_method","gxt_return_type","gxt_info_entry")
+const { gxt_maintenance_type, gxt_work_order_status, gxt_order_priority_type,gxt_repair_order_flow_action_type,gxt_order_suspend_reason,gxt_repair_method,gxt_reset_method,gxt_return_type,gxt_info_entry,gxt_work_area } = proxy.useDict("gxt_maintenance_type", "gxt_work_order_status", "gxt_order_priority_type","gxt_repair_order_flow_action_type","gxt_order_suspend_reason","gxt_repair_method","gxt_reset_method","gxt_return_type","gxt_info_entry","gxt_work_area")
 
 // 数据列表相关
 const repairOrderList = ref([])
@@ -1882,7 +1902,8 @@ const approveForm = ref({})
 const completeForm = ref({})
 const finalizeForm = ref({
   repairOrderPersonList: [],
-  infoEntry: null
+  infoEntry: null,
+  workArea: []
 })
 const invalidateForm = ref({}) // 添加作废表单
 const ratingForm = ref({
@@ -2345,6 +2366,9 @@ const finalizeRules = ref({
   ],
   realEndTime: [
     { required: true, message: "请选择结束时间", trigger: "change" }
+  ],
+  workArea: [
+    { required: true, message: "请选择工作部位", trigger: "change" }
   ]
 })
 
@@ -3449,6 +3473,8 @@ async function submitFinalize() {
         if (finalizeForm.value.repairMethod === '1') {
           // 正常维修时清除复位方式
           finalizeForm.value.resetMethod = undefined;
+          finalizeForm.value.workArea = Array.isArray(finalizeForm.value.workArea) ? finalizeForm.value.workArea.join(',')
+                                        : finalizeForm.value.workArea || ''
         } else if (finalizeForm.value.repairMethod === '2') {
           // 复位启机时清除MIS相关字段
           finalizeForm.value.misOrderNo = undefined;
@@ -3458,6 +3484,7 @@ async function submitFinalize() {
           finalizeForm.value.infoEntry = undefined;
           finalizeForm.value.wwryNum = undefined;
           finalizeForm.value.wlryNum = undefined;
+          finalizeForm.value.workArea = undefined;
           finalizeForm.value.repairOrderPersonList = [];
         }
 
@@ -3729,6 +3756,21 @@ function handleInvalidate(row) {
     invalidateDialogVisible.value = true
   })
 }
+
+const formattedWorkArea = computed(() =>{
+  if (!viewForm.value?.workArea) return '-'
+
+  const values = viewForm.value.workArea.split(',').filter(v => v.trim())
+  const dictList = unref(gxt_work_area) // 关键:解包 ref
+
+  if (!Array.isArray(dictList)) {
+    return viewForm.value.workArea
+  }
+
+  const dictMap = new Map(dictList.map(item => [item.value, item.label]))
+  const labels = values.map(v => dictMap.get(v) || v)
+  return labels.join(',') || '-'
+})
 </script>
 
 <style scoped>