车间能级提升-智能设备管理系统
zhuguifei
2025-05-14 cb19937239b42f51c6e8525450d08e93225117bc
新增部分移动端接口
已添加4个文件
已修改4个文件
620 ■■■■ 文件已修改
eims-ui-mobile/src/pages/home/index.vue 409 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/inspect/insp-record.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/repair/req-list.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/service/mobile.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/MobileController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IMobileService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/MobileServiceImpl.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/home/index.vue
@@ -8,149 +8,180 @@
}
</route>
<template>
  <view
    class="bg-base overflow-hidden"
    :style="{
      marginTop: safeAreaInsets?.top + 'px',
    }"
  <z-paging
    ref="paging"
    v-model="dataList"
    @query="queryList"
    show-refresher-update-time
    hide-empty-view
  >
    <view class="bg-white h-[80rpx] px-2 flex items-center justify-between">
      <view class="flex items-center" @click="handleUserInfo">
        <wd-icon name="user" size="40rpx" class="icon-color-base"></wd-icon>
        <text class="ml-1 text-color-base">{{ realName }}</text>
      </view>
      <view class="flex items-center">
        <wd-icon name="notification" size="40rpx" class="icon-color-base mr-3" @click="handleInfo"></wd-icon>
        <wd-icon name="tips" size="40rpx" class="icon-color-base mr-3" @click="handleInfo"></wd-icon>
        <wd-icon name="app" size="40rpx" class="icon-color-base" @click="handleInfo"></wd-icon>
      </view>
    </view>
    <view class="bg-white py-2 px-2">
      <wd-img class="w-full h-[260rpx]" src="/static/images/pic4.jpeg" />
    </view>
    <view class="bg-noti flex flex-row">
      <wd-notice-bar
        text="这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息"
        prefix="clock"
        type="info"
        :scrollable="false"
        custom-class="flex-1  overflow-hidden"
      />
      <wd-button type="text" class="w-[120rpx]">查看</wd-button>
    </view>
    <view class="bg-white">
      <wd-card type="rectangle">
        <template #title>
          <view class="flex items-center menu-title-box">
            <view class="menu-indicator"></view>
            <view class="ml-1 text-xs">数据总览</view>
          </view>
        </template>
        <view class="flex flex-row justify-around">
          <view class="flex flex-col justify-center">
            <text class="text-lg text-center">0</text>
            <text class="text-color-gray">设备总数</text>
          </view>
          <view class="flex flex-col justify-center">
            <text class="text-lg text-center">0</text>
            <text class="text-color-gray">故障设备数</text>
          </view>
          <view class="flex flex-col justify-center">
            <text class="text-lg text-center">0</text>
            <text class="text-color-gray">未修复故障</text>
          </view>
    <template #top>
      <view class="bg-white h-[80rpx] px-2 flex items-center justify-between">
        <view class="flex items-center" @click="handleUserInfo">
          <wd-icon name="user" size="40rpx" class="icon-color-base"></wd-icon>
          <text class="ml-1 text-color-base">{{ realName }}</text>
        </view>
      </wd-card>
    </view>
    <view class="bg-white mt-2">
      <wd-card type="rectangle">
        <template #title>
          <view class="flex items-center menu-title-box">
            <view class="menu-indicator"></view>
            <view class="ml-1 text-xs">快捷操作</view>
          </view>
        </template>
        <wd-grid :column="4">
          <wd-grid-item
            use-slot
            class="flex justify-center items-center"
            v-for="(item, index) in commonMenu"
            :key="item.id"
            @click.stop="goItemPage(item.path)"
          >
            <image class="slot-img text-center" :src="item.icon" />
            <text>{{ item.name }}</text>
          </wd-grid-item>
        </wd-grid>
      </wd-card>
    </view>
    <view class="bg-white mt-2">
      <wd-card type="rectangle">
        <template #title>
          <view class="flex items-center menu-title-box">
            <view class="menu-indicator"></view>
            <view class="ml-1 text-xs">设备管理</view>
          </view>
        </template>
        <wd-grid :column="4">
          <wd-grid-item
            use-slot
            class="flex justify-center items-center"
            v-for="(item, index) in inspectMenu"
            :key="item.id"
            @click.stop="goItemPage(item.path)"
          >
            <image class="slot-img text-center" :src="item.icon" />
            <text>{{ item.name }}</text>
          </wd-grid-item>
        </wd-grid>
      </wd-card>
    </view>
    <view class="bg-white mt-2">
      <wd-card type="rectangle">
        <template #title>
          <view class="flex items-center menu-title-box">
            <view class="menu-indicator"></view>
            <view class="ml-1 text-xs">台账相关</view>
          </view>
        </template>
        <wd-grid :column="4">
          <wd-grid-item
            use-slot
            class="flex justify-center items-center"
            v-for="(item, index) in equMenu"
            @click.stop="goItemPage(item.path)"
          >
            <image class="slot-img text-center" :src="item.icon" />
            <text>{{ item.name }}</text>
          </wd-grid-item>
        </wd-grid>
      </wd-card>
    </view>
        <view class="flex items-center">
          <wd-icon
            name="notification"
            size="40rpx"
            class="icon-color-base mr-3"
            @click="handleInfo"
          ></wd-icon>
          <wd-icon
            name="tips"
            size="40rpx"
            class="icon-color-base mr-3"
            @click="handleInfo"
          ></wd-icon>
          <wd-icon name="app" size="40rpx" class="icon-color-base" @click="handleInfo"></wd-icon>
        </view>
      </view>
  </view>
    </template>
    <view class="bg-base overflow-hidden">
      <view class="bg-white py-2 px-2">
        <wd-img class="w-full h-[260rpx]" src="/static/images/pic4.jpeg" />
      </view>
      <view class="bg-noti flex flex-row">
        <wd-notice-bar
          text="这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息"
          prefix="clock"
          type="info"
          :scrollable="false"
          custom-class="flex-1  overflow-hidden"
        />
        <wd-button type="text" class="w-[120rpx]">查看</wd-button>
      </view>
      <view class="bg-white">
        <wd-card type="rectangle">
          <template #title>
            <view class="flex items-center menu-title-box">
              <view class="menu-indicator"></view>
              <view class="ml-1 text-xs">数据总览</view>
            </view>
          </template>
          <view class="flex flex-row justify-around">
            <view class="flex flex-col justify-center">
              <text class="text-lg text-center">{{ equTotal }}</text>
              <text class="text-color-gray">设备总数</text>
            </view>
            <view class="flex flex-col justify-center">
              <text class="text-lg text-center">{{ fixtureTotal }}</text>
              <text class="text-color-gray">工具总数</text>
            </view>
            <view class="flex flex-col justify-center">
              <text class="text-lg text-center">{{ faultTotal }}</text>
              <text class="text-color-gray">未修复故障</text>
            </view>
          </view>
        </wd-card>
      </view>
      <view class="bg-white mt-2">
        <wd-card type="rectangle">
          <template #title>
            <view class="flex items-center menu-title-box">
              <view class="menu-indicator"></view>
              <view class="ml-1 text-xs">快捷操作</view>
            </view>
          </template>
          <wd-grid :column="4">
            <wd-grid-item
              use-slot
              class="flex justify-center items-center"
              v-for="(item, index) in commonMenu"
              :key="item.id"
              @click.stop="goItemPage(item)"
            >
              <image class="slot-img text-center" :src="item.icon" />
              <text>{{ item.name }}</text>
            </wd-grid-item>
          </wd-grid>
        </wd-card>
      </view>
      <view class="bg-white mt-2">
        <wd-card type="rectangle">
          <template #title>
            <view class="flex items-center menu-title-box">
              <view class="menu-indicator"></view>
              <view class="ml-1 text-xs">设备管理</view>
            </view>
          </template>
          <wd-grid :column="4">
            <wd-grid-item
              use-slot
              class="flex justify-center items-center"
              v-for="(item, index) in inspectMenu"
              :key="item.id"
              @click.stop="goItemPage(item)"
            >
              <image class="slot-img text-center" :src="item.icon" />
              <text>{{ item.name }}</text>
            </wd-grid-item>
          </wd-grid>
        </wd-card>
      </view>
      <view class="bg-white mt-2">
        <wd-card type="rectangle">
          <template #title>
            <view class="flex items-center menu-title-box">
              <view class="menu-indicator"></view>
              <view class="ml-1 text-xs">台账相关</view>
            </view>
          </template>
          <wd-grid :column="4">
            <wd-grid-item
              use-slot
              class="flex justify-center items-center"
              v-for="(item, index) in equMenu"
              @click.stop="goItemPage(item)"
            >
              <image class="slot-img text-center" :src="item.icon" />
              <text>{{ item.name }}</text>
            </wd-grid-item>
          </wd-grid>
        </wd-card>
      </view>
      <view class="w-full h-[100rpx]"></view>
    </view>
  </z-paging>
