zss
2025-03-25 b700b37c67c8155d3078955f2690406d814f1826
第三方人事系统配置+设备导入
已修改7个文件
已添加1个文件
261 ■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceListener.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
@@ -1,17 +1,22 @@
package com.ruoyi.device.controller;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.excel.StructureTestObjectData;
import com.ruoyi.basic.excel.StructureTestObjectListener;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.device.dto.DataConfigDto;
import com.ruoyi.device.dto.DeviceCollectionDto;
import com.ruoyi.device.dto.DeviceDto;
import com.ruoyi.device.excel.upload.DeviceListener;
import com.ruoyi.device.pojo.DataConfig;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.service.DataConfigService;
import com.ruoyi.device.service.DeviceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
@@ -21,12 +26,11 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -196,4 +200,20 @@
    public void exportEquipmentDetails(HttpServletResponse response) throws Exception {
        deviceService.exportEquipmentDetails(response);
    }
    /**
     * å¯¼å…¥è®¾å¤‡
     * @return
     */
    @ApiOperation(value = "导入设备")
    @PostMapping("/importDevice")
    public Result importDevice(@RequestParam("file") MultipartFile file){
        try {
            EasyExcel.read(file.getInputStream(), Device.class, new DeviceListener(deviceService)).sheet().doRead();
        } catch (IOException e) {
            // è¿™é‡Œå¯ä»¥æ ¹æ®å®žé™…情况进行更完善的错误处理,比如记录日志等
            System.err.println("读取文件时发生错误: " + e.getMessage());
        }
        return Result.success();
    }
}
cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceListener.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.device.excel.upload;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.ruoyi.basic.excel.StructureTestObjectData;
import com.ruoyi.basic.service.ProductService;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.service.DeviceService;
import com.ruoyi.performance.dto.AuxiliaryCorrectionHoursDto;
import com.ruoyi.performance.service.AuxiliaryCorrectionHoursService;
import java.util.ArrayList;
import java.util.List;
public class DeviceListener extends AnalysisEventListener<Device> {
    private static final int BATCH_COUNT = 1000;
    List<Device> list = new ArrayList<>();
    private DeviceService deviceService;
    public DeviceListener(DeviceService deviceService) {
        this.deviceService = deviceService;
    }
    @Override
    public void invoke(Device data, AnalysisContext analysisContext) {
        list.add(data);
        if (list.size() >= BATCH_COUNT) {
            save();
            list.clear();
        }
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        save();
    }
    private void save() {
        deviceService.importExcel(list);
    }
}
cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
@@ -1,9 +1,13 @@
package com.ruoyi.device.pojo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.math.BigDecimal;
@@ -21,64 +25,99 @@
    private Integer id;
    @ApiModelProperty(value = "设备名称")
    @ExcelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty(value = "en设备名称")
    @ExcelProperty(value = "设备名称EN")
    private String enDeviceName;
    @ApiModelProperty(value = "规格型号")
    @ExcelProperty(value = "规格型号")
    private String specificationModel;
    @ApiModelProperty(value = "生产厂家")
    @ExcelProperty(value = "生产厂家")
    private String manufacturer;
    @ApiModelProperty(value = "出厂编号")
    @ExcelProperty(value = "出厂编号")
    private String factoryNo;
    @ApiModelProperty(value = "管理编号")
    @ExcelProperty(value = "管理编号")
    private String managementNumber;
    @ApiModelProperty(value = "技术指标")
    @ExcelProperty(value = "技术指标")
    private String technicalIndicators;
    @ApiModelProperty(value = "购置日期")
    @ExcelProperty(value = "购置日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime acquisitionDate;
    @ApiModelProperty(value = "校准有效日期")
    @ExcelProperty(value = "启用日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime activationDate;
    @ApiModelProperty(value = "管理人Id")
    private Integer equipmentManager;
    @TableField(select = false,exist = false)
    @ExcelProperty(value = "管理人")
    private String equipmentManagerName;
    @ApiModelProperty(value = "存放点")
    @ExcelProperty(value = "存放点")
    private String storagePoint;
    @ApiModelProperty(value = "所属部门Id")
    private Integer subordinateDepartmentsId;
    @TableField(select = false,exist = false)
    @ExcelProperty(value = "所属部门")
    private String subordinateDepartments;
    @ApiModelProperty(value = "检验项目Id")
    private String insProductIds;
    @ApiModelProperty(value = "校准服务机构")
    @ExcelProperty(value = "校准服务机构")
    private String calibrationServices;
    @ApiModelProperty(value = "最近校准日期")
    @ExcelProperty(value = "最近校准日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastCalibrationDate;
    @ApiModelProperty(value = "下次校准日期")
    @ExcelProperty(value = "下次校准日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime nextCalibrationDate;
    @ApiModelProperty(value = "设备类型")
    @ExcelProperty(value = "设备分类")
    private String largeCategory;
    @ApiModelProperty(value = "单价")
    @ExcelProperty(value = "单价")
    private BigDecimal unitPrice;
    @ApiModelProperty(value = "设备状态")
    private Integer deviceStatus;
    @TableField(select = false,exist = false)
    @ExcelProperty(value = "设备状态")
    private String deviceStatusName;
    @ApiModelProperty(value = "校准周期(月)")
    @ExcelProperty(value = "校准周期(月)")
    private String calibrationDate;
    @ApiModelProperty(value = "图片上传")
cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java
@@ -8,6 +8,7 @@
import com.ruoyi.device.dto.DeviceCollectionDto;
import com.ruoyi.device.dto.DeviceDto;
import com.ruoyi.device.pojo.Device;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -54,4 +55,11 @@
     * @param response
     */
    void exportEquipmentDetails(HttpServletResponse response);
    /**
     * å¯¼å…¥è®¾å¤‡
     * @param list
     * @return
     */
    void importExcel(List<Device> list);
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.device.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson2.JSON;
@@ -12,7 +13,9 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.basic.mapper.LaboratoryMapper;
import com.ruoyi.basic.mapper.StructureItemParameterMapper;
import com.ruoyi.basic.pojo.Laboratory;
import com.ruoyi.basic.pojo.StructureItemParameter;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
@@ -31,12 +34,16 @@
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.performance.dto.AuxiliaryCorrectionHoursDto;
import com.ruoyi.performance.pojo.AuxiliaryCorrectionHours;
import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -47,6 +54,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
@@ -59,6 +67,10 @@
    private DeviceMapper deviceMapper;
    private UserMapper userMapper;
    private LaboratoryMapper laboratoryMapper;
    private SysDictDataMapper sysDictDataMapper;
    private StructureItemParameterMapper structureItemParameterMapper;
@@ -496,4 +508,50 @@
            throw new RuntimeException("导出失败");
        }
    }
    //导入设备
    @Override
    public void importExcel(List<Device> list){
        if (CollectionUtil.isEmpty(list)) {
            return;
        }
        List<Device> deviceList = new ArrayList<>();
        List<Device> devices = new ArrayList<>();
        for (Device device : list) {
            Device device1 = deviceMapper.selectOne(Wrappers.<Device>lambdaQuery()
                    .eq(Device::getDeviceName, device.getDeviceName())
                    .eq(Device::getSpecificationModel, device.getSpecificationModel())
                    .eq(Device::getManagementNumber, device.getManagementNumber()));
            //管理人
            if (ObjectUtils.isNotEmpty(device.getEquipmentManagerName())){
                //查对应管理人
                User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                        .eq(User::getName, device.getEquipmentManagerName()));
                device.setEquipmentManager(user.getId());
            }
            //所属部门
            if (ObjectUtils.isNotEmpty(device.getSubordinateDepartments())){
                //查对应所属部门
                Laboratory laboratory = laboratoryMapper.selectOne(Wrappers.<Laboratory>lambdaQuery()
                        .eq(Laboratory::getLaboratoryName,device.getSubordinateDepartments()));
                device.setSubordinateDepartmentsId(laboratory.getId());
            }
            //设备状态
            if (ObjectUtils.isNotEmpty(device.getDeviceStatusName())){
                //查字典对应的值
                String status = sysDictDataMapper.selectDictValue("device_status", device.getDeviceStatusName());
                device.setDeviceStatus(Integer.parseInt(status));
            }
            if (ObjectUtils.isNotEmpty(device1)) {
                devices.add(device1);
            } else {
                deviceList.add(device);
            }
        }
        //批量新增
        saveBatch(deviceList);
        //批量修改
        updateBatchById(devices);
    }
}
ruoyi-admin/src/main/resources/application-druid.yml
@@ -135,14 +135,14 @@
# äººäº‹ç³»ç»Ÿ
personnel:
  code:
  appId:
  appSecret:
  companies:
  simple:
  password:
  department:
  person:
  code: https://ztt-sso.ztt.cn/oauth2/token
  appId: f6f3d70f-3666-4d3d-b9c5-430de3f6007c
  appSecret: a18923496542302066b0a7bec993a4e2
  companies: https://ztt-connector.ztt.cn/api/org/v1/companies
  simple: https://ztt-connector.ztt.cn/api/org/v1/employees/simple?companyId=
  password: https://ztt-connector.ztt.cn/api/org/v1/employees/original_pwd/
  department: https://ztt-connector.ztt.cn/api/org/v1/companies/companyId/departments
  person: https://ztt-connector.ztt.cn/api/org/v1/employees/simple/
