ouyj преди 6 месеца
родител
ревизия
65900633a1

+ 130 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/controller/GxtEquipmentController.java

@@ -0,0 +1,130 @@
+package com.ygtx.gxt.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ygtx.common.annotation.Log;
+import com.ygtx.common.core.controller.BaseController;
+import com.ygtx.common.core.domain.AjaxResult;
+import com.ygtx.common.enums.BusinessType;
+import com.ygtx.gxt.domain.GxtEquipment;
+import com.ygtx.gxt.service.IGxtEquipmentService;
+import com.ygtx.common.utils.poi.ExcelUtil;
+import com.ygtx.common.core.page.TableDataInfo;
+
+/**
+ * 设备管理Controller
+ * 
+ * @author ouyj
+ * @date 2025-10-28
+ */
+@RestController
+@RequestMapping("/gxt/equipment")
+public class GxtEquipmentController extends BaseController
+{
+    @Autowired
+    private IGxtEquipmentService gxtEquipmentService;
+
+    /**
+     * 查询设备管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:equipment:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(GxtEquipment gxtEquipment)
+    {
+        startPage();
+        List<GxtEquipment> list = gxtEquipmentService.selectGxtEquipmentList(gxtEquipment);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出设备管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:equipment:export')")
+    @Log(title = "设备管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, GxtEquipment gxtEquipment)
+    {
+        List<GxtEquipment> list = gxtEquipmentService.selectGxtEquipmentList(gxtEquipment);
+        ExcelUtil<GxtEquipment> util = new ExcelUtil<GxtEquipment>(GxtEquipment.class);
+        util.exportExcel(response, list, "设备管理数据");
+    }
+
+    /**
+     * 获取设备管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:equipment:query')")
+    @GetMapping(value = "/{equipmentId}")
+    public AjaxResult getInfo(@PathVariable("equipmentId") Long equipmentId)
+    {
+        return success(gxtEquipmentService.selectGxtEquipmentByEquipmentId(equipmentId));
+    }
+
+    /**
+     * 新增设备管理
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:equipment:add')")
+    @Log(title = "设备管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody GxtEquipment gxtEquipment)
+    {
+        return toAjax(gxtEquipmentService.insertGxtEquipment(gxtEquipment));
+    }
+
+    /**
+     * 修改设备管理
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:equipment:edit')")
+    @Log(title = "设备管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody GxtEquipment gxtEquipment)
+    {
+        return toAjax(gxtEquipmentService.updateGxtEquipment(gxtEquipment));
+    }
+
+    /**
+     * 删除设备管理
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:equipment:remove')")
+    @Log(title = "设备管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{equipmentIds}")
+    public AjaxResult remove(@PathVariable Long[] equipmentIds)
+    {
+        return toAjax(gxtEquipmentService.deleteGxtEquipmentByEquipmentIds(equipmentIds));
+    }
+
+    /**
+     * 导入设备管理数据
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:equipment:import')")
+    @Log(title = "设备管理", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<GxtEquipment> util = new ExcelUtil<GxtEquipment>(GxtEquipment.class);
+        List<GxtEquipment> equipmentList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = gxtEquipmentService.importGxtEquipment(equipmentList, updateSupport, operName);
+        return success(message);
+    }
+
+    /**
+     * 下载设备管理导入模板
+     */
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<GxtEquipment> util = new ExcelUtil<GxtEquipment>(GxtEquipment.class);
+        util.importTemplateExcel(response, "设备管理数据");
+    }
+}

+ 144 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/domain/GxtEquipment.java

