From 00f81ed9c631080dfc4595b07d77f73f9563731c Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期二, 25 三月 2025 16:42:35 +0800 Subject: [PATCH] Merge branch 'radio_frequency' of http://114.132.189.42:9002/r/lims-ruoyi-after into radio_frequency --- cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java | 58 +++++++++++ ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml | 36 ++++--- cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceListener.java | 45 +++++++++ ruoyi-admin/src/main/resources/application-druid.yml | 16 +- cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java | 8 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java | 31 ++++-- cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java | 28 ++++ cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java | 39 +++++++ 8 files changed, 222 insertions(+), 39 deletions(-) diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java index bb70b52..5f0ab10 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java +++ b/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(); + } } diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceListener.java b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceListener.java new file mode 100644 index 0000000..758f317 --- /dev/null +++ b/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); + } +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java index d403f5a..9d63046 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java +++ b/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 = "绠$悊浜篒d") private Integer equipmentManager; + @TableField(select = false,exist = false) + @ExcelProperty(value = "绠$悊浜�") + private String equipmentManagerName; + @ApiModelProperty(value = "瀛樻斁鐐�") + @ExcelProperty(value = "瀛樻斁鐐�") private String storagePoint; @ApiModelProperty(value = "鎵�灞為儴闂↖d") private Integer subordinateDepartmentsId; + @TableField(select = false,exist = false) + @ExcelProperty(value = "鎵�灞為儴闂�") + private String subordinateDepartments; + @ApiModelProperty(value = "妫�楠岄」鐩甀d") 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 = "鍥剧墖涓婁紶") diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java index 72073e9..f77bbca 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java +++ b/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); } diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java index 99bbc0b..8285c04 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java +++ b/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); + } } diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 719bc31..ade7e87 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/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: diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java index a341f1e..fa0ae3e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java +++ b/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 缁撴灉 diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml index 3b94b7f..4b3c2a1 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/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> \ No newline at end of file + + <select id="selectDictValue" resultType="java.lang.String"> + select dict_label from sys_dict_data + where dict_type = #{dictType} and dict_label = #{dictLabel} + </select> +</mapper> -- Gitblit v1.9.3