# ä¼ä¸šå¾®ä¿¡é€šçŸ¥
wechat:
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
@@ -6,14 +6,14 @@
/**
 * å­—典表 æ•°æ®å±‚
 *
 *
 * @author ruoyi
 */
public interface SysDictDataMapper
{
    /**
     * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢å­—典数据
     *
     *
     * @param dictData å­—典数据信息
     * @return å­—典数据集合信息
     */
@@ -21,7 +21,7 @@
    /**
     * æ ¹æ®å­—典类型查询字典数据
     *
     *
     * @param dictType å­—典类型
     * @return å­—典数据集合信息
     */
@@ -29,7 +29,7 @@
    /**
     * æ ¹æ®å­—典类型和字典键值查询字典数据信息
     *
     *
     * @param dictType å­—典类型
     * @param dictValue å­—典键值
     * @return å­—典标签
@@ -37,8 +37,17 @@
    public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);
    /**
     * æ ¹æ®å­—典类型和字典键查询字典数据信息
     *
     * @param dictType å­—典类型
     * @param dictLabel å­—典键
     * @return å­—典标签
     */
    public String selectDictValue(@Param("dictType") String dictType, @Param("dictLabel") String dictLabel);
    /**
     * æ ¹æ®å­—典数据ID查询信息
     *
     *
     * @param dictCode å­—典数据ID
     * @return å­—典数据
     */
@@ -46,7 +55,7 @@
    /**
     * æŸ¥è¯¢å­—典数据
     *
     *
     * @param dictType å­—典类型
     * @return å­—典数据
     */
@@ -54,7 +63,7 @@
    /**
     * é€šè¿‡å­—å…¸ID删除字典数据信息
     *
     *
     * @param dictCode å­—典数据ID
     * @return ç»“æžœ
     */
@@ -62,7 +71,7 @@
    /**
     * æ‰¹é‡åˆ é™¤å­—典数据信息
     *
     *
     * @param dictCodes éœ€è¦åˆ é™¤çš„字典数据ID
     * @return ç»“æžœ
     */
@@ -70,7 +79,7 @@
    /**
     * æ–°å¢žå­—典数据信息
     *
     *
     * @param dictData å­—典数据信息
     * @return ç»“æžœ
     */
@@ -78,7 +87,7 @@
    /**
     * ä¿®æ”¹å­—典数据信息
     *
     *
     * @param dictData å­—典数据信息
     * @return ç»“æžœ
     */
@@ -86,7 +95,7 @@
    /**
     * åŒæ­¥ä¿®æ”¹å­—典类型
     *
     *
     * @param oldDictType æ—§å­—典类型
     * @param newDictType æ–°æ—§å­—典类型
     * @return ç»“æžœ
ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysDictDataMapper">
    <resultMap type="SysDictData" id="SysDictDataResult">
        <id     property="dictCode"   column="dict_code"   />
        <result property="dictSort"   column="dict_sort"   />
@@ -19,9 +19,9 @@
        <result property="updateBy"   column="update_by"   />
        <result property="updateTime" column="update_time" />
    </resultMap>
    <sql id="selectDictDataVo">
        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
        from sys_dict_data
    </sql>
@@ -40,37 +40,37 @@
        </where>
        order by dict_sort asc
    </select>
    <select id="selectDictDataByType" parameterType="String" resultMap="SysDictDataResult">
        <include refid="selectDictDataVo"/>
        where status = '0' and dict_type = #{dictType} order by dict_sort asc
    </select>
    <select id="selectDictLabel" resultType="String">
        select dict_label from sys_dict_data
        where dict_type = #{dictType} and dict_value = #{dictValue}
    </select>
    <select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult">
        <include refid="selectDictDataVo"/>
        where dict_code = #{dictCode}
    </select>
    <select id="countDictDataByType" resultType="Integer">
        select count(1) from sys_dict_data where dict_type=#{dictType}
        select count(1) from sys_dict_data where dict_type=#{dictType}
    </select>
    <delete id="deleteDictDataById" parameterType="Long">
         delete from sys_dict_data where dict_code = #{dictCode}
     </delete>
     <delete id="deleteDictDataByIds" parameterType="Long">
         delete from sys_dict_data where dict_code in
         <foreach collection="array" item="dictCode" open="(" separator="," close=")">
             #{dictCode}
        </foreach>
        </foreach>
     </delete>
    <update id="updateDictData" parameterType="SysDictData">
         update sys_dict_data
         <set>
@@ -88,11 +88,11 @@
         </set>
         where dict_code = #{dictCode}
    </update>
    <update id="updateDictDataType" parameterType="String">
         update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType}
    </update>
     <insert id="insertDictData" parameterType="SysDictData">
         insert into sys_dict_data(
             <if test="dictSort != null">dict_sort,</if>
@@ -120,5 +120,9 @@
             sysdate()
         )
    </insert>
</mapper>
    <select id="selectDictValue" resultType="java.lang.String">
        select dict_label from sys_dict_data
        where dict_type = #{dictType} and dict_label = #{dictLabel}
    </select>
</mapper>