diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java index 30ec7c6..95a5165 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java @@ -25,4 +25,6 @@ public class DevInfoPropertyVo { private String inputType; + private String mustHave; + } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevMergeServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevMergeServiceImpl.java index a763ce6..f8d59da 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevMergeServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevMergeServiceImpl.java @@ -8,6 +8,9 @@ import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.devConfig.domain.EquipmentProperty; +import com.bonus.material.devConfig.mapper.EquipmentPropertyMapper; +import com.bonus.material.devConfig.service.EquipmentPropertyService; import com.bonus.material.devchange.domain.MaDevFile; import com.bonus.material.devchange.domain.MaDevInfo; import com.bonus.material.devchange.domain.MapBean; @@ -21,6 +24,7 @@ import com.bonus.material.device.mapper.DevInfoMapper; import com.bonus.material.device.mapper.DevMergeMapper; import com.bonus.material.device.mapper.MaDevQcMapper; import com.bonus.material.device.service.DevMergeService; +import com.bonus.material.device.service.MaDevQcService; import com.bonus.material.utils.FolderZipUtil; import com.bonus.system.api.RemoteFileService; import lombok.extern.slf4j.Slf4j; @@ -71,6 +75,9 @@ public class DevMergeServiceImpl implements DevMergeService { @Autowired private MaDevQcMapper qcMapper; + @Resource + private EquipmentPropertyMapper equipmentPropertyMapper; + @Override public List list(DevMergeVo devInfo) { Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); @@ -454,6 +461,7 @@ public class DevMergeServiceImpl implements DevMergeService { return AjaxResult.error("导入失败,存在以下错误:" + String.join(" ", errorMessages)); } + // 4. 遍历数据,进行最终校验和导入 for (int i = 0; i < list.size(); i++) { EquipmentImportDTO item = list.get(i); @@ -475,7 +483,8 @@ public class DevMergeServiceImpl implements DevMergeService { // 5. 校验通过,执行导入逻辑 try { MaDevInfo maDevInfo = new MaDevInfo(); - maDevInfo.setTypeId(devMergeMapper.getTypeId(item.getProfession())); + Integer typeId = devMergeMapper.getTypeId(item.getProfession()); + maDevInfo.setTypeId(typeId); maDevInfo.setProductionDate(item.getProductionDate()); maDevInfo.setPurchaseDate(item.getPurchaseDate()); maDevInfo.setSpecificationModel(item.getSpecification()); @@ -491,6 +500,21 @@ public class DevMergeServiceImpl implements DevMergeService { maDevInfo.setCode(getString()); Integer insertResult = devMergeMapper.interDevice(maDevInfo); + devInfoMapper.deleteDevInfoProperties(Long.valueOf(maDevInfo.getMaId())); + List equipmentProperties = equipmentPropertyMapper.selectByType(Long.valueOf(typeId)); + if (equipmentProperties != null && !equipmentProperties.isEmpty()) { + List devInfoPropertyVos = new ArrayList<>(); + for (EquipmentProperty equipmentProperty : equipmentProperties) { + DevInfoPropertyVo entity = new DevInfoPropertyVo(); + entity.setId(Math.toIntExact(equipmentProperty.getId())); + entity.setPropertyName(equipmentProperty.getPropertyName()); + entity.setPropertyValue(null); + devInfoPropertyVos.add(entity); + } + devInfoMapper.insertDevInfoProperties(Long.valueOf(maDevInfo.getMaId()), devInfoPropertyVos); + + } + if (insertResult > 0) { MaDevQc maDevQc = new MaDevQc(); maDevQc.setMaId(maDevInfo.getMaId()); @@ -501,6 +525,7 @@ public class DevMergeServiceImpl implements DevMergeService { .orElse(SecurityUtils.getLoginUser().getSysUser().getDeptId()).toString()); maDevQc.setNextCheckTime(maDevInfo.getNextMaintenanceDate()); qcMapper.insertDevQc(maDevQc); + devMergeMapper.insertOrderDevReal(orderId, Long.valueOf(maDevInfo.getMaId())); } } catch (Exception e) { diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/controller/IndexController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/controller/IndexController.java new file mode 100644 index 0000000..67124c7 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/controller/IndexController.java @@ -0,0 +1,85 @@ +package com.bonus.material.index.controller; + +import com.bonus.common.biz.config.ListPagingUtil; +import com.bonus.common.core.utils.poi.ExcelUtil; +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.device.domain.vo.DevInfoVo; +import com.bonus.material.index.service.IndexService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +@RestController +@RequestMapping("/index") +public class IndexController extends BaseController { + @Resource + private IndexService indexService; + + @ApiOperation(value = "数据总览") + @GetMapping("/getDeviceNum") + public AjaxResult getDeviceNum() { + return indexService.getDeviceNum(); + } + + + @ApiOperation(value = "使用情况") + @GetMapping("/getUseDeviceNum") + public AjaxResult getUseDeviceNum() { + return indexService.getUseDeviceNum(); + } + + @ApiOperation(value = "实时情况") + @GetMapping("/getReal") + public AjaxResult getReal() { + return indexService.getReal(); + } + + @ApiOperation(value = "实时情况") + @GetMapping("/getDeviceByDept") + public AjaxResult getDeviceByDept() { + return indexService.getDeviceByDept(); + } + + @ApiOperation(value = "实时情况") + @GetMapping("/getMaQc") + public AjaxResult getMaQc() { + return indexService.getMaQc(); + } + + + + @ApiOperation(value = "实时情况") + @GetMapping("/getDeviceNumByMonth") + public AjaxResult getDeviceNumByMonth() { + return indexService.getDeviceNumByMonth(); + } + + @ApiOperation(value = "实时情况") + @GetMapping("/getApprover") + public AjaxResult getApprover() { + return indexService.getApprover(); + } + + @ApiOperation(value = "实时情况") + @GetMapping("/getShare") + public AjaxResult getShare() { + return indexService.getShare(); + } + + + @ApiOperation(value = "导出装备信息") + @PostMapping("/export") + public void export(HttpServletResponse response) { + indexService.export(response); + } + + + +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/CompanyDevToolStatisticsExport.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/CompanyDevToolStatisticsExport.java new file mode 100644 index 0000000..a5c7080 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/CompanyDevToolStatisticsExport.java @@ -0,0 +1,57 @@ +package com.bonus.material.index.domain; + +import cn.hutool.core.annotation.Alias; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 公司设备与工具统计实体类(用于Excel导出) + * 对应SQL查询结果的字段映射,适配Hutool Excel导出 + */ +@Data +public class CompanyDevToolStatisticsExport { + + /** + * 公司名称(对应SQL中的companyName) + * Hutool @Alias:导出时的表头名称 + */ + @Alias("公司名称") + private String companyName; + + /** + * 工具数量(对应SQL中的toolNum,已取整) + */ + @Alias("工具数量") + private Integer toolNum; + + /** + * 设备数量(对应SQL中的maNum,已取整) + */ + @Alias("装备数量") + private Integer maNum; + + /** + * 设备成本(对应SQL中的maCost,保留小数) + */ + @Alias("装备总价值") + private BigDecimal maCost; + + /** + * 工具成本(对应SQL中的toolCost,保留小数) + */ + @Alias("工具总价值") + private BigDecimal toolCost; + + /** + * manage_mode=0的工具有效数量总和(编码工具数量) + */ + @Alias("编码工具总数") + private Integer toolCodeNum; + + /** + * manage_mode=1的工具有效数量总和(无编码工具有效数量) + */ + @Alias("数量工具总数") + private Integer toolNoCodeNum; +} \ No newline at end of file diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/MaDevInfoXlsxExport.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/MaDevInfoXlsxExport.java new file mode 100644 index 0000000..1eb5ca9 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/MaDevInfoXlsxExport.java @@ -0,0 +1,150 @@ +package com.bonus.material.index.domain; + +import cn.hutool.core.annotation.Alias; +import com.bonus.common.core.annotation.Excel; +import com.bonus.material.devchange.domain.MaDevFile; +import com.bonus.material.device.domain.vo.DevInfoPropertyVo; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 装备Excel导出实体类 + * 存储装备导出所需的详细信息,含固定9组特征项 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MaDevInfoXlsxExport { + + @Alias("产权单位") + @ApiModelProperty(value = "专业") + private String propertyUnit; + + /** + * 专业 + */ + @Alias("专业") + @ApiModelProperty(value = "专业") + private String major; + + /** + * 工序(子工序) + */ + @Alias("工序") + @ApiModelProperty(value = "工序") + private String subProcess; + + /** + * 装备类目(小类目) + */ + @Alias("装备类目") + @ApiModelProperty(value = "装备类目") + private String subCategory; + /** + * 类型分支(装备分支) + */ + @Alias("装备名称") + @ApiModelProperty(value = "类型分支") + private String name; + /** + * 规格型号 + */ + @Alias("规格型号") + @ApiModelProperty(value = "规格型号") + private String specificationModel; + /** + * 装备编码 + */ + @Alias("装备编码") + @ApiModelProperty(value = "装备编码") + private String code; + + /** + * 装备编码 + */ + @Alias("装备原始编码") + @ApiModelProperty(value = "装备编码") + private String originalCode; + + + /** + * 装备编码 + */ + @Alias("装备状态") + @ApiModelProperty(value = "装备编码") + private String status; + /** + * 使用年限 + */ + @Alias("使用年限") + @ApiModelProperty(value = "使用年限") + private String serviceLife; + + /** + * 计量单位 + */ + @Alias("计量单位") + @ApiModelProperty(value = "计量单位") + private String unit; + + /** + * 资产原值(元) + */ + @Alias("资产原值(元)") + @ApiModelProperty(value = "资产原值(元)") + private Integer originalValue; + + + /** + * 资产原值(元) + */ + @Alias("净值") + @ApiModelProperty(value = "资产原值(元)") + private Integer original; + /** + * 生产厂家 + */ + @Alias("生产厂家") + @ApiModelProperty(value = "生产厂家") + private String manufacturer; + + /** + * 出厂日期 + */ + @Alias("出厂日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty(value = "出厂日期(yyyy-MM-dd)") + private String productionDate; + + + /** + * 最大使用年限(年) + */ + @Alias("最大使用年限(年)") + @ApiModelProperty(value = "最大使用年限(年)") + private Integer maxServiceLifeYears; + + /** + * 最大使用年限(年) + */ + @Alias("录入人") + @ApiModelProperty(value = "最大使用年限(年)") + private String creator; + + + /** + * 最大使用年限(年) + */ + @Alias("录入时间") + @ApiModelProperty(value = "最大使用年限(年)") + private String createTime; + +} \ No newline at end of file diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/ToolLedgerEntityExport.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/ToolLedgerEntityExport.java new file mode 100644 index 0000000..2940433 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/domain/ToolLedgerEntityExport.java @@ -0,0 +1,98 @@ +package com.bonus.material.index.domain; + +import cn.hutool.core.annotation.Alias; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ToolLedgerEntityExport { + + /** + * 4级父节点名称 + */ + @Alias("工具专业") + private String fourthParentName; + + /** + * 3级父节点名称 + */ + @Alias("施工类型") + private String greatGrandparentName; + /** + * 2级父节点名称 + */ + @Alias("工具类型") + private String grandparentTypeName; + /** + * 1级父节点名称 + */ + @Alias("工具名称") + private String parentTypeName; + + @Alias("工具编码") + private String code; + + @Alias("管理模式") + private String manageMode; + + @Alias("计量单位") + private String unitName; + + + /** + * 总数量(非空,默认1.00) + */ + @Alias("在库数量") + private Integer availableNum; + + + /** + * 总数量(非空,默认1.00) + */ + @Alias("自用数量") + private Integer inNum; + + + /** + * 总数量(非空,默认1.00) + */ + @Alias("共享数量") + private Integer shareNum; + + + /** + * 总数量(非空,默认1.00) + */ + @Alias("维修数量") + private Integer repairNum; + + + /** + * 总数量(非空,默认1.00) + */ + @Alias("退役数量") + private Integer scrapNum; + + /** + * 总数量(非空,默认1.00) + */ + @Alias("资产原值") + private Integer totalNum; + + + /** + * 最大使用年限(年) + */ + @Alias("录入人") + @ApiModelProperty(value = "最大使用年限(年)") + private String creator; + + + /** + * 最大使用年限(年) + */ + @Alias("录入时间") + @ApiModelProperty(value = "最大使用年限(年)") + private String createTime; + +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/mapper/IndexMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/mapper/IndexMapper.java new file mode 100644 index 0000000..08cbb74 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/mapper/IndexMapper.java @@ -0,0 +1,50 @@ +package com.bonus.material.index.mapper; + +import com.bonus.material.devchange.domain.MaDevInfo; +import com.bonus.material.devchange.domain.MaDevInfoXlsx; +import com.bonus.material.index.domain.CompanyDevToolStatisticsExport; +import com.bonus.material.index.domain.MaDevInfoXlsxExport; +import com.bonus.material.index.domain.ToolLedgerEntityExport; +import com.bonus.material.toolLedger.domain.ToolLedgerEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public interface IndexMapper { + /** + * 数据总览 + * + * @return + */ + Map getDeviceNum(String companyId); + + Map getUseDeviceNum(); + + List> getReal(); + + List> getDeviceByDept(); + + Map getMaQc(String companyId); + + Map getDeviceNumByMonth(String companyId); + + List> getApprover(@Param("userId") String userId, @Param("roles")Set roles); + + Map getShare(String companyId); + + + List getDeviceByDeptEX(); + + List listXlsx(); + + + /** + * 工具台账表格 + * + * @param entity 实体 + * @return 表格 + */ + List listToolLedgerEntity(); +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/service/IndexService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/service/IndexService.java new file mode 100644 index 0000000..4fb34bd --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/service/IndexService.java @@ -0,0 +1,39 @@ +package com.bonus.material.index.service; + +import com.bonus.common.core.web.domain.AjaxResult; + +import javax.servlet.http.HttpServletResponse; + +public interface IndexService { + /** + * 数据总览 + * + * @return + */ + AjaxResult getDeviceNum(); + + /** + * 使用情况 + * + * @return + */ + AjaxResult getUseDeviceNum(); + + /** + * 实时情况 + * @return + */ + AjaxResult getReal(); + + AjaxResult getDeviceByDept(); + + AjaxResult getMaQc(); + + AjaxResult getDeviceNumByMonth(); + + AjaxResult getApprover(); + + AjaxResult getShare(); + + void export(HttpServletResponse response); +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/service/impl/IndexServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/service/impl/IndexServiceImpl.java new file mode 100644 index 0000000..8953ba3 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/index/service/impl/IndexServiceImpl.java @@ -0,0 +1,263 @@ +package com.bonus.material.index.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.device.domain.vo.DevInfoVo; +import com.bonus.material.index.domain.CompanyDevToolStatisticsExport; +import com.bonus.material.index.domain.MaDevInfoXlsxExport; +import com.bonus.material.index.domain.ToolLedgerEntityExport; +import com.bonus.material.index.mapper.IndexMapper; +import com.bonus.material.index.service.IndexService; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.*; + +import static com.bonus.common.biz.constant.MaterialConstants.ADMIN_ID; +import static com.bonus.common.biz.constant.MaterialConstants.PROVINCE_COMPANY_DEPT_ID; + +@Service +@Slf4j +public class IndexServiceImpl implements IndexService { + @Resource + private IndexMapper mapper; + + /** + * 数据总览 + * + * @return + */ + @Override + public AjaxResult getDeviceNum() { + try { + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + Long userId = SecurityUtils.getLoginUser().getUserid(); + // 管理员和省公司可查看所有数据 + Map map = new HashMap<>(); + if (userId != null && deptId != null + && !userId.equals(ADMIN_ID) + && !deptId.equals(PROVINCE_COMPANY_DEPT_ID)) { + + map = mapper.getDeviceNum(String.valueOf(deptId)); + } else { + map = mapper.getDeviceNum(null); + } + + return ObjectUtil.isNotEmpty(map) ? AjaxResult.success(map) : AjaxResult.error(); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + + } + + /** + * 使用情况 + * + * @return + */ + @Override + public AjaxResult getUseDeviceNum() { + try { + Map map = mapper.getUseDeviceNum(); + return ObjectUtil.isNotEmpty(map) ? AjaxResult.success(map) : AjaxResult.error(); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + } + + /** + * 实时情况 + * + * @return + */ + @Override + public AjaxResult getReal() { + try { + List> map = mapper.getReal(); + return ObjectUtil.isNotEmpty(map) ? AjaxResult.success(map) : AjaxResult.error(); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + } + + /** + * @return + */ + @Override + public AjaxResult getDeviceByDept() { + try { + List> map = mapper.getDeviceByDept(); + return ObjectUtil.isNotEmpty(map) ? AjaxResult.success(map) : AjaxResult.error(); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + } + + /** + * @return + */ + @Override + public AjaxResult getMaQc() { + try { + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + Long userId = SecurityUtils.getLoginUser().getUserid(); + // 管理员和省公司可查看所有数据 + Map map = new HashMap<>(); + if (userId != null && deptId != null + && !userId.equals(ADMIN_ID) + && !deptId.equals(PROVINCE_COMPANY_DEPT_ID)) { + + map = mapper.getMaQc(String.valueOf(deptId)); + } else { + map = mapper.getMaQc(null); + } + + return ObjectUtil.isNotEmpty(map) ? AjaxResult.success(map) : AjaxResult.error(); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + } + + /** + * @return + */ + @Override + public AjaxResult getDeviceNumByMonth() { + try { + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + Long userId = SecurityUtils.getLoginUser().getUserid(); + // 管理员和省公司可查看所有数据 + Map map = new HashMap<>(); + if (userId != null && deptId != null + && !userId.equals(ADMIN_ID) + && !deptId.equals(PROVINCE_COMPANY_DEPT_ID)) { + + map = mapper.getDeviceNumByMonth(String.valueOf(deptId)); + } else { + map = mapper.getDeviceNumByMonth(null); + } + + return ObjectUtil.isNotEmpty(map) ? AjaxResult.success(map) : AjaxResult.error(); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + } + + /** + * @return + */ + @Override + public AjaxResult getApprover() { + try { + Long userId = SecurityUtils.getLoginUser().getUserid(); + Set roles = SecurityUtils.getLoginUser().getRoles(); + // 管理员和省公司可查看所有数据 + List> map = new ArrayList<>(); + if (userId != null + && !userId.equals(ADMIN_ID)) { + + map = mapper.getApprover(String.valueOf(userId), roles); + } else { + map = mapper.getApprover(null, null); + } + + return AjaxResult.success(map); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + } + + /** + * @return + */ + @Override + public AjaxResult getShare() { + try { + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + Long userId = SecurityUtils.getLoginUser().getUserid(); + // 管理员和省公司可查看所有数据 + Map map = new HashMap<>(); + if (userId != null && deptId != null + && !userId.equals(ADMIN_ID) + && !deptId.equals(PROVINCE_COMPANY_DEPT_ID)) { + + map = mapper.getShare(String.valueOf(deptId)); + } else { + map = mapper.getShare(null); + } + + return ObjectUtil.isNotEmpty(map) ? AjaxResult.success(map) : AjaxResult.error(); + } catch (Exception e) { + log.error(e.getMessage()); + return AjaxResult.error(); + } + } + + /** + * @param response + */ + @Override + public void export(HttpServletResponse response) { + // 1. 准备数据(省略,同前文) + List companyDevToolStatistics = mapper.getDeviceByDeptEX(); + List maDevInfoXlsxExports = mapper.listXlsx(); + List toolLedgerEntityExports = mapper.listToolLedgerEntity(); + // 2. 初始化ExcelWriter + ExcelWriter writer = ExcelUtil.getWriter(); + // 3. 写入多Sheet数据(省略) + writer.setSheet("统计"); + writer.write(companyDevToolStatistics); + writer.setSheet("装备信息"); + writer.write(maDevInfoXlsxExports); + + writer.setSheet("工具信息"); + writer.write(toolLedgerEntityExports); + + Workbook workbook = writer.getWorkbook(); + // 遍历Sheet,删除名称为Sheet1/Sheet0的空Sheet(Hutool默认名称) + for (int i = 0; i < workbook.getNumberOfSheets(); i++) { + Sheet sheet = workbook.getSheetAt(i); + String sheetName = sheet.getSheetName(); + // 判断是否为默认空Sheet(名称为Sheet1/Sheet0,且行数为0) + if (("Sheet1".equals(sheetName) || "Sheet0".equals(sheetName)) && sheet.getLastRowNum() == -1) { + workbook.removeSheetAt(i); + break; // 只删除一个默认空Sheet,跳出循环 + } + } + // 4. 设置响应头(修复编码异常) + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = null; + try { + // 捕获UnsupportedEncodingException异常 + fileName = URLEncoder.encode("多Sheet页导出", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + // 5. 写入输出流并关闭 + writer.flush(response.getOutputStream(), true); + writer.close(); + + } catch (Exception e) { + // 异常处理:使用默认名称,或抛出运行时异常 + log.error(e.getMessage()); + } + + } + + +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/controller/ToBeScrapController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/controller/ToBeScrapController.java index 62e0cfd..5edfddd 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/controller/ToBeScrapController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/controller/ToBeScrapController.java @@ -59,4 +59,11 @@ public class ToBeScrapController extends BaseController { } + @GetMapping("/getDetail/{id}") + @ApiOperation(value = "获取报废详情明细") + public AjaxResult getDetail(@PathVariable("id") String id) { + return AjaxResult.success(toBeScrapService.getDetail(id)); + } + + } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/mapper/ScrapMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/mapper/ScrapMapper.java index 9a5e84e..162169f 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/mapper/ScrapMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/mapper/ScrapMapper.java @@ -83,4 +83,6 @@ public interface ScrapMapper { * 根据设备类型和编号查询 */ ToBeScrap selectByTypeIdAndCode(ToBeScrap toBeScrap); + + List getDetail(String id); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/ToBeScrapService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/ToBeScrapService.java index 3fd0b67..384279b 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/ToBeScrapService.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/ToBeScrapService.java @@ -37,4 +37,6 @@ public interface ToBeScrapService { * 获取报废详情明细 */ List getScrapDetailsList(ToBeScrap bean); + + List getDetail(String id); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/impl/ToBeScrapServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/impl/ToBeScrapServiceImpl.java index 7a4eccd..9bdf5e4 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/impl/ToBeScrapServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/scrap/service/impl/ToBeScrapServiceImpl.java @@ -250,4 +250,14 @@ public class ToBeScrapServiceImpl implements ToBeScrapService { public List getScrapDetailsList(ToBeScrap bean) { return scrapMapper.getScrapDetailsList(bean); } + + /** + * @param id + * @return + */ + @Override + public List getDetail(String id) { + + return scrapMapper.getDetail(id); + } } diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml index 7f77705..3a4f469 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml @@ -272,6 +272,7 @@ mdip.property_name propertyName, mdip.property_value propertyValue, mtp.property_value AS value, + mtp.must_have AS mustHave, mtp.input_type AS inputType from ma_dev_info_properties mdip LEFT JOIN ma_type_properties mtp ON mtp.id = mdip.property_id diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/index/IndexMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/index/IndexMapper.xml new file mode 100644 index 0000000..8fe64ac --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/index/IndexMapper.xml @@ -0,0 +1,503 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/scrap/ScrapMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/scrap/ScrapMapper.xml index f042f7b..0abe1db 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/scrap/ScrapMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/scrap/ScrapMapper.xml @@ -377,6 +377,48 @@ + update cs_device_change set review_status = #{reviewStatus} where id = #{changeId} diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/toolLedger/ToolLedgerMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/toolLedger/ToolLedgerMapper.xml index 2c07874..34f2386 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/toolLedger/ToolLedgerMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/toolLedger/ToolLedgerMapper.xml @@ -62,6 +62,7 @@