</template>
<script lang="ts" setup>
import { getAllMenusApi } from '@/service/menu'
import { useUserStore } from '@/store'
import { tabbarStore } from '@/components/fg-tabbar/tabbar'
import { getEquList } from '@/service/equ'
import { getRepairResList } from '@/service/repair'
import { getFixtureList } from '@/service/fixture'
import { receiveOrderRepair } from '@/service/mobile'
import { useToast, useMessage } from 'wot-design-uni'
import { ref } from 'vue'
const message = useMessage()
const toast = useToast()
defineOptions({
  name: 'Home',
})
const userStore = useUserStore()
const equTotal = ref(0)
const faultTotal = ref(0)
const fixtureTotal = ref(0)
const paging = ref(null)
const dataList = ref([])
// èŽ·å–å±å¹•è¾¹ç•Œåˆ°å®‰å…¨åŒºåŸŸè·ç¦»
const { safeAreaInsets } = uni.getSystemInfoSync()
const getAllMenus = async () => {
  const menuList = await getAllMenusApi()
  console.error(menuList)
}
function handleInfo() {
  uni.showToast({
@@ -159,25 +190,55 @@
  })
}
const goItemPage = (path: string) => {
  const url = `/${path}`
  uni.navigateTo({
    url,
  })
const queryList = (pageNum?: number, pageSize?: number) => {
  getEquList({ pageNum, pageSize })
    .then((res: any) => {
      equTotal.value = res?.total || 0
      queryRepairResList()
      queryFixtureList()
      paging.value.complete(true)
    })
    .catch((res) => {
      paging.value.complete(true)
    })
}
const goItemPage = (item: any) => {
  if (!item?.custom) {
    const url = `/${item.path}`
    uni.navigateTo({
      url,
    })
  } else {
    switch (item.name) {
      case '接单维修':
        handleSelectReq()
        break
    }
  }
}
onLoad(() => {
  // getAllMenus()
  queryEquList()
  queryRepairResList()
  queryFixtureList()
})
const commonMenu = reactive([
  {
    id: 1,
    name: '故障报修',
    icon: '/static/ico/ico20.png',
    icon: '/static/ico/ico7.png',
    path: 'pages/repair/repair-add',
  }
  },
  {
    id: 2,
    custom: true,
    name: '接单维修',
    icon: '/static/ico/ico8.png',
    path: 'pages/repair/repair-add',
  },
])
const equMenu = reactive([
@@ -240,6 +301,94 @@
}
const realName = computed(() => userStore?.userInfo?.realName)
/**
 * é€‰æ‹©æŠ¥ä¿®å•
 */
function handleSelectReq() {
  uni.navigateTo({
    url: '/pages/repair/req-list',
    events: {
      // ä¸ºæŒ‡å®šäº‹ä»¶æ·»åŠ ä¸€ä¸ªç›‘å¬å™¨ï¼ŒèŽ·å–è¢«æ‰“å¼€é¡µé¢ä¼ é€åˆ°å½“å‰é¡µé¢çš„æ•°æ®
      selectReq: function (data) {
        // é€‰æ‹©æŠ¥ä¿®å•后,修改报修单状态和新增维修工单
        const resCode = `WXD${data.data.code.slice(3)}`
        const deptId = userStore?.userInfo?.deptId
        const userId = userStore?.userInfo?.userId
        const resData = {
          reqId: data.data.id,
          reqCode: data.data.code,
          reqUser: data.data.reqUser,
          reqDept: data.data.reqDept,
          resCode,
          status: '1',
          resUser: userId,
          resDept: deptId,
        }
        receiveOrderRepair(resData)
          .then((res: any) => {
            if (res?.id) {
              toast.success(res?.msg || '操作成功')
              uni.navigateTo({
                url: `/pages/repair/res-detail?id=${res?.id}`,
              })
            } else {
              toast.error(res?.msg || '生成维修工单失败,请重试')
            }
          })
          .catch((res) => {
            toast.error(res?.msg || '生成维修工单失败,请重试')
          })
      },
    },
    success: function (res) {
      // é€šè¿‡eventChannel向被打开页面传送数据
      res.eventChannel.emit('OnSelectReq', { data: '维修单页面选择报修单' })
    },
  })
}
function queryEquList() {
  getEquList({
    page: 1,
    size: 10,
  })
    .then((res: any) => {
      equTotal.value = res?.total || 0
    })
    .catch((err) => {
      console.log(err)
    })
}
function queryRepairResList() {
  getRepairResList({
    page: 1,
    size: 10,
    status: '2',
  })
    .then((res: any) => {
      faultTotal.value = res?.total || 0
    })
    .catch((res) => {})
}
function queryFixtureList() {
  getFixtureList({
    page: 1,
    size: 10,
  })
    .then((res: any) => {
      fixtureTotal.value = res?.total || 0
    })
    .catch((res) => {})
}
function goToDetail(item) {
  uni.navigateTo({
    url: `/pages/repair/res-detail?id=${item.id}`,
  })
}
</script>
<style lang="scss" scoped>
eims-ui-mobile/src/pages/inspect/insp-record.vue
@@ -119,7 +119,7 @@
      <view class="w-full h-[24rpx]"></view>
      <wd-cell>
        <template #title>
          <text class="text-color-gray">其它</text>
          <text class="text-color-gray">其他</text>
        </template>
      </wd-cell>
      <view class="w-full h-[1px] bg-base"></view>
eims-ui-mobile/src/pages/repair/req-list.vue
@@ -24,7 +24,7 @@
}
</route>
<template>
  <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
  <z-paging ref="paging" v-model="dataList" :auto="false" @query="queryList" show-refresher-update-time>
    <template #top>
      <wd-drop-menu v-if="!isSelectReq">
        <wd-drop-menu-item
