From 6da57b610d97be3f79084d43440e7823d707b249 Mon Sep 17 00:00:00 2001 From: hyingbo <1363390067@qq.com> Date: 星期四, 04 九月 2025 17:54:55 +0800 Subject: [PATCH] 设备管理调整 --- lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EquipmentCategoryStatistics.java | 76 +++++++++++++++ lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java | 9 + lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java | 84 ++++++++++++++++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java | 3 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java | 7 + lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml | 54 ++++++++++ db/更新说明/更新说明.md | 8 + lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java | 24 ++++ lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java | 3 9 files changed, 266 insertions(+), 2 deletions(-) diff --git "a/db/\346\233\264\346\226\260\350\257\264\346\230\216/\346\233\264\346\226\260\350\257\264\346\230\216.md" "b/db/\346\233\264\346\226\260\350\257\264\346\230\216/\346\233\264\346\226\260\350\257\264\346\230\216.md" index 189eb62..756d5d1 100644 --- "a/db/\346\233\264\346\226\260\350\257\264\346\230\216/\346\233\264\346\226\260\350\257\264\346\230\216.md" +++ "b/db/\346\233\264\346\226\260\350\257\264\346\230\216/\346\233\264\346\226\260\350\257\264\346\230\216.md" @@ -1,2 +1,8 @@ 20250904 -鍚屾娑夊瘑缃戣澶囩鐞嗘ā鍧椾唬鐮� \ No newline at end of file +鍚屾娑夊瘑缃戣澶囩鐞嗘ā鍧椾唬鐮� + + +璁惧绠$悊锛� +1. 浜屼繚鐘舵�併�佷笁淇濈姸鎬佹坊鍔犲凡杩囨湡绫诲瀷锛屽畾鏃朵换鍔¤缃姸鎬佽皟鏁翠负宸茶繃鏈� +2. 璁惧绠$悊-鎶�鏈姸鎬佸瓧鍏镐腑鐨勨�滃悎鏍尖�濊皟鏁翠负鈥滃悎鏍�/瀹屽ソ鈥�,鏉ユ簮鍥藉璋冩暣涓洪�夋嫨妗� +3. 璁惧绠$悊-鍙拌处椤甸潰娣诲姞鍙拌处缁熻,缁熻缁撴灉鍙鍑� \ No newline at end of file diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EquipmentCategoryStatistics.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EquipmentCategoryStatistics.java new file mode 100644 index 0000000..94b755e --- /dev/null +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EquipmentCategoryStatistics.java @@ -0,0 +1,76 @@ +package org.jeecg.modules.eam.dto; + +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.math.BigDecimal; + +@Data +public class EquipmentCategoryStatistics { + + /** + * 璁惧绉嶇被 + */ + @Excel(name = "璁惧绉嶇被", width = 15, orderNum = "1") + private String equipmentType; + + /** + * 璁惧鎬绘暟 + */ + @Excel(name = "璁惧鎬绘暟", width = 15, orderNum = "2") + private Integer equipmentCount; + + /** + * 鎬诲師鍊� + */ + @Excel(name = "鎬诲師鍊�", width = 15, orderNum = "3") + private BigDecimal originalValue; + + /** + * 楂樼簿搴︽�绘暟 + */ + @Excel(name = "楂樼簿搴︽�绘暟", width = 15, orderNum = "4") + private Integer highPrecisionCount; + + /** + * 楂樼簿搴﹀師鍊� + */ + @Excel(name = "楂樼簿搴﹀師鍊�", width = 15, orderNum = "5") + private BigDecimal highPrecisionOriginalValue; + + /** + * 鍥戒骇鎬绘暟 + */ + @Excel(name = "鍥戒骇鎬绘暟", width = 15, orderNum = "6") + private Integer domesticCount; + + /** + * 鍥戒骇鍘熷�� + */ + @Excel(name = "鍥戒骇鍘熷��", width = 15, orderNum = "7") + private BigDecimal domesticOriginalValue; + + /** + * 杩涘彛鎬绘暟 + */ + @Excel(name = "杩涘彛鎬绘暟", width = 15, orderNum = "8") + private Integer importCount; + + /** + * 杩涘彛鍘熷�� + */ + @Excel(name = "杩涘彛鍘熷��", width = 15, orderNum = "9") + private BigDecimal importOriginalValue; + + /** + * 瀹屽ソ鎬绘暟 + */ + @Excel(name = "瀹屽ソ鎬绘暟", width = 15, orderNum = "10") + private Integer intactCount; + + /** + * 瀹屽ソ鍘熷�� + */ + @Excel(name = "瀹屽ソ鍘熷��", width = 15, orderNum = "11") + private BigDecimal intactOriginalValue; +} diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java index 33c9701..04d4f2a 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java @@ -142,8 +142,9 @@ /** * 鏉ユ簮鍥藉 */ - @Excel(name = "鏉ユ簮鍥藉", width = 25, orderNum = "14") + @Excel(name = "鏉ユ簮鍥藉", width = 25, dicCode = "source_country", orderNum = "14") @ApiModelProperty(value = "鏉ユ簮鍥藉") + @Dict(dicCode = "source_country") private String originCountry; /** * 璁惧渚涘簲鍟� diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java index 92bffec..54aaeac 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java @@ -1,5 +1,6 @@ package org.jeecg.modules.eam.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -7,6 +8,7 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.eam.entity.EamEquipment; +import org.jeecg.modules.system.entity.SysCategory; import java.util.List; @@ -32,4 +34,11 @@ * @return */ IPage<EamEquipment> queryPageList(IPage<EamEquipment> page, @Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper); + + @InterceptorIgnore( + tenantLine = "true", // 蹇界暐澶氱鎴锋潯浠� + blockAttack = "true", // 缁曡繃鍏ㄨ〃鎿嶄綔妫�鏌� + illegalSql = "true" // 绂佺敤 SQL 娉ㄥ叆妫�鏌� + ) + List<SysCategory> getCategoryTypeMap(); } diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml index f7e323a..62d1c55 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml @@ -9,4 +9,58 @@ on e.id = ext.id ${ew.customSqlSegment} </select> + <select id="getCategoryTypeMap" resultType="org.jeecg.modules.system.entity.SysCategory"> + WITH Level2Nodes AS ( + SELECT + id AS level_id, + name, + 2 AS node_level + FROM sys_category + WHERE pid IN (SELECT id FROM sys_category WHERE pid = '0') + ), + Level3Nodes AS ( + SELECT + tn.id AS level_id, + tn.name, + 3 AS node_level + FROM sys_category tn + INNER JOIN Level2Nodes l2 ON tn.pid = l2.level_id + ), + TargetLevels AS ( + SELECT level_id, node_level, name FROM Level2Nodes + UNION ALL + SELECT level_id, node_level, name FROM Level3Nodes + ), + NodeHierarchy AS ( + SELECT + tl.level_id AS root_id, + tl.name, + yt.id AS node_id, + yt.code AS node_code + FROM TargetLevels tl + INNER JOIN sys_category yt ON yt.id = tl.level_id + + UNION ALL + + SELECT + nh.root_id, + nh.name, + yt.id AS node_id, + yt.code AS node_code + FROM sys_category yt + INNER JOIN NodeHierarchy nh ON yt.pid = nh.node_id + ) + SELECT + root_id AS id, + name, + STUFF(( + SELECT ',' + node_code + FROM NodeHierarchy nh2 + WHERE nh2.root_id = nh1.root_id + FOR XML PATH(''), TYPE + ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS childCodes + FROM NodeHierarchy nh1 + GROUP BY root_id, name + ORDER BY root_id + </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java index d5e31af..f1c1eda 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java @@ -1,12 +1,15 @@ package org.jeecg.modules.eam.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.jeecg.modules.eam.dto.EquipmentCategoryStatistics; import org.jeecg.modules.eam.entity.EamEquipment; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.eam.request.EamEquipmentQuery; import org.jeecg.modules.eam.vo.EamEquipmentTree; import org.jeecg.modules.eam.vo.EquipmentSearchResult; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -52,4 +55,8 @@ * @return */ EamEquipment selectByEquipmentCode(String equipmentCode); + + List<EquipmentCategoryStatistics> queryLedgerStatistics(); + + ModelAndView exportLedgerStatisticsXls(HttpServletRequest request, Class<EquipmentCategoryStatistics> equipmentCategoryStatisticsClass, String 鍙拌处缁熻); } diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java index e92de4b..0f483c0 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java @@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.CommonConstant; @@ -17,6 +20,7 @@ import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus; import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum; import org.jeecg.modules.eam.constant.EquipmentRepairStatus; +import org.jeecg.modules.eam.dto.EquipmentCategoryStatistics; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamEquipmentExtend; import org.jeecg.modules.eam.mapper.EamEquipmentMapper; @@ -27,12 +31,20 @@ import org.jeecg.modules.eam.vo.EamEquipmentTree; import org.jeecg.modules.eam.vo.EquipmentSearchResult; import org.jeecg.modules.system.entity.MdcProduction; +import org.jeecg.modules.system.entity.SysCategory; import org.jeecg.modules.system.service.IMdcProductionService; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -54,6 +66,9 @@ private IEamEquipmentExtendService equipmentExtendService; @Autowired private IMdcProductionService mdcProductionService; + + @Value("${jeecg.path.upload}") + private String upLoadPath; @Override @Transactional(rollbackFor = Exception.class) @@ -260,6 +275,75 @@ return eamEquipmentMapper.selectOne(queryWrapper); } + @Override + public List<EquipmentCategoryStatistics> queryLedgerStatistics() { + List<EquipmentCategoryStatistics> list = Lists.newArrayList(); + //鑾峰彇鎵�鏈夊凡璁剧疆璁惧绫诲埆鐨勮澶囦俊鎭� + List<EamEquipment> equipmentList = this.list(new LambdaQueryWrapper<EamEquipment>().isNotNull(EamEquipment::getEquipmentType)); + + //鑾峰彇鍒嗙被瀛楀吀浜岀骇銆佷笁绾т互涓嬪寘鍚綋鍓嶅垎绫荤殑鎵�鏈夊垎绫籭d + List<SysCategory> categoryTypeMap = eamEquipmentMapper.getCategoryTypeMap(); + if (CollectionUtils.isEmpty(equipmentList) || CollectionUtils.isEmpty(categoryTypeMap)) { + return list; + } + for (SysCategory sysCategory : categoryTypeMap) { + List<EamEquipment> eamEquipmentList = equipmentList.stream().filter(eamEquipment -> Arrays.asList(sysCategory.getChildCodes().split(StringPool.COMMA)).contains(eamEquipment.getEquipmentType())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(eamEquipmentList)) { + continue; + } + EquipmentCategoryStatistics statistics = new EquipmentCategoryStatistics(); + statistics.setEquipmentType(sysCategory.getName()); + + //璁剧疆璁惧鎬绘暟 + statistics.setEquipmentCount(eamEquipmentList.size()); + statistics.setOriginalValue(eamEquipmentList.stream().filter(eamEquipment -> eamEquipment.getOriginalValue() != null).map(EamEquipment::getOriginalValue).reduce(BigDecimal.ZERO, BigDecimal::add)); + + //璁剧疆楂樼簿搴︿俊鎭� + List<EamEquipment> equipmentCategoryList = eamEquipmentList.stream().filter(eamEquipment -> "JMSB".equals(eamEquipment.getEquipmentCategory())).collect(Collectors.toList()); + statistics.setHighPrecisionCount(CollectionUtils.isNotEmpty(equipmentCategoryList) ? equipmentCategoryList.size() : 0); + statistics.setHighPrecisionOriginalValue(CollectionUtils.isNotEmpty(equipmentCategoryList) ? equipmentCategoryList.stream().map(eamEquipment -> eamEquipment.getOriginalValue() != null ? eamEquipment.getOriginalValue() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add) : BigDecimal.ZERO); + + //璁剧疆鍥戒骇淇℃伅 + List<EamEquipment> equipmentDomesticList = eamEquipmentList.stream().filter(eamEquipment -> "china".equals(eamEquipment.getOriginCountry())).collect(Collectors.toList()); + statistics.setDomesticCount(CollectionUtils.isNotEmpty(equipmentDomesticList) ? equipmentDomesticList.size() : 0); + statistics.setDomesticOriginalValue(CollectionUtils.isNotEmpty(equipmentDomesticList) ? equipmentDomesticList.stream().map(eamEquipment -> eamEquipment.getOriginalValue() != null ? eamEquipment.getOriginalValue() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add) : BigDecimal.ZERO); + + //璁剧疆杩涘彛淇℃伅 + List<EamEquipment> equipmentImportList = eamEquipmentList.stream().filter(eamEquipment -> !"china".equals(eamEquipment.getOriginCountry())).collect(Collectors.toList()); + statistics.setImportCount(CollectionUtils.isNotEmpty(equipmentImportList) ? equipmentImportList.size() : 0); + statistics.setImportOriginalValue(CollectionUtils.isNotEmpty(equipmentImportList) ? equipmentImportList.stream().map(eamEquipment -> eamEquipment.getOriginalValue() != null ? eamEquipment.getOriginalValue() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add) : BigDecimal.ZERO); + + //璁剧疆瀹屽ソ淇℃伅 + List<EamEquipment> equipmentIntactList = eamEquipmentList.stream().filter(eamEquipment -> StringPool.ONE.equals(eamEquipment.getTechnologyStatus())).collect(Collectors.toList()); + statistics.setIntactCount(CollectionUtils.isNotEmpty(equipmentIntactList) ? equipmentIntactList.size() : 0); + statistics.setIntactOriginalValue(CollectionUtils.isNotEmpty(equipmentIntactList) ? equipmentIntactList.stream().map(eamEquipment -> eamEquipment.getOriginalValue() != null ? eamEquipment.getOriginalValue() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add) : BigDecimal.ZERO); + list.add(statistics); + } + return list; + } + + @Override + public ModelAndView exportLedgerStatisticsXls(HttpServletRequest request, Class<EquipmentCategoryStatistics> clazz, String title) { + // 鑾峰彇瀵煎嚭浜� + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + // Step.2 鑾峰彇瀵煎嚭鏁版嵁 + List<EquipmentCategoryStatistics> exportList = queryLedgerStatistics(); + + // Step.3 AutoPoi 瀵煎嚭Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + //姝ゅ璁剧疆鐨刦ilename鏃犳晥 ,鍓嶇浼氶噸鏇存柊璁剧疆涓�涓� + mv.addObject(NormalExcelConstants.FILE_NAME, title); + mv.addObject(NormalExcelConstants.CLASS, clazz); + //update-begin--Author:liusq Date:20210126 for锛氬浘鐗囧鍑烘姤閿欙紝ImageBasePath鏈缃�-------------------- + ExportParams exportParams = new ExportParams(title + "鎶ヨ〃", "瀵煎嚭浜�:" + sysUser.getRealname(), title); + exportParams.setImageBasePath(upLoadPath); + //update-end--Author:liusq Date:20210126 for锛氬浘鐗囧鍑烘姤閿欙紝ImageBasePath鏈缃�---------------------- + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + return mv; + } + /** * 鑾峰彇鎵�鏈夌殑浜х嚎id锛堝寘鍚墍鏈変笂绾э級 */ diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java index f0615fc..d8b6287 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java @@ -18,6 +18,7 @@ import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamEquipmentExtend; import org.jeecg.modules.eam.request.EamEquipmentQuery; +import org.jeecg.modules.eam.dto.EquipmentCategoryStatistics; import org.jeecg.modules.eam.service.IEamEquipmentExtendService; import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.vo.EamEquipmentTree; @@ -85,6 +86,29 @@ } /** + * 璁惧鍙拌处-鍙拌处缁熻 + * + * @return + */ +// @AutoLog(value = "璁惧鍙拌处-鍒嗛〉鍒楄〃鏌ヨ") + @ApiOperation(value = "璁惧鍙拌处-鍙拌处缁熻", notes = "璁惧鍙拌处-鍙拌处缁熻") + @GetMapping(value = "/queryLedgerStatistics") + public Result<?> queryLedgerStatistics() { + List<EquipmentCategoryStatistics> list = eamEquipmentService.queryLedgerStatistics(); + return Result.OK(list); + } + + /** + * 瀵煎嚭鍙拌处缁熻excel + * + * @param request + */ + @RequestMapping(value = "/exportLedgerStatisticsXls") + public ModelAndView exportLedgerStatisticsXls(HttpServletRequest request) { + return eamEquipmentService.exportLedgerStatisticsXls(request, EquipmentCategoryStatistics.class, "鍙拌处缁熻"); + } + + /** * 娣诲姞 * * @param eamEquipment diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java index e86ba7e..6dc2852 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java @@ -86,6 +86,9 @@ private String parentCode; @TableField(exist = false) + private String childCodes; + + @TableField(exist = false) private List<SysCategory> children; @Override -- Gitblit v1.9.3