yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
@@ -1,9 +1,12 @@ package cn.iocoder.yudao.module.mdm.controller.admin.item; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemExcelVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemImportExcelVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemImportRespVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemPageReqVO; @@ -15,6 +18,7 @@ import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemBatchConfigDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; import cn.iocoder.yudao.module.mdm.enums.MdmItemTypeEnum; import cn.iocoder.yudao.module.mdm.service.brand.MdmBrandService; import cn.iocoder.yudao.module.mdm.service.category.MdmItemCategoryService; import cn.iocoder.yudao.module.mdm.service.item.MdmItemBatchConfigService; @@ -39,6 +43,7 @@ import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @@ -136,14 +141,48 @@ @PreAuthorize("@ss.hasPermission('mdm:item:query')") public CommonResult<PageResult<MdmItemRespVO>> getItemPage(@Valid MdmItemPageReqVO pageReqVO) { PageResult<MdmItemDO> pageResult = itemService.getItemPage(pageReqVO); // 转æ¢å¹¶è¡¥é½å ³èåç§° List<MdmItemRespVO> respList = convertAndEnrichItemList(pageResult.getList()); return success(new PageResult<>(respList, pageResult.getTotal())); } @GetMapping("/export-excel") @Operation(summary = "导åºç©æ Excel") @PreAuthorize("@ss.hasPermission('mdm:item:export')") @ApiAccessLog(operateType = EXPORT) public void exportItemExcel(@Valid MdmItemPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); // å¤ç¨å页æ¥è¯¢çè¿æ»¤ä¸å ³èå¡«å é»è¾ï¼ä¿è¯å¯¼åºæ°æ®ä¸å表ä¸è´ List<MdmItemRespVO> respList = convertAndEnrichItemList(itemService.getItemPage(pageReqVO).getList()); List<MdmItemExcelVO> excelList = new ArrayList<>(); for (MdmItemRespVO resp : respList) { MdmItemExcelVO excelVO = BeanUtils.toBean(resp, MdmItemExcelVO.class); MdmItemTypeEnum itemType = MdmItemTypeEnum.fromType(resp.getItemType()); excelVO.setItemTypeName(itemType != null ? itemType.getName() : null); excelList.add(excelVO); } // å¯¼åº Excel ExcelUtils.write(response, "ç©ææ°æ®.xls", "ç©æ", MdmItemExcelVO.class, excelList); } /** * å°ç©æ DO å表转æ¢ä¸ºå·²è¡¥é½å ³èåç§°ï¼åç±»ã主/è¾ è®¡éåä½ãé»è®¤ä»åºï¼ååæ¥ç¶æç RespVO å表 * * å页æ¥è¯¢ä¸ Excel 导åºå ±ç¨ï¼ä¿è¯å¯¼åºå 容ä¸å表å±ç¤ºä¸è´ */ private List<MdmItemRespVO> convertAndEnrichItemList(List<MdmItemDO> itemList) { if (itemList == null || itemList.isEmpty()) { return Collections.emptyList(); } // å ³èæ¥è¯¢åç±»åç§° Map<Long, MdmItemCategoryDO> categoryMap = itemCategoryService.getItemCategoryMap( convertSet(pageResult.getList(), MdmItemDO::getCategoryId)); convertSet(itemList, MdmItemDO::getCategoryId)); // å ³èæ¥è¯¢è®¡éåä½åç§° Map<Long, MdmUnitMeasureDO> unitMap = unitMeasureService.getUnitMeasureMap( convertSet(pageResult.getList(), MdmItemDO::getUnitMeasureId)); convertSet(itemList, MdmItemDO::getUnitMeasureId)); // è½¬æ¢ List<MdmItemRespVO> respList = BeanUtils.toBean(pageResult.getList(), MdmItemRespVO.class); List<MdmItemRespVO> respList = BeanUtils.toBean(itemList, MdmItemRespVO.class); // æ¹éæ¥è¯¢åæ¥ç¶æ Set<Long> allIds = convertSet(respList, MdmItemRespVO::getId); Set<Long> syncedIds = mesMdItemApi.getSyncedMdmItemIds(allIds); @@ -189,7 +228,7 @@ // åæ¥ç¶æ resp.setSyncedMes(syncedIds.contains(resp.getId())); }); return success(new PageResult<>(respList, pageResult.getTotal())); return respList; } @GetMapping("/list-by-ids") @@ -277,6 +316,7 @@ @GetMapping("/get-import-template") @Operation(summary = "è·å¾å¯¼å ¥ç©ææ¨¡æ¿") @PreAuthorize("@ss.hasPermission('mdm:item:import')") public void importTemplate(HttpServletResponse response) throws IOException { List<MdmItemImportExcelVO> list = Arrays.asList( MdmItemImportExcelVO.builder().code("ITEM001").name("示ä¾ç©æ").specification("è§æ ¼").status(0).isBatchManaged(false).build() yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemExcelVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,89 @@ package cn.iocoder.yudao.module.mdm.controller.admin.item.vo; import cn.idev.excel.annotation.ExcelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * MDM ç©æå¯¼åº Excel VO * * @author è¶ çº§ç®¡çå */ @Data public class MdmItemExcelVO { @ExcelProperty("ç©æç¼ç ") private String code; @ExcelProperty("ç©æåç§°") private String name; @ExcelProperty("ç©ææ¡ç ") private String barCode; @ExcelProperty("è§æ ¼åå·") private String specification; @ExcelProperty("ç©æç±»å") private String itemTypeName; @ExcelProperty("ç©æåç±»") private String categoryName; @ExcelProperty("主计éåä½") private String unitMeasureName; @ExcelProperty("è¾ åä½1") private String unitMeasureName2; @ExcelProperty("è¾ åä½1æ¢ç®æ¯ç") private BigDecimal unitMeasureRate1; @ExcelProperty("è¾ åä½2") private String unitMeasureName3; @ExcelProperty("è¾ åä½2æ¢ç®æ¯ç") private BigDecimal unitMeasureRate2; @ExcelProperty("é»è®¤ä»åº") private String warehouseName; @ExcelProperty("ç¶æ") private Integer status; @ExcelProperty("æ¯å¦æ¹æ¬¡ç®¡ç") private Boolean isBatchManaged; @ExcelProperty("éé(kg)") private BigDecimal weight; @ExcelProperty("éè´ä»·") private BigDecimal purchasePrice; @ExcelProperty("éå®ä»·") private BigDecimal salesPrice; @ExcelProperty("ææ¬ä»·") private BigDecimal costPrice; @ExcelProperty("å®å ¨åºå") private BigDecimal safetyStock; @ExcelProperty("æä½åºå") private BigDecimal minStock; @ExcelProperty("æé«åºå") private BigDecimal maxStock; @ExcelProperty("ä¿è´¨æ(天)") private Integer expiryDay; @ExcelProperty("夿³¨") private String remark; @ExcelProperty("å建æ¶é´") private LocalDateTime createTime; } yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/unit/MdmUnitMeasureController.java
@@ -1,9 +1,12 @@ package cn.iocoder.yudao.module.mdm.controller.admin.unit; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.mdm.controller.admin.unit.vo.MdmUnitMeasureExcelVO; import cn.iocoder.yudao.module.mdm.controller.admin.unit.vo.MdmUnitMeasureImportExcelVO; import cn.iocoder.yudao.module.mdm.controller.admin.unit.vo.MdmUnitMeasureImportRespVO; import cn.iocoder.yudao.module.mdm.controller.admin.unit.vo.MdmUnitMeasurePageReqVO; @@ -23,9 +26,13 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管çåå° - MDM 计éåä½") @@ -101,8 +108,37 @@ return success(unitMeasureService.getUnitMeasureList(ids)); } @GetMapping("/export-excel") @Operation(summary = "导åºè®¡éåä½ Excel") @PreAuthorize("@ss.hasPermission('mdm:unit-measure:export')") @ApiAccessLog(operateType = EXPORT) public void exportUnitMeasureExcel(@Valid MdmUnitMeasurePageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List<MdmUnitMeasureDO> list = unitMeasureService.getUnitMeasurePage(pageReqVO).getList(); // 主åä½ç¼ç æ å°ï¼ä¸æ¬¡æ¥è¯¢å ¨é¨è®¡éåä½ï¼ç¨äºè§£æ primaryId -> ç¼ç MdmUnitMeasurePageReqVO allReqVO = new MdmUnitMeasurePageReqVO(); allReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); Map<Long, String> unitCodeMap = new HashMap<>(); for (MdmUnitMeasureDO unit : unitMeasureService.getUnitMeasurePage(allReqVO).getList()) { unitCodeMap.put(unit.getId(), unit.getCode()); } // ç»è£ å¯¼åº VOï¼ä¸»åä½ç¼ç ä» DO.primaryId è§£æï¼ List<MdmUnitMeasureExcelVO> excelList = new ArrayList<>(); for (MdmUnitMeasureDO unit : list) { MdmUnitMeasureExcelVO excelVO = BeanUtils.toBean(unit, MdmUnitMeasureExcelVO.class); if (unit.getPrimaryId() != null) { excelVO.setPrimaryCode(unitCodeMap.get(unit.getPrimaryId())); } excelList.add(excelVO); } // å¯¼åº Excel ExcelUtils.write(response, "计éå使°æ®.xls", "计éåä½", MdmUnitMeasureExcelVO.class, excelList); } @GetMapping("/get-import-template") @Operation(summary = "è·å¾å¯¼å ¥è®¡éå使¨¡æ¿") @PreAuthorize("@ss.hasPermission('mdm:unit-measure:import')") public void importTemplate(HttpServletResponse response) throws IOException { List<MdmUnitMeasureImportExcelVO> list = Arrays.asList( MdmUnitMeasureImportExcelVO.builder().code("PC").name("ç").primaryFlag(true).changeRate(new java.math.BigDecimal("1")).status(0).remark("示ä¾ï¼ä¸»åä½").build(), yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/unit/vo/MdmUnitMeasureExcelVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package cn.iocoder.yudao.module.mdm.controller.admin.unit.vo; import cn.idev.excel.annotation.ExcelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * MDM 计éåä½å¯¼åº Excel VO * * @author è¶ çº§ç®¡çå */ @Data public class MdmUnitMeasureExcelVO { @ExcelProperty("åä½ç¼ç ") private String code; @ExcelProperty("åä½åç§°") private String name; @ExcelProperty("æ¯å¦ä¸»åä½") private Boolean primaryFlag; @ExcelProperty("主åä½ç¼ç ") private String primaryCode; @ExcelProperty("ä¸ä¸»å使¢ç®æ¯ä¾") private BigDecimal changeRate; @ExcelProperty("ç¶æ") private Integer status; @ExcelProperty("夿³¨") private String remark; @ExcelProperty("å建æ¶é´") private LocalDateTime createTime; } yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
@@ -15,7 +15,6 @@ import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemBatchConfigDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; import cn.iocoder.yudao.module.mdm.dal.mysql.category.MdmItemCategoryMapper; import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemBatchConfigMapper; import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemMapper; import cn.iocoder.yudao.module.mdm.dal.mysql.unit.MdmUnitMeasureMapper; @@ -65,9 +64,6 @@ private MesMdItemApi mesMdItemApi; @Resource private MdmItemBatchConfigMapper itemBatchConfigMapper; @Resource private MdmItemCategoryMapper itemCategoryMapper; @Resource private MdmUnitMeasureMapper unitMeasureMapper; @@ -443,11 +439,13 @@ .createList(new ArrayList<>()).updateList(new ArrayList<>()) .failureList(new LinkedHashMap<>()).build(); // 1. é¢çï¼åç±»ç¼ç -> IDãåä½ç¼ç -> ID // 1. é¢çï¼åç±»ç¼ç -> IDï¼MES ç©æåç±»ï¼ä¸ç©æè¡¨åä¸ææ°æ®æºä¸è´ï¼ãåä½ç¼ç -> ID Map<String, Long> categoryCodeIdMap = new HashMap<>(); for (MdmItemCategoryDO category : itemCategoryMapper.selectList()) { if (category.getCode() != null) { categoryCodeIdMap.put(category.getCode(), category.getId()); for (String categoryCode : importList.stream() .map(MdmItemImportExcelVO::getCategoryCode).filter(StrUtil::isNotBlank).distinct().toList()) { CommonResult<MesMdItemTypeRespDTO> categoryResult = mesMdItemTypeApi.getItemTypeByCode(categoryCode); if (categoryResult != null && categoryResult.getData() != null) { categoryCodeIdMap.put(categoryCode, categoryResult.getData().getId()); } } Map<String, Long> unitCodeIdMap = new HashMap<>(); yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/MesMdItemTypeController.java
@@ -1,9 +1,11 @@ package cn.iocoder.yudao.module.mes.controller.admin.md.item; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeExcelVO; import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeImportExcelVO; import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeImportRespVO; import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type.MesMdItemTypeListReqVO; @@ -24,9 +26,13 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @@ -91,8 +97,57 @@ .setItemOrProduct(itemType.getItemOrProduct()))); } @GetMapping("/export-excel") @Operation(summary = "导åºç©æäº§ååç±» Excel") @PreAuthorize("@ss.hasPermission('mes:md-item-type:export')") @ApiAccessLog(operateType = EXPORT) public void exportItemTypeExcel(@Valid MesMdItemTypeListReqVO listReqVO, HttpServletResponse response) throws IOException { List<MesMdItemTypeDO> list = itemTypeService.getItemTypeList(listReqVO); // å ¨éåç±»ï¼ç¨äºè§£æä¸çº§åç±»ï¼ç¶åç±»å¯è½ä¸å¨çéç»æå ï¼ Map<Long, String> parentCodeMap = new HashMap<>(); Map<Long, String> parentNameMap = new HashMap<>(); for (MesMdItemTypeDO type : itemTypeService.getItemTypeList(new MesMdItemTypeListReqVO())) { parentCodeMap.put(type.getId(), type.getCode()); parentNameMap.put(type.getId(), type.getName()); } // ç»è£ å¯¼åº VOï¼è¡¥é½ä¸çº§åç±»ç¼ç /åç§°ãç©æäº§å䏿æ è¯ï¼ List<MesMdItemTypeExcelVO> excelList = new ArrayList<>(); for (MesMdItemTypeDO type : list) { MesMdItemTypeExcelVO excelVO = BeanUtils.toBean(type, MesMdItemTypeExcelVO.class); if (type.getParentId() != null && !MesMdItemTypeDO.PARENT_ID_ROOT.equals(type.getParentId())) { excelVO.setParentCode(parentCodeMap.get(type.getParentId())); excelVO.setParentName(parentNameMap.get(type.getParentId())); } excelVO.setItemOrProduct(convertItemOrProductToText(type.getItemOrProduct())); excelList.add(excelVO); } // å¯¼åº Excel ExcelUtils.write(response, "ç©æåç±»æ°æ®.xls", "ç©æåç±»", MesMdItemTypeExcelVO.class, excelList); } /** * å°ç©æ/äº§åæ è¯è½¬æ¢ä¸ºä¸æåç§° * * @param itemOrProduct åå ¸å¼ï¼ITEM=ç©æï¼PRODUCT=产å * @return 䏿åç§° */ private String convertItemOrProductToText(String itemOrProduct) { if (itemOrProduct == null) { return null; } if ("ITEM".equals(itemOrProduct)) { return "ç©æ"; } if ("PRODUCT".equals(itemOrProduct)) { return "产å"; } return itemOrProduct; } @GetMapping("/get-import-template") @Operation(summary = "è·å¾å¯¼å ¥ç©æäº§åå类模æ¿") @PreAuthorize("@ss.hasPermission('mes:md-item-type:import')") public void importTemplate(HttpServletResponse response) throws IOException { List<MesMdItemTypeImportExcelVO> list = Arrays.asList( MesMdItemTypeImportExcelVO.builder().code("RAW").name("åææ").itemOrProduct("ITEM").sort(1).status(0).remark("示ä¾ï¼é¡¶çº§åç±»").build(), yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/type/MesMdItemTypeExcelVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.type; import cn.idev.excel.annotation.ExcelProperty; import lombok.Data; /** * MES ç©æäº§ååç±»å¯¼åº Excel VO * * @author è¶ çº§ç®¡çå */ @Data public class MesMdItemTypeExcelVO { @ExcelProperty("åç±»ç¼ç ") private String code; @ExcelProperty("åç±»åç§°") private String name; @ExcelProperty("ä¸çº§åç±»ç¼ç ") private String parentCode; @ExcelProperty("ä¸çº§åç±»åç§°") private String parentName; @ExcelProperty("ç©æ/产å") private String itemOrProduct; @ExcelProperty("æåº") private Integer sort; @ExcelProperty("ç¶æ") private Integer status; @ExcelProperty("夿³¨") private String remark; }