@@ -0,0 +1,144 @@
+package com.ygtx.gxt.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ygtx.common.annotation.Excel;
+import com.ygtx.common.core.domain.BaseEntity;
+
+/**
+ * 设备管理对象 gxt_equipment
+ * 
+ * @author ouyj
+ * @date 2025-10-28
+ */
+public class GxtEquipment extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 设备ID */
+    private Long equipmentId;
+
+    /** 维保中心 */
+    @Excel(name = "维保中心")
+    private String maintenanceCenter;
+
+    /** 场站 */
+    @Excel(name = "场站")
+    private String station;
+
+    /** 设备编码/风机编号 */
+    @Excel(name = "风机编号")
+    private String equipmentCode;
+
+    /** 品牌 */
+    @Excel(name = "品牌")
+    private String brand;
+
+    /** 机型 */
+    @Excel(name = "机型")
+    private String model;
+
+    /** 设备类型,1风机 */
+    private String equipmentType;
+
+    /** 设备状态:1-正常,2-维修,3-停用,4-报废 */
+    private String status;
+
+    public void setEquipmentId(Long equipmentId) 
+    {
+        this.equipmentId = equipmentId;
+    }
+
+    public Long getEquipmentId() 
+    {
+        return equipmentId;
+    }
+
+    public void setEquipmentCode(String equipmentCode) 
+    {
+        this.equipmentCode = equipmentCode;
+    }
+
+    public String getEquipmentCode() 
+    {
+        return equipmentCode;
+    }
+
+    public void setMaintenanceCenter(String maintenanceCenter) 
+    {
+        this.maintenanceCenter = maintenanceCenter;
+    }
+
+    public String getMaintenanceCenter() 
+    {
+        return maintenanceCenter;
+    }
+
+    public void setStation(String station) 
+    {
+        this.station = station;
+    }
+
+    public String getStation() 
+    {
+        return station;
+    }
+
+    public void setBrand(String brand) 
+    {
+        this.brand = brand;
+    }
+
+    public String getBrand() 
+    {
+        return brand;
+    }
+
+    public void setModel(String model) 
+    {
+        this.model = model;
+    }
+
+    public String getModel() 
+    {
+        return model;
+    }
+
+    public void setEquipmentType(String equipmentType) 
+    {
+        this.equipmentType = equipmentType;
+    }
+
+    public String getEquipmentType() 
+    {
+        return equipmentType;
+    }
+
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("equipmentId", getEquipmentId())
+            .append("equipmentCode", getEquipmentCode())
+            .append("maintenanceCenter", getMaintenanceCenter())
+            .append("station", getStation())
+            .append("brand", getBrand())
+            .append("model", getModel())
+            .append("equipmentType", getEquipmentType())
+            .append("status", getStatus())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 69 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/mapper/GxtEquipmentMapper.java