@@ -264,6 +264,7 @@
    // åªæ˜¾ç¤ºæœªæŽ¥å•数据
    status.value = 0
    console.log('OnSelectReq', data)
    reloadData()
  })
})
@@ -272,6 +273,8 @@
  reqTypeList.value.push(...rList)
  const sList: any = await getDictInfo(DICT_REPAIR_REQ_STATUS)
  statusList.value.push(...sList)
  reloadData()
}
onLoad(() => {
eims-ui-mobile/src/service/mobile.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
import { http } from '@/utils/http'
/**
 * æ­¤é¡µé¢æŽ¥å£ä¸ºç§»åŠ¨ç«¯ç‰¹æ®Šéœ€æ±‚æ–°å¢žæŽ¥å£
 */
/**
 * æŽ¥å•ç»´ä¿®-组合api
 * @param data
 */
export const receiveOrderRepair = (data: any) => {
  return http.post<void>('/eims/mobile/receiveOrderRepair', data)
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/MobileController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package org.dromara.eims.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.dromara.eims.domain.bo.EimsRepairResBo;
import org.dromara.eims.domain.vo.EimsRepairResVo;
import org.dromara.eims.service.IEimsRepairResService;
import org.dromara.eims.service.IMobileService;
import org.springframework.validation.annotation.Validated;
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;
/**
 * ç§»åŠ¨ç«¯controller
 * ä¸»è¦ç”¨äºŽä¸€äº›ç‰¹æ®Šæ“ä½œï¼š å¦‚快捷接单维修(一次请求多个接口,为保证原子性新增的接口)
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eims/mobile")
public class MobileController extends BaseController {
    private final IMobileService mobileService;
    @Log(title = "接单维修-组合api", businessType = BusinessType.OTHER)
    @RepeatSubmit()
    @PostMapping("receiveOrderRepair")
    public R<EimsRepairResVo> receiveOrderRepair(@Validated(AddGroup.class) @RequestBody EimsRepairResBo bo) {
        EimsRepairResVo eimsRepairResVo = mobileService.receiveOrderRepair(bo);
        return  R.ok(eimsRepairResVo);
    }
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IMobileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package org.dromara.eims.service;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.eims.domain.bo.EimsRepairResBo;
import org.dromara.eims.domain.vo.EimsRepairResVo;
import java.util.Collection;
import java.util.List;
public interface IMobileService {
    /**
     * æŽ¥å•ç»´ä¿®
     * @param bo
     */
    EimsRepairResVo receiveOrderRepair(EimsRepairResBo bo);
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java
@@ -69,13 +69,18 @@
            if(reqVo.getEquId()!=null){
                EimsEquVo equVo = equMapper.selectVoById(reqVo.getEquId());
                resVo.setAssetNo(equVo.getAssetNo());
                resVo.setEquName(equVo.getEquName());
                if(equVo!=null){
                    resVo.setAssetNo(equVo.getAssetNo());
                    resVo.setEquName(equVo.getEquName());
                }
            }
            if(reqVo.getFixtureId()!=null){
                EimsFixtureVo fixtureVo = fixtureMapper.selectVoById(reqVo.getFixtureId());
                resVo.setFixtureName(fixtureVo.getFixtureName());
                resVo.setAssetNo(fixtureVo.getAssetNo());
                if(fixtureVo!=null){
                    resVo.setFixtureName(fixtureVo.getFixtureName());
                    resVo.setAssetNo(fixtureVo.getAssetNo());
                }
            }
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/MobileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
package org.dromara.eims.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.dromara.common.core.constant.DictConstants;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.service.RepairResService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.eims.domain.EimsRepairRecord;
import org.dromara.eims.domain.EimsRepairReq;
import org.dromara.eims.domain.EimsRepairRes;
import org.dromara.eims.domain.bo.EimsRepairResBo;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.eims.domain.vo.EimsFixtureVo;
import org.dromara.eims.domain.vo.EimsRepairReqVo;
import org.dromara.eims.domain.vo.EimsRepairResVo;
import org.dromara.eims.mapper.*;
import org.dromara.eims.service.IEimsRepairResService;
import org.dromara.eims.service.IMobileService;
import org.dromara.eims.utils.DataFilterUtil;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@RequiredArgsConstructor
@Service
public class MobileServiceImpl implements IMobileService {
    private final EimsRepairResMapper repairResMapper;
    private final EimsRepairReqMapper reqMapper;
    private final EimsRepairRecordMapper recordMapper;
    @Transactional(rollbackFor = Exception.class)
    @Override
    public synchronized EimsRepairResVo receiveOrderRepair(EimsRepairResBo bo) {
        /**
         * TODO æ³¨æ„æŽ¥å£è°ƒæ•´åŽéœ€è°ƒæ•´ï¼ˆæ­¤æ“ä½œåŽŸæœ¬ä¸ºç§»åŠ¨ç«¯ä¾æ¬¡ä¼ é€’æ•°æ®è°ƒç”¨æŽ¥å£ï¼ŒçŽ°ä¸ºä¿è¯åŽŸå­æ€§ä¸€æ¬¡æ€§è°ƒç”¨å¤šä¸ªæŽ¥å£ï¼‰
         */
        //1.新增维修工单
        EimsRepairRes add = MapstructUtils.convert(bo, EimsRepairRes.class);
        boolean flag = repairResMapper.insert(add) > 0;
        if (flag) {
            bo.setId(add.getId());
            // æ–°å¢žç»´ä¿®å·¥å•的时候更新报修单数据
            EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId());
            reqVo.setRepairId(add.getId());
            reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.YIJIEDAN);
            EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class);
            reqMapper.updateById(req);
            //将新增报修单时维修记录的维修工单id更新
            LambdaQueryWrapper<EimsRepairRecord> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(EimsRepairRecord::getReqId, add.getReqId());
            EimsRepairRecord one = recordMapper.selectOne(queryWrapper);
            if(one!=null){
                one.setResId(add.getId());
                recordMapper.updateById(one);
            }
            //生成维修记录
            EimsRepairRecord record = new EimsRepairRecord();
            record.setReqId(add.getReqId());
            record.setResId(add.getId());
            record.setHandleTime(new Date());
            //接单状态
            record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.YIJIEDAN);
            record.setOperaUser(add.getCreateBy());
            record.setOperaResult("生成维修工单");
            //新增时生成记录
            recordMapper.insert(record);
        }
        //2.更新维修工单
        LoginUser loginUser = LoginHelper.getLoginUser();
        bo.setStartTime(new Date());
        bo.setStatus("2");
        EimsRepairRes update = MapstructUtils.convert(bo, EimsRepairRes.class);
        EimsRepairResVo resVo = repairResMapper.selectVoById(bo.getId());
        String status = resVo.getStatus();
        //维修工单开始维修,同步更新报修单 ä»¥åŠ ç»´ä¿®è®°å½•
        if (bo.getStatus().equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU) &&
            status.equals(DictConstants.REPAIR_RES_STATUS_DETAIL.YIJIEDAN)) {
            //2.1.设置开始维修时间和状态 TODO
            //2.2更新报修单为维修状态
            EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId());
            reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU);
            EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class);
            reqMapper.updateById(req);
            //2.3生成维修记录
            EimsRepairRecord record = new EimsRepairRecord();
            record.setResId(bo.getId());
            record.setReqId(bo.getReqId());
            record.setHandleTime(new Date());
            record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.WEIXIU);
            assert loginUser != null;
            record.setOperaUser(loginUser.getUserId());
            record.setOperaResult("开始维修");
            recordMapper.insert(record);
        }
        repairResMapper.updateById(update);
        return repairResMapper.selectVoById(update.getId());
    }
}