src/main/java/com/ruoyi/productionPlan/controller/ProductionPlanController.java
@@ -1,18 +1,21 @@ package com.ruoyi.productionPlan.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.productionPlan.dto.ProductionPlanDto; import com.ruoyi.productionPlan.dto.ProductionPlanImportDto; import com.ruoyi.productionPlan.dto.ProductionPlanSummaryDto; import com.ruoyi.productionPlan.service.ProductionPlanService; import com.ruoyi.staff.dto.StaffLeaveDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -67,4 +70,28 @@ List<ProductionPlanSummaryDto> list = productionPlanService.summaryByProductType(query); return AjaxResult.success(list); } @GetMapping("/downloadTemplate") @Log(title = "ä¸è½½ä¸»ç产计åå¯¼å ¥æ¨¡æ¿", businessType = BusinessType.EXPORT) @ApiOperation("ä¸è½½ä¸»ç产计åå¯¼å ¥æ¨¡æ¿") public void importTemplate(HttpServletResponse response) { ExcelUtil<ProductionPlanImportDto> excelUtil = new ExcelUtil<>(ProductionPlanImportDto.class); excelUtil.importTemplateExcel(response, "主ç产计åå¯¼å ¥æ¨¡æ¿"); } @PostMapping("/import") @ApiOperation("主çäº§è®¡åæ°æ®å¯¼å ¥") @Log(title = "主çäº§è®¡åæ°æ®å¯¼å ¥", businessType = BusinessType.IMPORT) public AjaxResult importProdData(@RequestParam("file") MultipartFile file) { productionPlanService.importProdData(file); return AjaxResult.success("å¯¼å ¥æå"); } @PostMapping("/export") @ApiOperation("主çäº§è®¡åæ°æ®å¯¼åº") @Log(title = "主çäº§è®¡åæ°æ®å¯¼åº", businessType = BusinessType.EXPORT) public void exportProdData(HttpServletResponse response, @RequestBody(required = false) List<Long> ids) { productionPlanService.exportProdData(response, ids); } } src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanImportDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,179 @@ package com.ruoyi.productionPlan.dto; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * <br> * éå®çäº§éæ± Excelå¯¼å ¥å¯¼åºDTO * </br> * * @author deslrey * @version 1.0 * @since 2026/03/11 11:28 */ @Data @ApiModel("éå®çäº§éæ± Excelå¯¼å ¥å¯¼åºDTO") public class ProductionPlanImportDto { /** * ç³è¯·åç¼å· */ @ApiModelProperty("ç³è¯·åç¼å·") @Excel(name = "ç³è¯·åç¼å·") private String applyNo; /** * 客æ·åç§° */ @ApiModelProperty("客æ·åç§°") @Excel(name = "客æ·åç§°") private String customerName; /** * ç©æç¼ç */ @ApiModelProperty("ç©æç¼ç ") @Excel(name = "ç©æç¼ç ") private String materialCode; /** * 产ååç§° */ @ApiModelProperty("产ååç§°") @Excel(name = "产ååç§°") private String productName; /** * 产åè§æ ¼ */ @ApiModelProperty("产åè§æ ¼") @Excel(name = "产åè§æ ¼") private String productSpec; /** * é¿ */ @ApiModelProperty("é¿") @Excel(name = "é¿") private Integer length; /** * 宽 */ @ApiModelProperty("宽") @Excel(name = "宽") private Integer width; /** * é« */ @ApiModelProperty("é«") @Excel(name = "é«") private Integer height; /** * åæ° */ @ApiModelProperty("åæ°") @Excel(name = "åæ°") private Integer quantity; /** * æ¹æ° */ @ApiModelProperty("æ¹æ°") @Excel(name = "æ¹æ°") private BigDecimal volume; /** * 强度 */ @ApiModelProperty("强度") @Excel(name = "强度") private String strength; /** * å¼å§æ¥æ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("å¼å§æ¥æ") @Excel(name = "å¼å§æ¥æ", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startDate; /** * ç»ææ¥æ */ @ApiModelProperty("ç»ææ¥æ") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Excel(name = "ç»ææ¥æ", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endDate; /** * æäº¤äºº */ @ApiModelProperty("æäº¤äºº") @Excel(name = "æäº¤äºº") private String submitter; /** * æäº¤äººç»ç» */ @ApiModelProperty("æäº¤äººç»ç»") @Excel(name = "æäº¤äººç»ç»") private String submitOrg; /** * 夿³¨1 */ @ApiModelProperty("夿³¨1") @Excel(name = "夿³¨1") private String remarkOne; /** * 夿³¨2 */ @ApiModelProperty("夿³¨2") @Excel(name = "夿³¨2") private String remarkTwo; /** * å建人 */ @ApiModelProperty("å建人") @Excel(name = "å建人", type = Excel.Type.EXPORT) private String creatorName; /** * ä¿®æ¹äºº */ @ApiModelProperty("ä¿®æ¹äºº") @Excel(name = "ä¿®æ¹äºº", type = Excel.Type.EXPORT) private String modifierName; /** * æ°æ®åæ¥ç±»åï¼1=æå¨ 2=宿¶ä»»å¡ */ @ApiModelProperty("æ°æ®åæ¥ç±»åï¼1=æå¨ 2=宿¶ä»»å¡") private Integer dataSyncType; /** * æ°æ®æ¥æºç±»åï¼1=忥 2=æ°å¢ */ @ApiModelProperty("æ°æ®æ¥æºç±»åï¼1=忥 2=æ°å¢") private Integer dataSourceType; /** * ä¸åæ°é */ @ApiModelProperty("ä¸åæ°é") @Excel(name = "ä¸åæ°é", type = Excel.Type.EXPORT) private BigDecimal assignedQuantity; } src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -45,66 +46,77 @@ * ç³è¯·åç¼å· */ @ApiModelProperty("ç³è¯·åç¼å·") @Excel(name = "ç³è¯·åç¼å·") private String applyNo; /** * 客æ·åç§° */ @ApiModelProperty("客æ·åç§°") @Excel(name = "客æ·åç§°") private String customerName; /** * ç©æç¼ç */ @ApiModelProperty("ç©æç¼ç ") @Excel(name = "ç©æç¼ç ") private String materialCode; /** * 产ååç§° */ @ApiModelProperty("产ååç§°") @Excel(name = "产ååç§°") private String productName; /** * 产åè§æ ¼ */ @ApiModelProperty("产åè§æ ¼") @Excel(name = "产åè§æ ¼") private String productSpec; /** * é¿ */ @ApiModelProperty("é¿") @Excel(name = "é¿") private Integer length; /** * 宽 */ @ApiModelProperty("宽") @Excel(name = "宽") private Integer width; /** * é« */ @ApiModelProperty("é«") @Excel(name = "é«") private Integer height; /** * åæ° */ @ApiModelProperty("åæ°") @Excel(name = "åæ°") private Integer quantity; /** * æ¹æ° */ @ApiModelProperty("æ¹æ°") @Excel(name = "æ¹æ°") private BigDecimal volume; /** * 强度 */ @ApiModelProperty("强度") @Excel(name = "强度") private String strength; /** @@ -112,6 +124,7 @@ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("å¼å§æ¥æ") @Excel(name = "å¼å§æ¥æ", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startDate; /** @@ -119,42 +132,49 @@ */ @ApiModelProperty("ç»ææ¥æ") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Excel(name = "ç»ææ¥æ", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endDate; /** * æäº¤äºº */ @ApiModelProperty("æäº¤äºº") @Excel(name = "æäº¤äºº") private String submitter; /** * æäº¤äººç»ç» */ @ApiModelProperty("æäº¤äººç»ç»") @Excel(name = "æäº¤äººç»ç»") private String submitOrg; /** * 夿³¨1 */ @ApiModelProperty("夿³¨1") @Excel(name = "夿³¨1") private String remarkOne; /** * 夿³¨2 */ @ApiModelProperty("夿³¨2") @Excel(name = "夿³¨2") private String remarkTwo; /** * å建人 */ @ApiModelProperty("å建人") @Excel(name = "å建人") private String creatorName; /** * ä¿®æ¹äºº */ @ApiModelProperty("ä¿®æ¹äºº") @Excel(name = "ä¿®æ¹äºº") private String modifierName; /** @@ -204,5 +224,6 @@ private Integer totalCount; @ApiModelProperty(value = "ä¸åæ°é") @Excel(name = "ä¸åæ°é") private BigDecimal assignedQuantity; } src/main/java/com/ruoyi/productionPlan/service/ProductionPlanService.java
@@ -6,7 +6,9 @@ import com.ruoyi.productionPlan.dto.ProductionPlanDto; import com.ruoyi.productionPlan.dto.ProductionPlanSummaryDto; import com.ruoyi.productionPlan.pojo.ProductionPlan; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -31,7 +33,7 @@ */ void syncProdDataJob(); /** /** * åå¹¶ç产计å */ boolean combine(ProductionPlanDto productionPlanDto); @@ -45,4 +47,14 @@ * æç §äº§åç±»å«æ±æ»ç»è®¡éæ±é */ List<ProductionPlanSummaryDto> summaryByProductType(ProductionPlanSummaryDto query); /** * å¯¼å ¥æ°æ® */ void importProdData(MultipartFile file); /** * å¯¼åºæ°æ® */ void exportProdData(HttpServletResponse response, List<Long> ids); } src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -7,13 +7,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.pojo.Product; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.config.AliDingConfig; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.service.ProductOrderService; import com.ruoyi.productionPlan.dto.ProductionPlanDto; import com.ruoyi.productionPlan.dto.ProductionPlanImportDto; import com.ruoyi.productionPlan.dto.ProductionPlanSummaryDto; import com.ruoyi.productionPlan.mapper.ProductionPlanMapper; import com.ruoyi.productionPlan.pojo.ProductionPlan; @@ -22,7 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.time.Instant; @@ -425,4 +430,56 @@ public List<ProductionPlanSummaryDto> summaryByProductType(ProductionPlanSummaryDto query) { return baseMapper.selectSummaryByProductType(query); } @Override @Transactional(rollbackFor = Exception.class) public void importProdData(MultipartFile file) { if (file == null || file.isEmpty()) { throw new ServiceException("å¯¼å ¥æ°æ®ä¸è½ä¸ºç©º"); } ExcelUtil<ProductionPlanImportDto> excelUtil = new ExcelUtil<>(ProductionPlanImportDto.class); List<ProductionPlanImportDto> list; try { list = excelUtil.importExcel(file.getInputStream()); } catch (Exception e) { log.error("çäº§éæ±Excelå¯¼å ¥å¤±è´¥", e); throw new ServiceException("Excelè§£æå¤±è´¥"); } if (list == null || list.isEmpty()) { throw new ServiceException("Excelæ²¡ææ°æ®"); } List<ProductionPlan> entityList = new ArrayList<>(list.size()); ProductionPlan entity; for (ProductionPlanImportDto dto : list) { entity = new ProductionPlan(); BeanUtils.copyProperties(dto, entity); entity.setCreateTime(LocalDateTime.now()); entity.setUpdateTime(LocalDateTime.now()); entity.setDataSourceType(2); entity.setDataSyncType(1); entityList.add(entity); } this.saveBatch(entityList); } @Override public void exportProdData(HttpServletResponse response, List<Long> ids) { List<ProductionPlan> list; if (ids != null && !ids.isEmpty()) { list = baseMapper.selectBatchIds(ids); } else { list = baseMapper.selectList(null); } List<ProductionPlanImportDto> exportList = new ArrayList<>(); for (ProductionPlan entity : list) { ProductionPlanImportDto dto = new ProductionPlanImportDto(); BeanUtils.copyProperties(entity, dto); exportList.add(dto); } ExcelUtil<ProductionPlanImportDto> util = new ExcelUtil<>(ProductionPlanImportDto.class); util.exportExcel(response, exportList, "éå®çäº§éæ±æ°æ®"); } }