@@ -0,0 +1,69 @@
+package com.ygtx.gxt.mapper;
+
+import java.util.List;
+import com.ygtx.gxt.domain.GxtEquipment;
+
+/**
+ * 设备管理Mapper接口
+ * 
+ * @author ouyj
+ * @date 2025-10-28
+ */
+public interface GxtEquipmentMapper 
+{
+    /**
+     * 查询设备管理
+     * 
+     * @param equipmentId 设备管理主键
+     * @return 设备管理
+     */
+    public GxtEquipment selectGxtEquipmentByEquipmentId(Long equipmentId);
+
+    /**
+     * 根据设备编码查询设备管理
+     * 
+     * @param equipmentCode 设备编码
+     * @return 设备管理
+     */
+    public GxtEquipment selectGxtEquipmentByEquipmentCode(String equipmentCode);
+
+    /**
+     * 查询设备管理列表
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 设备管理集合
+     */
+    public List<GxtEquipment> selectGxtEquipmentList(GxtEquipment gxtEquipment);
+
+    /**
+     * 新增设备管理
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 结果
+     */
+    public int insertGxtEquipment(GxtEquipment gxtEquipment);
+
+    /**
+     * 修改设备管理
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 结果
+     */
+    public int updateGxtEquipment(GxtEquipment gxtEquipment);
+
+    /**
+     * 删除设备管理
+     * 
+     * @param equipmentId 设备管理主键
+     * @return 结果
+     */
+    public int deleteGxtEquipmentByEquipmentId(Long equipmentId);
+
+    /**
+     * 批量删除设备管理
+     * 
+     * @param equipmentIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteGxtEquipmentByEquipmentIds(Long[] equipmentIds);
+}

+ 71 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/service/IGxtEquipmentService.java

@@ -0,0 +1,71 @@
+package com.ygtx.gxt.service;
+
+import java.util.List;
+import com.ygtx.gxt.domain.GxtEquipment;
+
+/**
+ * 设备管理Service接口
+ * 
+ * @author ouyj
+ * @date 2025-10-28
+ */
+public interface IGxtEquipmentService 
+{
+    /**
+     * 查询设备管理
+     * 
+     * @param equipmentId 设备管理主键
+     * @return 设备管理
+     */
+    public GxtEquipment selectGxtEquipmentByEquipmentId(Long equipmentId);
+
+    /**
+     * 查询设备管理列表
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 设备管理集合
+     */
+    public List<GxtEquipment> selectGxtEquipmentList(GxtEquipment gxtEquipment);
+
+    /**
+     * 新增设备管理
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 结果
+     */
+    public int insertGxtEquipment(GxtEquipment gxtEquipment);
+
+    /**
+     * 修改设备管理
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 结果
+     */
+    public int updateGxtEquipment(GxtEquipment gxtEquipment);
+
+    /**
+     * 批量删除设备管理
+     * 
+     * @param equipmentIds 需要删除的设备管理主键集合
+     * @return 结果
+     */
+    public int deleteGxtEquipmentByEquipmentIds(Long[] equipmentIds);
+
+    /**
+     * 删除设备管理信息
+     * 
+     * @param equipmentId 设备管理主键
+     * @return 结果
+     */
+    public int deleteGxtEquipmentByEquipmentId(Long equipmentId);
+
+    /**
+     * 导入设备管理数据
+     * 
+     * @param equipmentList 设备管理数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param operName 操作用户
+     * @return 结果
+     */
+    public String importGxtEquipment(List<GxtEquipment> equipmentList, Boolean isUpdateSupport, String operName);
+}

+ 187 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtEquipmentServiceImpl.java

@@ -0,0 +1,187 @@
+package com.ygtx.gxt.service.impl;
+
+import java.util.List;
+import com.ygtx.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ygtx.gxt.mapper.GxtEquipmentMapper;
+import com.ygtx.gxt.domain.GxtEquipment;
+import com.ygtx.gxt.service.IGxtEquipmentService;
+import com.ygtx.common.utils.StringUtils;
+import com.ygtx.common.exception.ServiceException;
+import javax.validation.Validator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 设备管理Service业务层处理
+ * 
+ * @author ouyj
+ * @date 2025-10-28
+ */
+@Service
+public class GxtEquipmentServiceImpl implements IGxtEquipmentService 
+{
+    @Autowired
+    private GxtEquipmentMapper gxtEquipmentMapper;
+    
+    @Autowired
+    protected Validator validator;
+
+    /**
+     * 查询设备管理
+     * 
+     * @param equipmentId 设备管理主键
+     * @return 设备管理
+     */
+    @Override
+    public GxtEquipment selectGxtEquipmentByEquipmentId(Long equipmentId)
+    {
+        return gxtEquipmentMapper.selectGxtEquipmentByEquipmentId(equipmentId);
+    }
+
+    /**
+     * 查询设备管理列表
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 设备管理
+     */
+    @Override
+    public List<GxtEquipment> selectGxtEquipmentList(GxtEquipment gxtEquipment)
+    {
+        return gxtEquipmentMapper.selectGxtEquipmentList(gxtEquipment);
+    }
+
+    /**
+     * 新增设备管理
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 结果
+     */
+    @Override
+    public int insertGxtEquipment(GxtEquipment gxtEquipment)
+    {
+        gxtEquipment.setCreateTime(DateUtils.getNowDate());
+        return gxtEquipmentMapper.insertGxtEquipment(gxtEquipment);
+    }
+
+    /**
+     * 修改设备管理
+     * 
+     * @param gxtEquipment 设备管理
+     * @return 结果
+     */
+    @Override
+    public int updateGxtEquipment(GxtEquipment gxtEquipment)
+    {
+        gxtEquipment.setUpdateTime(DateUtils.getNowDate());
+        return gxtEquipmentMapper.updateGxtEquipment(gxtEquipment);
+    }
+
+    /**
+     * 批量删除设备管理
+     * 
+     * @param equipmentIds 需要删除的设备管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteGxtEquipmentByEquipmentIds(Long[] equipmentIds)
+    {
+        return gxtEquipmentMapper.deleteGxtEquipmentByEquipmentIds(equipmentIds);
+    }
+
+    /**
+     * 删除设备管理信息
+     * 
+     * @param equipmentId 设备管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteGxtEquipmentByEquipmentId(Long equipmentId)
+    {
+        return gxtEquipmentMapper.deleteGxtEquipmentByEquipmentId(equipmentId);
+    }
+
+    /**
+     * 导入设备管理数据
+     * 
+     * @param equipmentList 设备管理数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param operName 操作用户
+     * @return 结果
+     */
+    @Override
+    public String importGxtEquipment(List<GxtEquipment> equipmentList, Boolean isUpdateSupport, String operName)
+    {
+        if (StringUtils.isNull(equipmentList) || equipmentList.size() == 0)
+        {
+            throw new ServiceException("导入设备数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (GxtEquipment equipment : equipmentList)
+        {
+            try
+            {
+                if (StringUtils.isEmpty(equipment.getEquipmentCode())) {
+                    throw new ServiceException("风机编号不能为空!");
+                }
+                if (StringUtils.isEmpty(equipment.getMaintenanceCenter())) {
+                    throw new ServiceException("维保中心不能为空!");
+                }
+                if (StringUtils.isEmpty(equipment.getStation())) {
+                    throw new ServiceException("场站不能为空!");
+                }
+                if (StringUtils.isEmpty(equipment.getBrand())) {
+                    throw new ServiceException("品牌不能为空!");
+                }
+                if (StringUtils.isEmpty(equipment.getModel())) {
+                    throw new ServiceException("机型不能为空!");
+                }
+                // 验证是否存在这个设备
+                GxtEquipment e = gxtEquipmentMapper.selectGxtEquipmentByEquipmentCode(equipment.getEquipmentCode());
+                if (StringUtils.isNull(e))
+                {
+                    equipment.setCreateBy(operName);
+                    equipment.setCreateTime(DateUtils.getNowDate());
+                    gxtEquipmentMapper.insertGxtEquipment(equipment);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、风机编号 " + equipment.getEquipmentCode() + " 导入成功");
+
+                }
+                else if (isUpdateSupport)
+                {
+                    equipment.setEquipmentId(e.getEquipmentId());
+                    equipment.setUpdateBy(operName);
+                    equipment.setUpdateTime(DateUtils.getNowDate());
+                    gxtEquipmentMapper.updateGxtEquipment(equipment);
+                    successNum++;
+                    successMsg.append("<br/>" + successNum + "、风机编号 " + equipment.getEquipmentCode() + " 更新成功");
+                }
+                else
+                {
+                    failureNum++;
+                    failureMsg.append("<br/>" + failureNum + "、风机编号 " + equipment.getEquipmentCode() + " 已存在");
+                }
+            }
+            catch (Exception e)
+            {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、风机编号 " + equipment.getEquipmentCode() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+            }
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 107 - 0
ygtx-gxt/src/main/resources/mapper/gxt/GxtEquipmentMapper.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ygtx.gxt.mapper.GxtEquipmentMapper">
+    
+    <resultMap type="GxtEquipment" id="GxtEquipmentResult">
+        <result property="equipmentId"    column="equipment_id"    />
+        <result property="equipmentCode"    column="equipment_code"    />
+        <result property="maintenanceCenter"    column="maintenance_center"    />
+        <result property="station"    column="station"    />
+        <result property="brand"    column="brand"    />
+        <result property="model"    column="model"    />
+        <result property="equipmentType"    column="equipment_type"    />
+        <result property="status"    column="status"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectGxtEquipmentVo">
+        select equipment_id, equipment_code, maintenance_center, station, brand, model, equipment_type, status, create_by, create_time, update_by, update_time from gxt_equipment
+    </sql>
+
+    <select id="selectGxtEquipmentList" parameterType="GxtEquipment" resultMap="GxtEquipmentResult">
+        <include refid="selectGxtEquipmentVo"/>
+        <where>  
+            <if test="equipmentCode != null  and equipmentCode != ''"> and equipment_code like concat('%', #{equipmentCode}, '%')</if>
+            <if test="maintenanceCenter != null  and maintenanceCenter != ''"> and maintenance_center like concat('%', #{maintenanceCenter}, '%')</if>
+            <if test="station != null  and station != ''"> and station like concat('%', #{station}, '%')</if>
+            <if test="brand != null  and brand != ''"> and brand like concat('%', #{brand}, '%')</if>
+            <if test="model != null  and model != ''"> and model like concat('%', #{model}, '%')</if>
+            <if test="equipmentType != null  and equipmentType != ''"> and equipment_type = #{equipmentType}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+        </where>
+    </select>
+    
+    <select id="selectGxtEquipmentByEquipmentId" parameterType="Long" resultMap="GxtEquipmentResult">
+        <include refid="selectGxtEquipmentVo"/>
+        where equipment_id = #{equipmentId}
+    </select>
+    
+    <select id="selectGxtEquipmentByEquipmentCode" parameterType="String" resultMap="GxtEquipmentResult">
+        <include refid="selectGxtEquipmentVo"/>
+        where equipment_code = #{equipmentCode}
+    </select>
+
+    <insert id="insertGxtEquipment" parameterType="GxtEquipment" useGeneratedKeys="true" keyProperty="equipmentId">
+        insert into gxt_equipment
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="equipmentCode != null and equipmentCode != ''">equipment_code,</if>
+            <if test="maintenanceCenter != null">maintenance_center,</if>
+            <if test="station != null">station,</if>
+            <if test="brand != null">brand,</if>
+            <if test="model != null">model,</if>
+            <if test="equipmentType != null">equipment_type,</if>
+            <if test="status != null">status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="equipmentCode != null and equipmentCode != ''">#{equipmentCode},</if>
+            <if test="maintenanceCenter != null">#{maintenanceCenter},</if>
+            <if test="station != null">#{station},</if>
+            <if test="brand != null">#{brand},</if>
+            <if test="model != null">#{model},</if>
+            <if test="equipmentType != null">#{equipmentType},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateGxtEquipment" parameterType="GxtEquipment">
+        update gxt_equipment
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="equipmentCode != null and equipmentCode != ''">equipment_code = #{equipmentCode},</if>
+            <if test="maintenanceCenter != null">maintenance_center = #{maintenanceCenter},</if>
+            <if test="station != null">station = #{station},</if>
+            <if test="brand != null">brand = #{brand},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="equipmentType != null">equipment_type = #{equipmentType},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where equipment_id = #{equipmentId}
+    </update>
+
+    <delete id="deleteGxtEquipmentByEquipmentId" parameterType="Long">
+        delete from gxt_equipment where equipment_id = #{equipmentId}
+    </delete>
+
+    <delete id="deleteGxtEquipmentByEquipmentIds" parameterType="String">
+        delete from gxt_equipment where equipment_id in 
+        <foreach item="equipmentId" collection="array" open="(" separator="," close=")">
+            #{equipmentId}
+        </foreach>
+    </delete>
+</mapper>

+ 53 - 0
ygtx-ui/src/api/gxt/equipment.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询设备管理列表
+export function listEquipment(query) {
+  return request({
+    url: '/gxt/equipment/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询设备管理详细
+export function getEquipment(equipmentId) {
+  return request({
+    url: '/gxt/equipment/' + equipmentId,
+    method: 'get'
+  })
+}
+
+// 新增设备管理
+export function addEquipment(data) {
+  return request({
+    url: '/gxt/equipment',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改设备管理
+export function updateEquipment(data) {
+  return request({
+    url: '/gxt/equipment',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除设备管理
+export function delEquipment(equipmentId) {
+  return request({
+    url: '/gxt/equipment/' + equipmentId,
+    method: 'delete'
+  })
+}
+
+// 导入设备管理数据
+export function importEquipment(data) {
+  return request({
+    url: '/gxt/equipment/importData',
+    method: 'post',
+    data: data
+  })
+}

+ 401 - 0
ygtx-ui/src/views/gxt/equipment/index.vue

@@ -0,0 +1,401 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="风机编号" prop="equipmentCode">
+        <el-input
+          v-model="queryParams.equipmentCode"
+          placeholder="请输入风机编号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="维保中心" prop="maintenanceCenter">
+        <el-input
+          v-model="queryParams.maintenanceCenter"
+          placeholder="请输入维保中心"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="场站" prop="station">
+        <el-input
+          v-model="queryParams.station"
+          placeholder="请输入场站"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="品牌" prop="brand">
+        <el-input
+          v-model="queryParams.brand"
+          placeholder="请输入品牌"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="机型" prop="model">
+        <el-input
+          v-model="queryParams.model"
+          placeholder="请输入机型"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+<!--      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['gxt:equipment:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['gxt:equipment:edit']"
+        >修改</el-button>
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['gxt:equipment:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="Upload"
+          @click="handleImport"
+          v-hasPermi="['gxt:equipment:import']"
+        >导入</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['gxt:equipment:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="equipmentList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="维保中心" align="center" prop="maintenanceCenter" />
+      <el-table-column label="场站" align="center" prop="station" />
+      <el-table-column label="风机编号" align="center" prop="equipmentCode" />
+      <el-table-column label="品牌" align="center" prop="brand" />
+      <el-table-column label="机型" align="center" prop="model" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+<!--          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['gxt:equipment:edit']">修改</el-button>-->
+          <el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['gxt:equipment:query']">查看</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['gxt:equipment:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改设备管理对话框 -->
+    <el-dialog :title="title" v-model="open" width="700px" append-to-body>
+      <el-form ref="equipmentRef" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="风机编号" prop="equipmentCode">
+          <el-input v-model="form.equipmentCode" placeholder="请输入设备编码/风机编号" />
+        </el-form-item>
+        <el-form-item label="维保中心" prop="maintenanceCenter">
+          <el-input v-model="form.maintenanceCenter" placeholder="请输入维保中心" />
+        </el-form-item>
+        <el-form-item label="场站" prop="station">
+          <el-input v-model="form.station" placeholder="请输入场站" />
+        </el-form-item>
+        <el-form-item label="品牌" prop="brand">
+          <el-input v-model="form.brand" placeholder="请输入品牌" />
+        </el-form-item>
+        <el-form-item label="机型" prop="model">
+          <el-input v-model="form.model" placeholder="请输入机型" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 设备导入对话框 -->
+    <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+      <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :on-change="handleFileChange" :on-remove="handleFileRemove" :auto-upload="false" drag>
+        <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <div class="el-upload__tip">
+              <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的设备数据
+            </div>
+            <span>仅允许导入xls、xlsx格式文件。</span>
+            <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Equipment">
+import { getToken } from "@/utils/auth"
+import { listEquipment, getEquipment, delEquipment, addEquipment, updateEquipment } from "@/api/gxt/equipment"
+
+const { proxy } = getCurrentInstance()
+
+const equipmentList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+/*** 设备导入参数 */
+const upload = reactive({
+  // 是否显示弹出层(设备导入)
+  open: false,
+  // 弹出层标题(设备导入)
+  title: "",
+  // 是否禁用上传
+  isUploading: false,
+  // 是否更新已经存在的设备数据
+  updateSupport: 0,
+  // 设置上传的请求头部
+  headers: { Authorization: "Bearer " + getToken() },
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + "/gxt/equipment/importData"
+})
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    equipmentCode: null,
+    maintenanceCenter: null,
+    station: null,
+    brand: null,
+    model: null,
+    equipmentType: null,
+    status: null,
+  },
+  rules: {
+    /*equipmentCode: [
+      { required: true, message: "风机编号不能为空", trigger: "blur" }
+    ],*/
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询设备管理列表 */
+function getList() {
+  loading.value = true
+  listEquipment(queryParams.value).then(response => {
+    equipmentList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    equipmentId: null,
+    equipmentCode: null,
+    maintenanceCenter: null,
+    station: null,
+    brand: null,
+    model: null,
+    equipmentType: null,
+    status: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null
+  }
+  proxy.resetForm("equipmentRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.equipmentId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加设备"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _equipmentId = row.equipmentId || ids.value
+  getEquipment(_equipmentId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改设备"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["equipmentRef"].validate(valid => {
+    if (valid) {
+      if (form.value.equipmentId != null) {
+        updateEquipment(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addEquipment(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _equipmentIds = row.equipmentId || ids.value
+  proxy.$modal.confirm('是否确认删除设备管理编号为"' + _equipmentIds + '"的数据项?').then(function() {
+    return delEquipment(_equipmentIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('gxt/equipment/export', {
+    ...queryParams.value
+  }, `equipment_${new Date().getTime()}.xlsx`)
+}
+
+/** 导入按钮操作 */
+function handleImport() {
+  upload.title = "设备导入"
+  upload.open = true
+  upload.selectedFile = null
+}
+
+/** 下载模板操作 */
+function importTemplate() {
+  proxy.download("gxt/equipment/importTemplate", {
+  }, `equipment_template_${new Date().getTime()}.xlsx`)
+}
+
+/**文件上传中处理 */
+const handleFileUploadProgress = (event, file, fileList) => {
+  upload.isUploading = true
+}
+
+/** 文件选择处理 */
+const handleFileChange = (file, fileList) => {
+  upload.selectedFile = file
+}
+
+/** 文件删除处理 */
+const handleFileRemove = (file, fileList) => {
+  upload.selectedFile = null
+}
+
+/** 文件上传成功处理 */
+const handleFileSuccess = (response, file, fileList) => {
+  upload.open = false
+  upload.isUploading = false
+  proxy.$refs["uploadRef"].handleRemove(file)
+  proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true })
+  getList()
+}
+
+/** 提交上传文件 */
+function submitFileForm() {
+  const file = upload.selectedFile
+  if (!file || file.length === 0 || !file.name.toLowerCase().endsWith('.xls') && !file.name.toLowerCase().endsWith('.xlsx')) {
+    proxy.$modal.msgError("请选择后缀为 “xls”或“xlsx”的文件。")
+    return
+  }
+  proxy.$refs["uploadRef"].submit()
+}
+
+/** 查看按钮操作 */
+function handleView(row) {
+  reset()
+  const _equipmentId = row.equipmentId || ids.value
+  getEquipment(_equipmentId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "查看设备"
+  })
+}
+
+getList()
+</script>