车间能级提升-智能设备管理系统
zhuguifei
21 小时以前 453f63fd6cd6466222304df619e62b3a5667ca68
修复0730测试问题

java(修改): 1点检汇总、工单汇总接口同步更新子表 2.故障知识库查询接口处理
web(修改): 1点检汇总、工单汇总页面显示字段 2故障知识库页面显示 3部分搜索字段更新
mobile(修改): 1点检汇总、工单汇总页面状态更新
已修改18个文件
已添加2个文件
622 ■■■■ 文件已修改
eims-ui-mobile/src/pages/inspect/insp-st.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/maint/maint-st.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/fault-know/data.tsx 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/fault-know/fault-preview-drawer.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/fault-know/index.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-order/data.tsx 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-order/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui/apps/web-antd/src/views/eims/maint-st/data.tsx 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsFaultKnowController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintStController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintStBo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMultipleMaintStBo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectStVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintStService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectRecordServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintStServiceImpl.java 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eims-ui-mobile/src/pages/inspect/insp-st.vue
@@ -12,8 +12,7 @@
  <z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
    <template #top>
      <!-- å¢žåŠ ä¸€ä¸ªæœç´¢æ  -->
      <wd-search v-model="searchValue" @search="handleSearch">
      </wd-search>
      <wd-search v-model="searchValue" @search="handleSearch"></wd-search>
      <wd-tabs v-model="activeTab" @change="handleTabChange">
        <wd-tab title="待点检"></wd-tab>
        <wd-tab title="待确认"></wd-tab>
@@ -45,9 +44,15 @@
            <view class="text-color-gray text-sm mt-1 flex">
              <text class="mr-3">总数: {{ item.recordCount }}</text>
              |
              <template v-if="activeTab === 0">
                <text class="mx-3">未点检: {{ item.unCheckCount }}</text>
                |
              </template>
              <template v-else>
                <text class="mx-3">待确认: {{ item.dqrCount }}</text>
                |
              </template>
              <text class="mx-3">已点检: {{ item.checkCount }}</text>
              |
              <text class="ml-3">未点检: {{ item.unCheckCount }}</text>
            </view>
            <view class="text-color-gray text-sm mt-2 flex">
              <text class="mr-3">正常: {{ item.normalNum }}</text>
@@ -82,7 +87,7 @@
import { getInspStList } from '@/service/inspect'
import dayjs from 'dayjs'
import { useUserStore, useAccessStore, useSystemConfigStore } from '@/store'
import { isLeader, isLineOrRepair, isOperator } from "@/utils/RoleUtils";
import { isLeader, isLineOrRepair, isOperator } from '@/utils/RoleUtils'
// æ ‡ç­¾é¡µç›¸å…³
const activeTab = ref(0) // é»˜è®¤é€‰ä¸­ç¬¬ä¸€ä¸ªæ ‡ç­¾é¡µï¼ˆå¾…点检)
eims-ui-mobile/src/pages/maint/maint-st.vue
@@ -53,9 +53,15 @@
            <view class="text-color-gray text-sm mt-1 flex">
              <text class="mr-3">总数: {{ item.orderCount }}</text>
              |
              <text class="mx-3">已完成: {{ item.dyzCount }}</text>
              |
              <text class="mx-3">待保养: {{ item.dbyCount }}</text>
              <template v-if="activeTab === 0">
                <text class="mx-3">待保养: {{ item.dbyCount }}</text>
                |
              </template>
              <template v-else>
                <text class="mx-3">待验证: {{ item.dyzCount }}</text>
                |
              </template>
              <text class="mx-3">已完成: {{ item.wcCount }}</text>
            </view>
