db/¸üÐÂ˵Ã÷/¸üÐÂ˵Ã÷.md
@@ -1,2 +1,8 @@ 20250904 忥æ¶å¯ç½è®¾å¤ç®¡ç模å代ç 设å¤ç®¡çï¼ 1. äºä¿ç¶æãä¸ä¿ç¶ææ·»å å·²è¿æç±»åï¼å®æ¶ä»»å¡è®¾ç½®ç¶æè°æ´ä¸ºå·²è¿æ 2. 设å¤ç®¡ç-ææ¯ç¶æåå ¸ä¸çâåæ ¼âè°æ´ä¸ºâåæ ¼/å®å¥½â,æ¥æºå½å®¶è°æ´ä¸ºéæ©æ¡ 3. 设å¤ç®¡ç-å°è´¦é¡µé¢æ·»å å°è´¦ç»è®¡,ç»è®¡ç»æå¯å¯¼åº 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; } 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; /** * 设å¤ä¾åºå 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(); } 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> 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 å°è´¦ç»è®¡); } 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)); //è·ååç±»åå ¸äºçº§ãä¸çº§ä»¥ä¸å å«å½ååç±»çææåç±»id 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()); //æ¤å¤è®¾ç½®çfilenameæ æ ,å端ä¼éæ´æ°è®¾ç½®ä¸ä¸ 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ï¼å 嫿æä¸çº§ï¼ */ 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 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