<!--            <view class="text-color-gray text-sm mt-2 flex">-->
<!--              <text class="mr-3">待保养: {{ item.dbyCount }}</text>-->
eims-ui/apps/web-antd/src/views/eims/fault-know/data.tsx
@@ -5,47 +5,56 @@
import { type FormSchemaGetter } from '#/adapter/form';
import { getDictOptions } from '#/utils/dict';
import { renderDict } from '#/utils/render';
import type { DescItem } from '#/components/description';
export const querySchema: FormSchemaGetter = () => [
  // {
  //   component: 'Input',
  //   fieldName: 'faultCode',
  //   label: '知识编号'
  // },
  // {
  //   component: 'Input',
  //   fieldName: 'equName',
  //   label: '设备名称'
  // },
  // {
  //   component: 'Input',
  //   fieldName: 'assetNo',
  //   label: '资产编号'
  // },
  // {
  //   component: 'Select',
  //   componentProps: {
  //     options: getDictOptions(DictEnum.EIMS_EQU_PART)
  //   },
  //   fieldName: 'equPart',
  //   label: '设备部位'
  // },
  // {
  //   component: 'Select',
  //   componentProps: {
  //     options: getDictOptions(DictEnum.REPAIR_FAULT_TYPE)
  //   },
  //   fieldName: 'faultType',
  //   label: '故障类别'
  // },
  {
    component: 'Input',
    fieldName: 'faultCode',
    label: '知识编号'
  },
  {
    component: 'Input',
    fieldName: 'equName',
    label: '设备名称'
  },
  {
    component: 'Input',
    fieldName: 'assetNo',
    label: '资产编号'
  },
  {
    component: 'Select',
    fieldName: 'params.searchValue',
    componentProps: {
      options: getDictOptions(DictEnum.EIMS_EQU_PART)
      placeholder: '请输入设备名称或资产编号'
    },
    fieldName: 'equPart',
    label: '设备部位'
    label: '关键字'
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.REPAIR_FAULT_TYPE)
    },
    fieldName: 'faultType',
    label: '故障类别'
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.EIMS_FAULT_REASON)
    },
    fieldName: 'faultReason',
    label: '故障原因'
  },
  // {
  //   component: 'Select',
  //   componentProps: {
  //     options: getDictOptions(DictEnum.EIMS_FAULT_REASON)
  //   },
  //   fieldName: 'faultReason',
  //   label: '故障原因'
  // },
  {
    component: 'Input',
    fieldName: 'reqDesc',
@@ -60,24 +69,25 @@
export const columns: VxeGridProps['columns'] = [
  { type: 'checkbox', width: 60, fixed: 'left' },
  {
    title: '知识编码',
    field: 'faultCode',
    minWidth: 200
  },
  {
    title: '设备名称',
    field: 'equName',
    minWidth: 140,
    fixed: 'left',
    slots: { default: 'equName' }
    fixed: 'left'
  },
  {
    title: '资产编号',
    field: 'assetNo',
    sortable: true,
    minWidth: 140,
    fixed: 'left'
  },
  {
    title: '知识编码',
    field: 'faultCode',
    minWidth: 200
  },
  {
    title: '设备类型',
@@ -112,20 +122,20 @@
    },
    minWidth: 120
  },
  {
    title: '故障原因',
    field: 'faultReason',
    sortable: true,
    slots: {
      default: ({ row }) => {
        if (row.faultReason === null || row.faultReason === '') {
          return '';
        }
        return renderDict(row.faultReason, DictEnum.EIMS_FAULT_REASON);
      }
    },
    minWidth: 120
  },
  // {
  //   title: '故障原因',
  //   field: 'faultReason',
  //   sortable: true,
  //   slots: {
  //     default: ({ row }) => {
  //       if (row.faultReason === null || row.faultReason === '') {
  //         return '';
  //       }
  //       return renderDict(row.faultReason, DictEnum.EIMS_FAULT_REASON);
  //     }
  //   },
  //   minWidth: 120
  // },
  {
    title: '报修描述',
    field: 'reqDesc',
@@ -141,7 +151,7 @@
    fixed: 'right',
    slots: { default: 'action' },
    title: '操作',
    width: 200
    width: 80
  }
];
@@ -203,3 +213,31 @@
    label: '处理措施'
  }
];
export const descSchema: DescItem[] = [
  {
    field: 'equName',
    label: '设备名称'
  },
  {
    field: 'assetNo',
    label: '资产编号'
  },
  {
    field: 'resCode',
    label: '维修工单'
  },
  {
    field: 'faultCode',
    label: '知识编码'
  },
  {
    field: 'reqDesc',
    label: '报修描述'
  },
  {
    field: 'resHandle',
    label: '处理措施'
  }
];
eims-ui/apps/web-antd/src/views/eims/fault-know/fault-preview-drawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
<script setup lang="ts">
import type { Recordable } from '@vben/types';
import { useVbenDrawer } from '@vben/common-ui';
import { Description, useDescription } from '#/components/description';
import { descSchema } from './data';
const [BasicDrawer, drawerApi] = useVbenDrawer({
  onOpenChange: handleOpenChange,
});
const [registerDescription, { setDescProps }] = useDescription({
  column: 1,
  schema: descSchema,
});
function handleOpenChange(open: boolean) {
  if (!open) {
    return null;
  }
  const { record } = drawerApi.getData() as { record: Recordable<any> };
  setDescProps({ data: record }, true);
}
</script>
<template>
  <BasicDrawer :footer="false" class="w-[600px]" title="故障明细">
    <Description @register="registerDescription" />
  </BasicDrawer>
</template>
eims-ui/apps/web-antd/src/views/eims/fault-know/index.vue
@@ -2,7 +2,7 @@
import type { Recordable } from '@vben/types';
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { Page, useVbenDrawer, type VbenFormProps } from '@vben/common-ui';
import { $t } from '@vben/locales';
@@ -17,6 +17,8 @@
import { columns, querySchema } from './data';
import EquTypeTree from './equ-type-tree.vue';
import faultKnowDrawer from './fault-know-drawer.vue';
import faultPreviewDrawer from './fault-preview-drawer.vue';
import trialPreviewDrawer from '#/views/eims/equ-trial/trial-preview-drawer.vue';
// å·¦è¾¹éƒ¨é—¨ç”¨
const selectDeptId = ref<string[]>([]);
@@ -101,6 +103,19 @@
const [FaultKnowDrawer, faultKnowDrawerApi] = useVbenDrawer({
  connectedComponent: faultKnowDrawer
});
const [FaultPreviewDrawer, faultPreviewDrawerApi] = useVbenDrawer({
  connectedComponent: faultPreviewDrawer
});
/**
 * é¢„览
 * @param record
 */
function handlePreview(record: Recordable<any>) {
  faultPreviewDrawerApi.setData({ record });
  faultPreviewDrawerApi.open();
}
function handleAdd() {
  faultKnowDrawerApi.setData({});
@@ -148,24 +163,24 @@
  <Page :auto-content-height="true">
    <div class="flex h-full gap-[8px]">
      <EquTypeTree v-model:select-dept-id="selectDeptId" class="w-[260px]" @reload="() => tableApi.reload()" @select="() => tableApi.reload()" />
      <BasicTable class="flex-1 overflow-hidden" table-title="设备列表">
      <BasicTable class="flex-1 overflow-hidden" table-title="故障列表">
        <template #toolbar-tools>
          <Space>
            <a-button v-access:code="['eims:faultKnow:export']" @click="handleDownloadExcel">
              {{ $t('pages.common.export') }}
            </a-button>
            <a-button
              :disabled="!vxeCheckboxChecked(tableApi)"
              danger
              type="primary"
              v-access:code="['eims:faultKnow:remove']"
              @click="handleMultiDelete"
            >
              {{ $t('pages.common.delete') }}
            </a-button>
            <a-button type="primary" v-access:code="['eims:faultKnow:add']" @click="handleAdd">
              {{ $t('pages.common.add') }}
            </a-button>
<!--            <a-button v-access:code="['eims:faultKnow:export']" @click="handleDownloadExcel">-->
<!--              {{ $t('pages.common.export') }}-->
<!--            </a-button>-->
<!--            <a-button-->
<!--              :disabled="!vxeCheckboxChecked(tableApi)"-->
<!--              danger-->
<!--              type="primary"-->
<!--              v-access:code="['eims:faultKnow:remove']"-->
<!--              @click="handleMultiDelete"-->
<!--            >-->
<!--              {{ $t('pages.common.delete') }}-->
<!--            </a-button>-->
<!--            <a-button type="primary" v-access:code="['eims:faultKnow:add']" @click="handleAdd">-->
<!--              {{ $t('pages.common.add') }}-->
<!--            </a-button>-->
          </Space>
        </template>
@@ -177,18 +192,22 @@
        <template #action="{ row }">
          <Space>
            <ghost-button v-access:code="['eims:faultKnow:edit']" @click.stop="handleEdit(row)">
              {{ $t('pages.common.edit') }}
            <ghost-button class="btn-success" v-access:code="['eims:faultKnow:list']" @click.stop="handlePreview(row)">
              {{ $t('pages.common.preview') }}
            </ghost-button>
            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">
              <ghost-button danger v-access:code="['eims:faultKnow:remove']" @click.stop="">
                {{ $t('pages.common.delete') }}
              </ghost-button>
            </Popconfirm>
<!--            <ghost-button v-access:code="['eims:faultKnow:edit']" @click.stop="handleEdit(row)">-->
<!--              {{ $t('pages.common.edit') }}-->
<!--            </ghost-button>-->
<!--            <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="确认删除?" @confirm="handleDelete(row)">-->
<!--              <ghost-button danger v-access:code="['eims:faultKnow:remove']" @click.stop="">-->
<!--                {{ $t('pages.common.delete') }}-->
<!--              </ghost-button>-->
<!--            </Popconfirm>-->
          </Space>
        </template>
      </BasicTable>
    </div>
    <FaultKnowDrawer @reload="tableApi.query()" />
    <FaultPreviewDrawer />
  </Page>
</template>
eims-ui/apps/web-antd/src/views/eims/maint-order/data.tsx
@@ -8,10 +8,31 @@
import { renderDict } from '#/utils/render';
export const querySchema: FormSchemaGetter = () => [
  // {
  //   component: 'Input',
  //   fieldName: 'equName',
  //   label: '设备名称'
  // },
  {
    component: 'Input',
    fieldName: 'equName',
    label: '设备名称'
    fieldName: 'params.searchValue',
    componentProps: {
      placeholder: '请输入标题或资产编号'
    },
    label: '关键字'
  },
  {
    component: 'RangePicker',
    fieldName: 'planTime',
    label: '保养日期'
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.MAINT_ORDER_STATUS)
    },
    fieldName: 'status',
    label: '状态'
  },
  {
    component: 'Input',
@@ -50,14 +71,6 @@
    },
    fieldName: 'maintRule',
    label: '计算规则'
  },
  {
    component: 'Select',
    componentProps: {
      options: getDictOptions(DictEnum.MAINT_ORDER_STATUS)
    },
    fieldName: 'status',
    label: '状态'
  }
];
eims-ui/apps/web-antd/src/views/eims/maint-order/index.vue
@@ -33,7 +33,9 @@
  },
  collapsed: true,
  schema: querySchema(),
  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'
  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',
  // æ—¥æœŸé€‰æ‹©æ ¼å¼åŒ–
  fieldMappingTime: [['planTime', ['params[beginPlanTime]', 'params[endPlanTime]'], ['YYYY-MM-DD 00:00:00', 'YYYY-MM-DD 23:59:59']]]
};
const gridOptions: VxeGridProps = {
eims-ui/apps/web-antd/src/views/eims/maint-st/data.tsx
@@ -10,15 +10,23 @@
import { renderDict } from '#/utils/render';
export const querySchema: FormSchemaGetter = () => [
  // {
  //   component: 'Input',
  //   fieldName: 'title',
  //   label: '标题'
  // },
  // {
  //   component: 'Input',
  //   fieldName: 'assetno',
  //   label: '资产编号'
  // },
  {
    component: 'Input',
    fieldName: 'title',
    label: '标题'
  },
  {
    component: 'Input',
    fieldName: 'assetno',
    label: '资产编号'
    fieldName: 'params.searchValue',
    componentProps: {
      placeholder: '请输入标题或资产编号'
    },
    label: '关键字'
  },
  {
    component: 'RangePicker',
@@ -78,16 +86,16 @@
      }
    }
  },
  {
    title: '保养中',
    field: 'byCount',
    minWidth: 80,
    slots: {
      default: ({ row }) => {
        return <Tag color="blue">{row.byCount}</Tag>;
      }
    }
  },
  // {
  //   title: '保养中',
  //   field: 'byCount',
  //   minWidth: 80,
  //   slots: {
  //     default: ({ row }) => {
  //       return <Tag color="blue">{row.byCount}</Tag>;
  //     }
  //   }
  // },
  {
    title: '待验证',
    field: 'dyzCount',
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsFaultKnowController.java
@@ -1,11 +1,19 @@
package org.dromara.eims.controller;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.eims.domain.bo.EimsRepairResBo;
import org.dromara.eims.domain.vo.EimsEquVo;
import org.dromara.eims.domain.vo.EimsRepairReqVo;
import org.dromara.eims.domain.vo.EimsRepairResVo;
import org.dromara.eims.service.IEimsEquService;
import org.dromara.eims.service.IEimsRepairReqService;
import org.dromara.eims.service.IEimsRepairResService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -35,6 +43,9 @@
public class EimsFaultKnowController extends BaseController {
    private final IEimsFaultKnowService eimsFaultKnowService;
    private final IEimsRepairResService repairResService;
    private final IEimsRepairReqService repairReqService;
    private final IEimsEquService equService;
    /**
     * æŸ¥è¯¢æ•…障知识列表
@@ -42,7 +53,54 @@
    @SaCheckPermission("eims:faultKnow:list")
    @GetMapping("/list")
    public TableDataInfo<EimsFaultKnowVo> list(EimsFaultKnowBo bo, PageQuery pageQuery) {
        return eimsFaultKnowService.queryPageList(bo, pageQuery);
//        return eimsFaultKnowService.queryPageList(bo, pageQuery);
        return  comp(bo, pageQuery);
    }
    private TableDataInfo<EimsFaultKnowVo> comp(EimsFaultKnowBo bo,PageQuery pageQuery){
        EimsRepairResBo b = new EimsRepairResBo();
        PageQuery pQuery = new PageQuery();
        pQuery.setPageNum(pageQuery.getPageNum());
        pQuery.setPageSize(pageQuery.getPageSize());
        b.setParams(bo.getParams());
        b.setResHandle(bo.getResHandle());
        b.setReqDesc(bo.getReqDesc());
        TableDataInfo<EimsRepairResVo> tableDataInfo = repairResService.queryPageListCustom(b, pQuery);
        return getEimsFaultKnowVoTableDataInfo(tableDataInfo);
    }
    private  TableDataInfo<EimsFaultKnowVo> getEimsFaultKnowVoTableDataInfo(TableDataInfo<EimsRepairResVo> tableDataInfo) {
        TableDataInfo<EimsFaultKnowVo> resTableData =  new TableDataInfo<>();
        resTableData.setCode(tableDataInfo.getCode());
        resTableData.setMsg(tableDataInfo.getMsg());
        resTableData.setTotal(tableDataInfo.getTotal());
        List<EimsFaultKnowVo> rows= new ArrayList<>();
        int size = tableDataInfo.getRows().size();
        for (int i = 0; i < size; i++) {
            EimsFaultKnowVo vo = new EimsFaultKnowVo();
            EimsRepairResVo res = tableDataInfo.getRows().get(i);
            vo.setFaultCode("GZZS"+ String.valueOf(res.getId()).substring(0,10));
            vo.setFaultReason(res.getResReason());
            vo.setResHandle(res.getResHandle());
            EimsRepairReqVo reqVo = repairReqService.queryById(res.getReqId());
            if(reqVo!=null){
                vo.setReqDesc(reqVo.getReqDesc());
                Long equId = reqVo.getEquId();
                if(equId!=null){
                    EimsEquVo equVo = equService.queryById(equId);
                    if(equVo!=null){
                        vo.setAssetNo(equVo.getAssetNo());
                        vo.setEquId(equVo.getEquId());
                    }
                }
            }
            rows.add(vo);
        }
        resTableData.setRows(rows);
        return resTableData;
    }
    /**
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsMaintStController.java
@@ -7,6 +7,7 @@
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.eims.domain.bo.EimsMaintStBo;
import org.dromara.eims.domain.bo.EimsMultipleMaintStBo;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
@@ -91,6 +92,17 @@
    }
    /**
     * æ‰¹é‡ä¿®æ”¹ä¿å…»å·¥å•汇总
     */
    @SaCheckPermission("eims:maintSt:edit")
    @Log(title = "批量修改保养工单汇总", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping("/batch")
    public R<Void> editBatch(@Validated(EditGroup.class) @RequestBody EimsMultipleMaintStBo bo) {
        return toAjax(eimsMaintStService.updateBatchByBo(bo));
    }
    /**
     * åˆ é™¤ä¿å…»å·¥å•汇总
     *
     * @param ids ä¸»é”®ä¸²
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMaintStBo.java
@@ -71,5 +71,11 @@
     */
    private String remark;
    /**
     * æŸ¥è¯¢æ±‡æ€»ä¸‹å­å·¥å•需要此字段
     * equId + pian_time æ‹¼æŽ¥
     */
    private String maintCode;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsMultipleMaintStBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.dromara.eims.domain.bo;
import lombok.Data;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.util.List;
/**
 * æ‰¹é‡ä¿å…»å·¥å•汇总业务对象 eims_maint_st
 */
@Data
public class EimsMultipleMaintStBo extends BaseEntity {
    private List<EimsMaintStBo> multipleMaintStBoList;
}
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/bo/EimsRepairResBo.java
@@ -119,6 +119,7 @@
    private  String reqCode;//报修单编码
    private  String reqType;//报修单类型
    private  String assetNo;//设备资产编号
    private  String reqDesc;//故障描述
    private Long equId;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/EimsInspectStVo.java
@@ -129,6 +129,10 @@
     */
    private Integer unCheckCount;
    /**
     * å¾…确认点检记录
     */
    private Integer dqrCount;
    /**
     * ç»“æžœ-正常数
     */
    private Integer normalNum;
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/IEimsMaintStService.java
@@ -2,6 +2,7 @@
import org.dromara.common.core.domain.R;
import org.dromara.eims.domain.bo.EimsMaintStBo;
import org.dromara.eims.domain.bo.EimsMultipleMaintStBo;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
@@ -57,6 +58,7 @@
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    Boolean updateByBo(EimsMaintStBo bo);
    Boolean updateBatchByBo(EimsMultipleMaintStBo bo);
    /**
     * æ ¡éªŒå¹¶æ‰¹é‡åˆ é™¤ä¿å…»å·¥å•汇总信息
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectRecordServiceImpl.java
@@ -249,13 +249,22 @@
    @Override
    public Boolean updateBatchByBo(InspectRecordBo bo) {
//        LoginUser loginUser = LoginHelper.getLoginUser();
        LoginUser loginUser = LoginHelper.getLoginUser();
        List<EimsInspectRecord> inspRecordList = MapstructUtils.convert(bo.getInspRecordList(), EimsInspectRecord.class);
        inspRecordList.forEach(item->{
            // æ›´æ–°ä¸ºå·²ç‚¹æ£€
            item.setStatus(DictConstants.EIMS_INSPECT_STATUS_DETAIL.Y);
            // å‰ç«¯ä¼ å…¥çŠ¶æ€
            // item.setStatus(DictConstants.EIMS_INSPECT_STATUS_DETAIL.Y);
//            item.setInspTime(new Date());
//            item.setInspUser(loginUser.getUserId());
            // ç‚¹æ£€(0)-> å¾…确认(1)
            if(item.getInspUser()==null && (item.getStatus()!=null && item.getStatus().equals("1"))){
                item.setInspUser(loginUser.getUserId());
            }
            // å¾…确认(1)-> å®Œæˆ(2)
            if(item.getVerifyUser()==null&& (item.getStatus()!=null && item.getStatus().equals("2"))){
                item.setVerifyUser(loginUser.getUserId());
            }
        });
        return baseMapper.updateBatchById(inspRecordList);
    }
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectStServiceImpl.java
@@ -11,9 +11,12 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.eims.domain.EimsEqu;
import org.dromara.eims.domain.EimsInspectRecord;
import org.dromara.eims.domain.EimsMaintOrder;
import org.dromara.eims.domain.vo.EimsInspectRecordVo;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.dromara.eims.mapper.EimsEquMapper;
import org.dromara.eims.mapper.EimsInspectRecordMapper;
import org.springframework.stereotype.Service;
@@ -171,7 +174,7 @@
            List<EimsInspectRecordVo> recordList = recordMapper.selectVoList(recordLqw);
            // TODO æ ¹æ®å­—å…¸eims_inspect_status
            Map<String, Long> cMap = recordList.stream()
                .filter(order -> List.of("0", "1").contains(order.getStatus()))
                .filter(order -> List.of("0","1", "2").contains(order.getStatus()))
                .collect(Collectors.groupingBy(EimsInspectRecordVo::getStatus, Collectors.counting()));
            // TODO æ ¹æ®å­—å…¸eims_inspect_result
            Map<String, Long> rMap = recordList.stream()
@@ -180,7 +183,8 @@
            stVo.setRecordCount(recordList.size());
            stVo.setUnCheckCount(cMap.getOrDefault("0", 0L).intValue());
            stVo.setCheckCount(cMap.getOrDefault("1", 0L).intValue());
            stVo.setDqrCount(cMap.getOrDefault("1", 0L).intValue());
            stVo.setCheckCount(cMap.getOrDefault("2", 0L).intValue());
            stVo.setNormalNum(rMap.getOrDefault("1", 0L).intValue());
            stVo.setAbNormalNum(rMap.getOrDefault("2", 0L).intValue());
@@ -294,6 +298,30 @@
//                if(update.getVerifyTime()==null) update.setVerifyTime(new Date());
//            }
//        }
        //点检汇总完成需同步更新st下子工单
            EimsInspectStVo st = baseMapper.selectVoById(bo.getId());
            Long equId =  st.getEquId();
            String planTime = DateUtils.dateTime(st.getPlanTime());
            LambdaQueryWrapper<EimsInspectRecord> wrapper = Wrappers.lambdaQuery();
            wrapper.eq(EimsInspectRecord::getEquId,equId);
            wrapper.eq(EimsInspectRecord::getPlanTime,planTime);
            List<EimsInspectRecord> recordList = recordMapper.selectList(wrapper);
            // st下子工单所有状态设置为3-已完成
            recordList.forEach(order -> {
                order.setStatus(bo.getStatus());
                if(order.getStatus().equals("1")){
                    order.setInspUser(LoginHelper.getUserId());
                }else if(order.getStatus().equals("2")){
                    order.setVerifyUser(LoginHelper.getUserId());
                }
            });
            recordMapper.updateBatchById(recordList);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
@@ -19,6 +19,7 @@
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.eims.domain.EimsEquStatu;
import org.dromara.eims.domain.EimsMaintPlan;
import org.dromara.eims.domain.EimsSpareInout;
import org.dromara.eims.domain.bo.EimsSpareBo;
@@ -116,6 +117,11 @@
        qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode());
        qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName());
        qw.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId());
        if (params.get("searchValue") != null && StringUtils.isNotBlank(params.get("searchValue").toString())) {
            qw.and( wq ->wq.like("equ.equ_name", params.get("searchValue"))
                .or().like("equ.asset_no", params.get("searchValue"))
            );
        }
        qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType());
        qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit());
        qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule());
@@ -186,7 +192,7 @@
        lqw.eq(bo.getMaintDept() != null, EimsMaintOrder::getMaintDept, bo.getMaintDept());
        lqw.eq(StringUtils.isNotBlank(bo.getMaintCode()), EimsMaintOrder::getMaintCode, bo.getMaintCode());
        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsMaintOrder::getStatus, bo.getStatus());
        lqw.eq(bo.getPlanTime() != null, EimsMaintOrder::getPlanTime, bo.getPlanTime());
        lqw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,EimsMaintOrder::getPlanTime,params.get("beginPlanTime"), params.get("endPlanTime"));
        lqw.eq(bo.getPlanId() != null, EimsMaintOrder::getPlanId, bo.getPlanId());
        // æŒ‰åˆ›å»ºæ—¶é—´å€’序
        lqw.orderByDesc(EimsMaintOrder::getCreateTime);
@@ -306,9 +312,18 @@
        LoginUser loginUser = LoginHelper.getLoginUser();
        List<EimsMaintOrder> list = MapstructUtils.convert(bo.getMaintOrderList(),  EimsMaintOrder.class);
        list.forEach(e -> {
            e.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG);
            // çŠ¶æ€ç”±å‰ç«¯ä¼ è¿‡æ¥
            // e.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG);
            e.setEndTime(new Date());
            e.setMaintUser(loginUser.getUserId());
            // ä¿å…»(1)-> å¾…验证(2)
            if(e.getMaintUser()==null  && (e.getStatus()!=null && e.getStatus().equals("2"))){
                e.setMaintUser(loginUser.getUserId());
            }
            //  å¾…确认(2)-> å®Œæˆ(3)
           if(e.getVerifyUser()==null  && (e.getStatus()!=null && e.getStatus().equals("3"))){
               e.setVerifyUser(loginUser.getUserId());
           }
            e.setUpdateTime(new Date());
        });
        bo.getMaintOrderList().forEach(item -> {
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintStServiceImpl.java
@@ -4,6 +4,7 @@
import lombok.SneakyThrows;
import org.dromara.common.core.constant.DictConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -12,10 +13,12 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.eims.domain.EimsEqu;
import org.dromara.eims.domain.EimsMaintOrder;
import org.dromara.eims.domain.EimsMaintSt;
import org.dromara.eims.domain.bo.EimsMaintStBo;
import org.dromara.eims.domain.bo.EimsMultipleMaintStBo;
import org.dromara.eims.domain.vo.EimsMaintOrderVo;
import org.dromara.eims.domain.vo.EimsMaintStVo;
import org.dromara.eims.mapper.EimsEquMapper;
@@ -79,13 +82,13 @@
            List<EimsMaintOrderVo> orderList = orderMapper.selectVoList(orderLqw);
            // TODO æ ¹æ®å­—å…¸maint_order_status
            Map<String, Long> cMap = orderList.stream()
                .filter(order -> List.of("0", "1", "2", "3").contains(order.getStatus()))
                .filter(order -> List.of("0", "1", "2").contains(order.getStatus()))
                .collect(Collectors.groupingBy(EimsMaintOrderVo::getStatus, Collectors.counting()));
            stVo.setOrderCount(orderList.size());
            stVo.setDbyCount(cMap.getOrDefault("0", 0L).intValue());
            stVo.setByCount(cMap.getOrDefault("1", 0L).intValue());
            stVo.setDyzCount(cMap.getOrDefault("2", 0L).intValue());
            stVo.setWcCount(cMap.getOrDefault("3", 0L).intValue());
            stVo.setDyzCount(cMap.getOrDefault("1", 0L).intValue());
            stVo.setWcCount(cMap.getOrDefault("2", 0L).intValue());
    }
@@ -123,13 +126,12 @@
            List<EimsMaintOrderVo> orderList = orderMapper.selectVoList(orderLqw);
            // TODO æ ¹æ®å­—å…¸maint_order_status
            Map<String, Long> cMap = orderList.stream()
                .filter(order -> List.of("0", "1", "2", "3").contains(order.getStatus()))
                .filter(order -> List.of("0", "1", "2").contains(order.getStatus()))
                .collect(Collectors.groupingBy(EimsMaintOrderVo::getStatus, Collectors.counting()));
            stVo.setOrderCount(orderList.size());
            stVo.setDbyCount(cMap.getOrDefault("0", 0L).intValue());
            stVo.setByCount(cMap.getOrDefault("1", 0L).intValue());
            stVo.setDyzCount(cMap.getOrDefault("2", 0L).intValue());
            stVo.setWcCount(cMap.getOrDefault("3", 0L).intValue());
            stVo.setDyzCount(cMap.getOrDefault("1", 0L).intValue());
            stVo.setWcCount(cMap.getOrDefault("2", 0L).intValue());
        }
@@ -203,22 +205,78 @@
     * @return æ˜¯å¦ä¿®æ”¹æˆåŠŸ
     */
    @Override
    @Transactional
    public Boolean updateByBo(EimsMaintStBo bo) {
        EimsMaintSt update = MapstructUtils.convert(bo, EimsMaintSt.class);
        if(bo.getVerifyUser()!=null){
            EimsMaintSt eimsMaintSt = baseMapper.selectById(bo.getId());
            String status = eimsMaintSt.getStatus();
            if(status==null  || status.equals(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.N)){
                if(update.getVerifyTime()==null) update.setStatus(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.Y);
                if(update.getVerifyTime()==null) update.setVerifyTime(new Date());
            }
        }
//        if(bo.getVerifyUser()!=null){
//            EimsMaintSt eimsMaintSt = baseMapper.selectById(bo.getId());
//            String status = eimsMaintSt.getStatus();
//            if(status==null  || status.equals(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.N)){
//                if(update.getVerifyTime()==null) update.setStatus(DictConstants.MAINT_ORDER_ST_STATUS_DETAIL.Y);
//                if(update.getVerifyTime()==null) update.setVerifyTime(new Date());
//            }
//        }
        if(update.getVerifyTime()==null) update.setVerifyTime(new Date());
        //工单汇总完成需同步更新st下子工单
            EimsMaintStVo st = baseMapper.selectVoById(bo.getId());
            Long equId =  st.getEquId();
            LambdaQueryWrapper<EimsMaintOrder> wrapper = Wrappers.lambdaQuery();
            wrapper.eq(EimsMaintOrder::getEquId,equId);
            wrapper.eq(EimsMaintOrder::getPlanTime,st.getPlanTime());
            List<EimsMaintOrder> eimsMaintOrderList = orderMapper.selectList(wrapper);
            // st下子工单所有状态设置为3-已完成
            eimsMaintOrderList.forEach(order -> {
                order.setStatus(bo.getStatus());
                if(order.getStatus().equals("1")){
                    order.setMaintUser(LoginHelper.getUserId());
                }else if(order.getStatus().equals("2")){
                    order.setVerifyUser(LoginHelper.getUserId());
                }
            });
            orderMapper.updateBatchById(eimsMaintOrderList);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean updateBatchByBo(EimsMultipleMaintStBo bo) {
        List<EimsMaintStBo> maintStBoList = bo.getMultipleMaintStBoList();
        if(maintStBoList==null || maintStBoList.isEmpty())return  true;
        List<EimsMaintSt> maintStList = MapstructUtils.convert(maintStBoList, EimsMaintSt.class);
        baseMapper.updateBatchById(maintStList);
        // æ›´æ–°æ±‡æ€»ä¸‹å­å·¥å•
        List<String> maintCodeList = maintStBoList.stream()
            .map(EimsMaintStBo::getMaintCode)
            .toList();
        for (int i = 0; i < maintCodeList.size(); i++) {
            String maintCode = maintCodeList.get(i);
            String[] split = maintCode.split("_");
            LambdaQueryWrapper<EimsMaintOrder> wrapper = Wrappers.lambdaQuery();
            wrapper.eq(EimsMaintOrder::getEquId,split[0]);
            wrapper.eq(EimsMaintOrder::getPlanTime,split[1]);
            List<EimsMaintOrder> eimsMaintOrderList = orderMapper.selectList(wrapper);
            // st下子工单所有状态设置为3-已完成
            eimsMaintOrderList.forEach(order -> {
                order.setStatus("2");
                order.setVerifyUser(LoginHelper.getUserId());
            });
            orderMapper.updateBatchById(eimsMaintOrderList);
        }
        return true;
    }
    /**
     * ä¿å­˜å‰çš„æ•°æ®æ ¡éªŒ
     */
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsRepairResServiceImpl.java
@@ -347,7 +347,6 @@
        qw.eq(bo.getReqUser() != null, "res.req_user", bo.getReqUser());
        qw.eq(bo.getAssetNo() != null, "equ.asset_no", bo.getAssetNo());
        qw.eq(bo.getEquId() != null, "req.equ_id", bo.getEquId());
        qw.between(params.get("beginReqTime") != null && params.get("endReqTime") != null,
            "req.req_time", params.get("beginReqTime"), params.get("endReqTime"));
@@ -362,6 +361,15 @@
            );
        }
        /**
         * *******************
         */
        qw.like(StringUtils.isNotBlank(bo.getReqDesc()), "req.req_desc", bo.getReqDesc());
        qw.like(StringUtils.isNotBlank(bo.getResHandle()), "res.res_handle", bo.getResHandle());
        /**
         * *******************
         */
        qw.eq(StringUtils.isNotBlank(bo.getStatus()), "res.status", bo.getStatus());
        String s = params.get("status") == null ? "" : params.get("status").toString();
        String[] status = s.split(",");