mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-14 05:42:06 +08:00
1、新增贴皮管理导出明细、下载导入模板、批量导入、保存瑕疵接口;2、整理对应参数校验国际化;
This commit is contained in:
+3
-1
@@ -1,5 +1,6 @@
|
|||||||
package com.cf.imes.framework.excel.core.convert;
|
package com.cf.imes.framework.excel.core.convert;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.excel.converters.Converter;
|
import com.alibaba.excel.converters.Converter;
|
||||||
import com.alibaba.excel.converters.ReadConverterContext;
|
import com.alibaba.excel.converters.ReadConverterContext;
|
||||||
import com.alibaba.excel.converters.WriteConverterContext;
|
import com.alibaba.excel.converters.WriteConverterContext;
|
||||||
@@ -61,7 +62,8 @@ public class EnumConvert implements Converter<Integer> {
|
|||||||
if (enumClass != null) {
|
if (enumClass != null) {
|
||||||
for (Object e : enumClass.getEnumConstants()) {
|
for (Object e : enumClass.getEnumConstants()) {
|
||||||
BaseEnum baseEnum = (BaseEnum) e;
|
BaseEnum baseEnum = (BaseEnum) e;
|
||||||
if (baseEnum.getDesc().equals(desc)) {
|
String i18nDesc = ResourceBundleUtils.getMessage(ResourceBundleConstants.MESSAGE_ENUM_PATH, baseEnum.getDesc(), baseEnum.getDesc(), LocaleContextHolder.getLocale(), null);
|
||||||
|
if (ObjectUtil.equals(desc, i18nDesc)) {
|
||||||
return baseEnum.getCode();
|
return baseEnum.getCode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -172,4 +172,9 @@ public class ErrorCodeConstants {
|
|||||||
//=========== 贴皮管理 1-003-009-000 ============
|
//=========== 贴皮管理 1-003-009-000 ============
|
||||||
public static final ErrorCode VENEER_NOT_EXIST = new ErrorCode(1_003_009_000, "veneer.not.exist");
|
public static final ErrorCode VENEER_NOT_EXIST = new ErrorCode(1_003_009_000, "veneer.not.exist");
|
||||||
public static final ErrorCode VENEER_NO_EXIST = new ErrorCode(1_003_009_001, "veneer.no.exist");
|
public static final ErrorCode VENEER_NO_EXIST = new ErrorCode(1_003_009_001, "veneer.no.exist");
|
||||||
|
public static final ErrorCode VENEER_IMPORT_REQUIRED_LACK = new ErrorCode(1_003_009_002, "veneer.import.required.lack");
|
||||||
|
public static final ErrorCode VENEER_IMPORT_LENGTH_ERROR = new ErrorCode(1_003_009_003, "veneer.import.length.error");
|
||||||
|
public static final ErrorCode VENEER_IMPORT_DIGITAL_TYPE_ERROR = new ErrorCode(1_003_009_004, "veneer.import.digital.type.error");
|
||||||
|
public static final ErrorCode VENEER_IMPORT_POSITIVE_NUMBER_ERROR = new ErrorCode(1_003_009_005, "veneer.import.positive.number.error");
|
||||||
|
public static final ErrorCode VENEER_IMPORT_NUMBER_LENGTH_ERROR = new ErrorCode(1_003_009_006, "veneer.import.number.length.error");
|
||||||
}
|
}
|
||||||
|
|||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
package com.cf.imes.module.executor.constants.file;
|
||||||
|
|
||||||
|
import org.springframework.boot.system.ApplicationHome;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模板文件路径 常量类
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/1/5 14:35
|
||||||
|
*/
|
||||||
|
public final class TemplateFilePathConstants {
|
||||||
|
private TemplateFilePathConstants() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String ROOT_PATH;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ApplicationHome home = new ApplicationHome(TemplateFilePathConstants.class);
|
||||||
|
File jarDir = home.getDir(); // jar 所在目录
|
||||||
|
ROOT_PATH = new File(jarDir, "type").getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据语种获取贴皮导入模板
|
||||||
|
*
|
||||||
|
* @param language 语种
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getVeneerImportTemplatePath(String language) {
|
||||||
|
return ROOT_PATH + File.separator + "veneer" + File.separator + language;
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
/**
|
||||||
|
* executor 常量
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.cf.imes.module.executor.constants;
|
||||||
+46
@@ -1,16 +1,26 @@
|
|||||||
package com.cf.imes.module.executor.controller.admin.veneer;
|
package com.cf.imes.module.executor.controller.admin.veneer;
|
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcelFactory;
|
||||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
|
import com.cf.imes.framework.common.pojo.PageParam;
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
|
import com.cf.imes.framework.excel.core.util.ExcelUtils;
|
||||||
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
||||||
|
import com.cf.imes.module.executor.constants.file.TemplateFilePathConstants;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerDefectSaveReqVO;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerImportExcelVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO;
|
||||||
|
import com.cf.imes.module.executor.service.veneer.VeneerExcelListener;
|
||||||
import com.cf.imes.module.executor.service.veneer.VeneerService;
|
import com.cf.imes.module.executor.service.veneer.VeneerService;
|
||||||
|
import com.cf.imes.module.executor.util.file.FileHelperUtil;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -24,9 +34,12 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static com.cf.imes.framework.common.pojo.CommonResult.success;
|
import static com.cf.imes.framework.common.pojo.CommonResult.success;
|
||||||
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.CREATE;
|
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.CREATE;
|
||||||
|
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
|
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.IMPORT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -49,6 +62,33 @@ public class VeneerController {
|
|||||||
return success(veneerService.getPage(pageReqVO));
|
return success(veneerService.getPage(pageReqVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export")
|
||||||
|
@Operation(summary = "导出贴皮明细")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportSalesDetailsPage(@Valid VeneerPageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<VeneerRespVO> list = veneerService.getPage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "贴皮明细.xls", "数据", VeneerRespVO.class, list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/import/template")
|
||||||
|
@Operation(summary = "下载贴皮导入模版")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void importTemplate(HttpServletResponse response) {
|
||||||
|
String veneerImportTemplatePath = TemplateFilePathConstants.getVeneerImportTemplatePath(LocaleContextHolder.getLocale().getLanguage());
|
||||||
|
FileHelperUtil.getFirstFile(veneerImportTemplatePath, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/import")
|
||||||
|
@Operation(summary = "导入贴皮")
|
||||||
|
@OperateLog(type = IMPORT)
|
||||||
|
public void importExcel(@RequestPart("file") MultipartFile file) throws IOException {
|
||||||
|
VeneerExcelListener listener = new VeneerExcelListener(veneerService);
|
||||||
|
EasyExcelFactory.read(file.getInputStream(), VeneerImportExcelVO.class, listener).headRowNumber(1).sheet().doRead();
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/{id}")
|
@GetMapping("/{id}")
|
||||||
@Operation(summary = "根据id获取贴皮")
|
@Operation(summary = "根据id获取贴皮")
|
||||||
public CommonResult<VeneerRespVO> getVeneer(@PathVariable Long id) {
|
public CommonResult<VeneerRespVO> getVeneer(@PathVariable Long id) {
|
||||||
@@ -79,4 +119,10 @@ public class VeneerController {
|
|||||||
public CommonResult<Long> uploadVeneerPic(@RequestPart(value = "file") MultipartFile file) throws IOException {
|
public CommonResult<Long> uploadVeneerPic(@RequestPart(value = "file") MultipartFile file) throws IOException {
|
||||||
return success(veneerService.uploadPic(file));
|
return success(veneerService.uploadPic(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/defect")
|
||||||
|
@Operation(summary = "保存瑕疵数据")
|
||||||
|
public CommonResult<Boolean> saveDefect(@Valid @RequestBody VeneerDefectSaveReqVO reqVO) {
|
||||||
|
return success(veneerService.saveDefect(reqVO) == 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
package com.cf.imes.module.executor.controller.admin.veneer.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/1/6 15:57
|
||||||
|
*/
|
||||||
|
@Schema(description = "生产管理 - 贴皮管理 保存瑕疵 Request VO")
|
||||||
|
@Data
|
||||||
|
public class VeneerDefectSaveReqVO {
|
||||||
|
@Schema( description = "贴皮id")
|
||||||
|
@NotNull(message = "{veneer.defect.save.id.not.null}")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "瑕疵数据")
|
||||||
|
private String defectData;
|
||||||
|
}
|
||||||
+86
@@ -0,0 +1,86 @@
|
|||||||
|
package com.cf.imes.module.executor.controller.admin.veneer.vo;
|
||||||
|
|
||||||
|
import cn.hutool.core.text.CharSequenceUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.cf.imes.framework.excel.core.annotations.EnumFormat;
|
||||||
|
import com.cf.imes.framework.excel.core.convert.EnumConvert;
|
||||||
|
import com.cf.imes.module.executor.enums.veneer.VeneerProductLevelEnum;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 贴皮 Excel导入 VO
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/1/5 15:28
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
|
||||||
|
public class VeneerImportExcelVO {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private Long organId;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 0)
|
||||||
|
private String veneerNo;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 1)
|
||||||
|
private String batchNo;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 2)
|
||||||
|
private String classificationName;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 3)
|
||||||
|
private String veneerName;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 4, converter = EnumConvert.class)
|
||||||
|
@EnumFormat(value = VeneerProductLevelEnum.class)
|
||||||
|
private Integer productLevel;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 5)
|
||||||
|
private String color;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 6)
|
||||||
|
private String material;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 7)
|
||||||
|
private String length;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 8)
|
||||||
|
private String width;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 9)
|
||||||
|
private String thickness;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 10)
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 11)
|
||||||
|
private String spec;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 12)
|
||||||
|
private String factory;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 13)
|
||||||
|
private String num;
|
||||||
|
|
||||||
|
@ExcelProperty(index = 14)
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验必填
|
||||||
|
*
|
||||||
|
* @return true:校验成功、false:校验失败(有必填项未填写)
|
||||||
|
*/
|
||||||
|
public boolean validRequired() {
|
||||||
|
return CharSequenceUtil.isAllNotEmpty(veneerNo, classificationName, veneerName, length, width, thickness, num) || ObjectUtil.isNull(productLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
-11
@@ -7,7 +7,7 @@ import com.cf.imes.framework.excel.core.convert.EnumBoolValConvert;
|
|||||||
import com.cf.imes.framework.excel.core.convert.EnumConvert;
|
import com.cf.imes.framework.excel.core.convert.EnumConvert;
|
||||||
import com.cf.imes.framework.excel.core.enums.WhetherEnum;
|
import com.cf.imes.framework.excel.core.enums.WhetherEnum;
|
||||||
import com.cf.imes.module.executor.enums.veneer.VeneerProductLevelEnum;
|
import com.cf.imes.module.executor.enums.veneer.VeneerProductLevelEnum;
|
||||||
import com.cf.imes.module.executor.enums.veneer.VeneerStatusEnum;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@ import java.math.BigDecimal;
|
|||||||
@Schema(description = "生产管理 - 贴皮管理分页 Response VO")
|
@Schema(description = "生产管理 - 贴皮管理分页 Response VO")
|
||||||
@Data
|
@Data
|
||||||
@ExcelIgnoreUnannotated
|
@ExcelIgnoreUnannotated
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
public class VeneerRespVO {
|
public class VeneerRespVO {
|
||||||
@Schema(description = "贴皮id")
|
@Schema(description = "贴皮id")
|
||||||
private Long id;
|
private Long id;
|
||||||
@@ -30,6 +31,10 @@ public class VeneerRespVO {
|
|||||||
@ExcelProperty("veneer.export.head.veneerNo")
|
@ExcelProperty("veneer.export.head.veneerNo")
|
||||||
private String veneerNo;
|
private String veneerNo;
|
||||||
|
|
||||||
|
@Schema(description = "批次号")
|
||||||
|
@ExcelProperty("veneer.export.head.batchNo")
|
||||||
|
private String batchNo;
|
||||||
|
|
||||||
@Schema(description = "分类名称")
|
@Schema(description = "分类名称")
|
||||||
@ExcelProperty("veneer.export.head.classificationName")
|
@ExcelProperty("veneer.export.head.classificationName")
|
||||||
private String classificationName;
|
private String classificationName;
|
||||||
@@ -43,10 +48,6 @@ public class VeneerRespVO {
|
|||||||
@EnumFormat(value = VeneerProductLevelEnum.class)
|
@EnumFormat(value = VeneerProductLevelEnum.class)
|
||||||
private Integer productLevel;
|
private Integer productLevel;
|
||||||
|
|
||||||
@Schema(description = "批次号")
|
|
||||||
@ExcelProperty("veneer.export.head.batchNo")
|
|
||||||
private String batchNo;
|
|
||||||
|
|
||||||
@Schema(description = "颜色")
|
@Schema(description = "颜色")
|
||||||
@ExcelProperty("veneer.export.head.color")
|
@ExcelProperty("veneer.export.head.color")
|
||||||
private String color;
|
private String color;
|
||||||
@@ -55,14 +56,14 @@ public class VeneerRespVO {
|
|||||||
@ExcelProperty("veneer.export.head.material")
|
@ExcelProperty("veneer.export.head.material")
|
||||||
private String material;
|
private String material;
|
||||||
|
|
||||||
@Schema(description = "宽")
|
|
||||||
@ExcelProperty("veneer.export.head.width")
|
|
||||||
private BigDecimal width;
|
|
||||||
|
|
||||||
@Schema(description = "长")
|
@Schema(description = "长")
|
||||||
@ExcelProperty("veneer.export.head.length")
|
@ExcelProperty("veneer.export.head.length")
|
||||||
private BigDecimal length;
|
private BigDecimal length;
|
||||||
|
|
||||||
|
@Schema(description = "宽")
|
||||||
|
@ExcelProperty("veneer.export.head.width")
|
||||||
|
private BigDecimal width;
|
||||||
|
|
||||||
@Schema(description = "厚")
|
@Schema(description = "厚")
|
||||||
@ExcelProperty("veneer.export.head.thickness")
|
@ExcelProperty("veneer.export.head.thickness")
|
||||||
private BigDecimal thickness;
|
private BigDecimal thickness;
|
||||||
@@ -93,7 +94,8 @@ public class VeneerRespVO {
|
|||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
@Schema(description = "状态,0:未使用、1:已使用")
|
@Schema(description = "状态,0:未使用、1:已使用")
|
||||||
@ExcelProperty(value = "veneer.export.head.status", converter = EnumConvert.class)
|
|
||||||
@EnumFormat(value = VeneerStatusEnum.class)
|
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "瑕疵数据")
|
||||||
|
private String defectData;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -150,4 +150,9 @@ public class VeneerDO extends BaseDO {
|
|||||||
* 贴皮文件ID
|
* 贴皮文件ID
|
||||||
*/
|
*/
|
||||||
private Long fileId;
|
private Long fileId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 瑕疵数据
|
||||||
|
*/
|
||||||
|
private String defectData;
|
||||||
}
|
}
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
package com.cf.imes.module.executor.dal.mysql.veneer;
|
||||||
|
|
||||||
|
import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 贴皮 批量Mapper
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/1/6 14:38
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface VeneerBatchMapper extends BaseBatchMapper<VeneerDO> {
|
||||||
|
}
|
||||||
+4
@@ -42,6 +42,10 @@ public interface VeneerMapper extends BaseMapperX<VeneerDO> {
|
|||||||
.eqIfPresent(VeneerDO::getSourcePlanNo, reqVO.getSourcePlanNo())
|
.eqIfPresent(VeneerDO::getSourcePlanNo, reqVO.getSourcePlanNo())
|
||||||
.eqIfPresent(VeneerDO::getPlanNo, reqVO.getPlanNo())
|
.eqIfPresent(VeneerDO::getPlanNo, reqVO.getPlanNo())
|
||||||
.eqIfPresent(VeneerDO::getStatus, reqVO.getStatus())
|
.eqIfPresent(VeneerDO::getStatus, reqVO.getStatus())
|
||||||
|
// 查询字段
|
||||||
|
.select(VeneerDO::getId, VeneerDO::getVeneerNo, VeneerDO::getBatchNo, VeneerDO::getClassificationName, VeneerDO::getVeneerName,
|
||||||
|
VeneerDO::getProductLevel, VeneerDO::getColor, VeneerDO::getMaterial, VeneerDO::getLength, VeneerDO::getWidth, VeneerDO::getThickness,
|
||||||
|
VeneerDO::getBrand, VeneerDO::getSpec, VeneerDO::getFactory, VeneerDO::getNum, VeneerDO::getDefect, VeneerDO::getRemark)
|
||||||
.orderByDesc(VeneerDO::getId));
|
.orderByDesc(VeneerDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -16,9 +16,9 @@ import java.util.Arrays;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
public enum VeneerProductLevelEnum implements IntArrayValuable, BaseEnum {
|
public enum VeneerProductLevelEnum implements IntArrayValuable, BaseEnum {
|
||||||
A(0,"A类"),
|
A(0,"veneer.product.level.A"),
|
||||||
B(1,"B类"),
|
B(1,"veneer.product.level.B"),
|
||||||
C(2,"C类");
|
C(2,"veneer.product.level.C");
|
||||||
|
|
||||||
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(VeneerProductLevelEnum::getCode).toArray();
|
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(VeneerProductLevelEnum::getCode).toArray();
|
||||||
|
|
||||||
|
|||||||
+252
@@ -0,0 +1,252 @@
|
|||||||
|
package com.cf.imes.module.executor.service.veneer;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.alibaba.excel.context.AnalysisContext;
|
||||||
|
import com.alibaba.excel.event.AnalysisEventListener;
|
||||||
|
import com.alibaba.excel.metadata.CellExtra;
|
||||||
|
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
|
||||||
|
import com.alibaba.excel.util.ListUtils;
|
||||||
|
import com.cf.imes.framework.common.exception.ServiceException;
|
||||||
|
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerImportExcelVO;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO;
|
||||||
|
import com.cf.imes.module.executor.enums.veneer.VeneerStatusEnum;
|
||||||
|
import com.cf.imes.module.executor.util.fileConversion.admin.ToolUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_IMPORT_DIGITAL_TYPE_ERROR;
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_IMPORT_LENGTH_ERROR;
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_IMPORT_NUMBER_LENGTH_ERROR;
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_IMPORT_POSITIVE_NUMBER_ERROR;
|
||||||
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_IMPORT_REQUIRED_LACK;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 贴皮excel导入 解析器
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/1/5 18:18
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class VeneerExcelListener<T> extends AnalysisEventListener<VeneerImportExcelVO> {
|
||||||
|
/**
|
||||||
|
* 每500条操作入库一次
|
||||||
|
*/
|
||||||
|
private static final int BATCH_COUNT = 500;
|
||||||
|
private List<VeneerImportExcelVO> cachedInsertDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||||
|
private List<VeneerImportExcelVO> cachedUpdateDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||||
|
|
||||||
|
private VeneerService veneerService;
|
||||||
|
|
||||||
|
// 贴皮编号:id
|
||||||
|
private Map<String, Long> orgVeneerNoMap;
|
||||||
|
|
||||||
|
private Map<Integer, String> headMap;
|
||||||
|
|
||||||
|
private Long organId;
|
||||||
|
|
||||||
|
public VeneerExcelListener(VeneerService veneerService) {
|
||||||
|
this.veneerService = veneerService;
|
||||||
|
// 查询机构下所有的贴皮编号
|
||||||
|
orgVeneerNoMap = veneerService.getOrgVeneerNo();
|
||||||
|
organId = SecurityFrameworkUtils.getUserOrganId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 每解析一行都会回调invoke()方法
|
||||||
|
*
|
||||||
|
* @param data 读取后的数据对象
|
||||||
|
* @param context 内容
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void invoke(VeneerImportExcelVO data, AnalysisContext context) {
|
||||||
|
// 获取行号,标题算一行+1
|
||||||
|
ReadRowHolder readRowHolder = context.readRowHolder();
|
||||||
|
int rowIndex = readRowHolder.getRowIndex() + 1;
|
||||||
|
|
||||||
|
// 必填属性校验
|
||||||
|
if (!data.validRequired()) {
|
||||||
|
throw new ServiceException(VENEER_IMPORT_REQUIRED_LACK, rowIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验贴皮是新增还是更新
|
||||||
|
String veneerNo = data.getVeneerNo();
|
||||||
|
Long existId = orgVeneerNoMap.get(veneerNo);
|
||||||
|
if (ObjectUtil.isNotNull(existId)) {
|
||||||
|
data.setId(existId);
|
||||||
|
// 累计更新列表
|
||||||
|
cachedUpdateDataList.add(data);
|
||||||
|
|
||||||
|
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||||
|
if (cachedUpdateDataList.size() >= BATCH_COUNT) {
|
||||||
|
updateData();
|
||||||
|
// 存储完成清理 list
|
||||||
|
cachedUpdateDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验属性长度
|
||||||
|
validFieldLength(headMap.get(0), veneerNo, 32, rowIndex);
|
||||||
|
validFieldLength(headMap.get(1), data.getBatchNo(), 32, rowIndex);
|
||||||
|
validFieldLength(headMap.get(3), data.getVeneerName(), 64, rowIndex);
|
||||||
|
validFieldLength(headMap.get(5), data.getColor(), 32, rowIndex);
|
||||||
|
validFieldLength(headMap.get(6), data.getMaterial(), 64, rowIndex);
|
||||||
|
validFieldLength(headMap.get(10), data.getBrand(), 64, rowIndex);
|
||||||
|
validFieldLength(headMap.get(11), data.getSpec(), 64, rowIndex);
|
||||||
|
validFieldLength(headMap.get(12), data.getFactory(), 128, rowIndex);
|
||||||
|
validFieldLength(headMap.get(14), data.getRemark(), 255, rowIndex);
|
||||||
|
|
||||||
|
// 校验类型
|
||||||
|
validPositiveFloatNumberSize(headMap.get(7), data.getLength(), Double.class, 5, 3, rowIndex);
|
||||||
|
validPositiveFloatNumberSize(headMap.get(8), data.getWidth(), Double.class, 5, 3, rowIndex);
|
||||||
|
validPositiveFloatNumberSize(headMap.get(9), data.getThickness(), Double.class, 5, 3, rowIndex);
|
||||||
|
validPositiveNumber(headMap.get(13), data.getNum(), rowIndex);
|
||||||
|
|
||||||
|
// 累计新增列表
|
||||||
|
cachedInsertDataList.add(data);
|
||||||
|
|
||||||
|
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||||
|
if (cachedInsertDataList.size() >= BATCH_COUNT) {
|
||||||
|
insertData();
|
||||||
|
// 存储完成清理 list
|
||||||
|
cachedInsertDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void extra(CellExtra extra, AnalysisContext context) {
|
||||||
|
super.extra(extra, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||||
|
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
|
||||||
|
insertData();
|
||||||
|
updateData();
|
||||||
|
log.debug("所有数据解析完成!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext(AnalysisContext context) {
|
||||||
|
return super.hasNext(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
|
||||||
|
this.headMap = headMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增贴皮
|
||||||
|
*/
|
||||||
|
private void insertData() {
|
||||||
|
log.debug("{}条数据,开始新增贴皮数据!", cachedInsertDataList.size());
|
||||||
|
List<VeneerDO> veneerDOS = BeanUtil.copyToList(cachedInsertDataList, VeneerDO.class);
|
||||||
|
for (VeneerDO veneerDO : veneerDOS) {
|
||||||
|
veneerDO.setOrganId(organId);
|
||||||
|
veneerDO.setDefect(false);
|
||||||
|
veneerDO.setRemain(false);
|
||||||
|
veneerDO.setStatus(VeneerStatusEnum.NOT_USE.getCode());
|
||||||
|
veneerDO.setDeleted(false);
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(cachedInsertDataList)) {
|
||||||
|
veneerService.batchInsert(veneerDOS);
|
||||||
|
}
|
||||||
|
log.debug("excel导入贴皮数据保存成功!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新贴皮
|
||||||
|
*/
|
||||||
|
private void updateData() {
|
||||||
|
log.debug("{}条数据,开始更新贴皮数据!", cachedUpdateDataList.size());
|
||||||
|
if (CollUtil.isNotEmpty(cachedUpdateDataList)) {
|
||||||
|
veneerService.batchUpdate(BeanUtil.copyToList(cachedUpdateDataList, VeneerDO.class));
|
||||||
|
}
|
||||||
|
log.debug("excel导入贴皮数据保存成功!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验长度
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @param val
|
||||||
|
* @param length
|
||||||
|
*/
|
||||||
|
private void validFieldLength(String key, String val, int length, int rowIndex) {
|
||||||
|
if (StringUtils.isNotEmpty(val) && length < val.length()) {
|
||||||
|
throw new ServiceException(VENEER_IMPORT_LENGTH_ERROR, rowIndex, key, length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查值大于0、数据浮点类型和长度
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @param value
|
||||||
|
* @param targetType
|
||||||
|
* @param length
|
||||||
|
* @param decimalLength
|
||||||
|
* @param rowIndex
|
||||||
|
*/
|
||||||
|
private void validPositiveFloatNumberSize(String key, String value, Class<?> targetType, Integer length, Integer decimalLength, int rowIndex) {
|
||||||
|
if (StringUtils.isNotEmpty(value)) {
|
||||||
|
if (Boolean.TRUE.equals(ToolUtil.convertToType(value, targetType))) {
|
||||||
|
if (Boolean.TRUE.equals(checkPositiveNumber(value))) {
|
||||||
|
if (!ToolUtil.checkPrecision(value, length, decimalLength)) {
|
||||||
|
throw new ServiceException(VENEER_IMPORT_NUMBER_LENGTH_ERROR, rowIndex, key, length, decimalLength);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServiceException(VENEER_IMPORT_POSITIVE_NUMBER_ERROR, rowIndex, key);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServiceException(VENEER_IMPORT_DIGITAL_TYPE_ERROR, rowIndex, key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查值大于0、integer类型
|
||||||
|
* @param key
|
||||||
|
* @param value
|
||||||
|
* @param rowIndex
|
||||||
|
*/
|
||||||
|
private void validPositiveNumber(String key, String value, int rowIndex) {
|
||||||
|
if (StringUtils.isNotEmpty(value)) {
|
||||||
|
if (Boolean.TRUE.equals(ToolUtil.convertToType(value, Integer.class))) {
|
||||||
|
if (Boolean.FALSE.equals(checkPositiveNumber(value))) {
|
||||||
|
throw new ServiceException(VENEER_IMPORT_POSITIVE_NUMBER_ERROR, rowIndex, key);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServiceException(VENEER_IMPORT_DIGITAL_TYPE_ERROR, rowIndex, key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否正数(不包含0)
|
||||||
|
*
|
||||||
|
* @param numberStr
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Boolean checkPositiveNumber(String numberStr) {
|
||||||
|
try {
|
||||||
|
double number = Double.parseDouble(numberStr);
|
||||||
|
// 进行正负判断
|
||||||
|
if (number > 0) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+33
@@ -1,12 +1,16 @@
|
|||||||
package com.cf.imes.module.executor.service.veneer;
|
package com.cf.imes.module.executor.service.veneer;
|
||||||
|
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerDefectSaveReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 贴皮管理 Service接口
|
* 贴皮管理 Service接口
|
||||||
@@ -63,4 +67,33 @@ public interface VeneerService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
VeneerRespVO get(Long id);
|
VeneerRespVO get(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取组织下所有贴皮编号:id的组合
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<String, Long> getOrgVeneerNo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增贴皮
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
*/
|
||||||
|
void batchInsert(List<VeneerDO> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新贴皮
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
*/
|
||||||
|
void batchUpdate(List<VeneerDO> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存瑕疵数据
|
||||||
|
*
|
||||||
|
* @param defectSaveReqVO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int saveDefect(VeneerDefectSaveReqVO defectSaveReqVO);
|
||||||
}
|
}
|
||||||
|
|||||||
+49
@@ -3,15 +3,20 @@ package com.cf.imes.module.executor.service.veneer;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.cf.imes.framework.common.exception.ServiceException;
|
import com.cf.imes.framework.common.exception.ServiceException;
|
||||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
|
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerDefectSaveReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO;
|
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO;
|
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO;
|
||||||
|
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerBatchMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper;
|
import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper;
|
||||||
import com.cf.imes.module.infra.api.file.FileApi;
|
import com.cf.imes.module.infra.api.file.FileApi;
|
||||||
import com.cf.imes.module.system.api.organ.OrganApi;
|
import com.cf.imes.module.system.api.organ.OrganApi;
|
||||||
@@ -23,7 +28,10 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.hutool.core.date.DatePattern.PURE_DATETIME_PATTERN;
|
import static cn.hutool.core.date.DatePattern.PURE_DATETIME_PATTERN;
|
||||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_NOT_EXIST;
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_NOT_EXIST;
|
||||||
@@ -46,6 +54,9 @@ public class VeneerServiceImpl implements VeneerService {
|
|||||||
@Resource
|
@Resource
|
||||||
private VeneerMapper veneerMapper;
|
private VeneerMapper veneerMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VeneerBatchMapper veneerBatchMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long create(VeneerSaveReqVO reqVO) {
|
public Long create(VeneerSaveReqVO reqVO) {
|
||||||
// 1、校验贴皮编号
|
// 1、校验贴皮编号
|
||||||
@@ -127,9 +138,47 @@ public class VeneerServiceImpl implements VeneerService {
|
|||||||
if (ObjectUtil.isNull(veneerDO)) {
|
if (ObjectUtil.isNull(veneerDO)) {
|
||||||
throw new ServiceException(VENEER_NOT_EXIST);
|
throw new ServiceException(VENEER_NOT_EXIST);
|
||||||
}
|
}
|
||||||
|
String defectData = veneerDO.getDefectData();
|
||||||
|
if (StringUtils.isNotEmpty(defectData)) {
|
||||||
|
veneerDO.setDefectData(JsonUtils.unzipString(defectData));
|
||||||
|
}
|
||||||
return BeanUtil.copyProperties(veneerDO, VeneerRespVO.class);
|
return BeanUtil.copyProperties(veneerDO, VeneerRespVO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Long> getOrgVeneerNo() {
|
||||||
|
return veneerMapper.selectList(new LambdaQueryWrapper<VeneerDO>().select(VeneerDO::getId, VeneerDO::getVeneerNo)).stream().collect(Collectors.toMap(VeneerDO::getVeneerNo, VeneerDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void batchInsert(List<VeneerDO> list) {
|
||||||
|
veneerBatchMapper.insertBatchSomeColumn(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void batchUpdate(List<VeneerDO> list) {
|
||||||
|
veneerBatchMapper.updateBatch(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int saveDefect(VeneerDefectSaveReqVO defectSaveReqVO) {
|
||||||
|
Long id = defectSaveReqVO.getId();
|
||||||
|
// 校验贴皮是否存在
|
||||||
|
if (ObjectUtil.isNull(validateExist(id))) {
|
||||||
|
throw new ServiceException(VENEER_NOT_EXIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
String defectData = defectSaveReqVO.getDefectData();
|
||||||
|
if(StringUtils.isNotEmpty(defectData)) {
|
||||||
|
// 更新瑕疵数据和状态
|
||||||
|
return veneerMapper.update(new LambdaUpdateWrapper<VeneerDO>()
|
||||||
|
.eq(VeneerDO::getId, id)
|
||||||
|
.set(VeneerDO::getDefect, true)
|
||||||
|
.set(VeneerDO::getDefectData, JsonUtils.zipString(defectData)));
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验贴皮是否存在
|
* 校验贴皮是否存在
|
||||||
*
|
*
|
||||||
|
|||||||
+43
-2
@@ -1,5 +1,6 @@
|
|||||||
package com.cf.imes.module.executor.util.file;
|
package com.cf.imes.module.executor.util.file;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
import com.cf.imes.framework.common.exception.ServiceException;
|
import com.cf.imes.framework.common.exception.ServiceException;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
@@ -34,8 +35,8 @@ public class FileHelperUtil {
|
|||||||
fis.close();
|
fis.close();
|
||||||
|
|
||||||
response.reset();
|
response.reset();
|
||||||
response.setCharacterEncoding("UTF-8");
|
response.setCharacterEncoding(CharsetUtil.UTF_8);
|
||||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
|
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, CharsetUtil.UTF_8));
|
||||||
response.addHeader("Content-Length", "" + file.length());
|
response.addHeader("Content-Length", "" + file.length());
|
||||||
|
|
||||||
response.setContentType("application/octet-stream");
|
response.setContentType("application/octet-stream");
|
||||||
@@ -64,4 +65,44 @@ public class FileHelperUtil {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载目录下第一个文件
|
||||||
|
*
|
||||||
|
* @param dirPath
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
public static void getFirstFile(String dirPath, HttpServletResponse response) {
|
||||||
|
File dir = new File(dirPath);
|
||||||
|
if (!dir.exists() || !dir.isDirectory()) {
|
||||||
|
throw new ServiceException(FILE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
File[] files = dir.listFiles(File::isFile);
|
||||||
|
if (files == null || files.length == 0) {
|
||||||
|
throw new ServiceException(FILE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = files[0];
|
||||||
|
// 获取文件名
|
||||||
|
String filename = file.getName();
|
||||||
|
// 将文件写入输入流
|
||||||
|
try (FileInputStream fis = new FileInputStream(file);
|
||||||
|
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
|
||||||
|
byte[] buffer = new byte[fis.available()];
|
||||||
|
fis.read(buffer);
|
||||||
|
fis.close();
|
||||||
|
|
||||||
|
response.reset();
|
||||||
|
response.setCharacterEncoding(CharsetUtil.UTF_8);
|
||||||
|
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, CharsetUtil.UTF_8));
|
||||||
|
response.addHeader("Content-Length", "" + file.length());
|
||||||
|
|
||||||
|
response.setContentType("application/octet-stream");
|
||||||
|
outputStream.write(buffer);
|
||||||
|
outputStream.flush();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new ServiceException(FILE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -14,4 +14,5 @@ veneer.save.veneerNo.length.max=贴皮编号不能超过32个字符
|
|||||||
veneer.save.veneerNo.not.null=贴皮编号不能为空
|
veneer.save.veneerNo.not.null=贴皮编号不能为空
|
||||||
veneer.save.width.not.null=宽度不能为空
|
veneer.save.width.not.null=宽度不能为空
|
||||||
veneer.save.veneerName.not.null=贴皮名称不能为空
|
veneer.save.veneerName.not.null=贴皮名称不能为空
|
||||||
veneer.save.veneerName.length.max=贴皮名称不能超过64个字符
|
veneer.save.veneerName.length.max=贴皮名称不能超过64个字符
|
||||||
|
veneer.defect.save.id.not.null=贴皮ID不能为空
|
||||||
+3
-2
@@ -6,7 +6,7 @@ veneer.save.factory.length.max=廠家不能超過128個字元
|
|||||||
veneer.save.length.not.null=長度不能為空
|
veneer.save.length.not.null=長度不能為空
|
||||||
veneer.save.material.length.max=材質不能超過64個字元
|
veneer.save.material.length.max=材質不能超過64個字元
|
||||||
veneer.save.num.not.null=數量不能為空
|
veneer.save.num.not.null=數量不能為空
|
||||||
veneer.save.productLevel.not.null=产品等级不能為空
|
veneer.save.productLevel.not.null=產品等級不能為空
|
||||||
veneer.save.remark.length.max=備註不能超過255個字元
|
veneer.save.remark.length.max=備註不能超過255個字元
|
||||||
veneer.save.spec.length.max=規格不能超過64個字元
|
veneer.save.spec.length.max=規格不能超過64個字元
|
||||||
veneer.save.thickness.not.null=厚度不能為空
|
veneer.save.thickness.not.null=厚度不能為空
|
||||||
@@ -14,4 +14,5 @@ veneer.save.veneerNo.length.max=貼皮編號不能超過32個字元
|
|||||||
veneer.save.veneerNo.not.null=貼皮編號不能為空
|
veneer.save.veneerNo.not.null=貼皮編號不能為空
|
||||||
veneer.save.width.not.null=寬度不能為空
|
veneer.save.width.not.null=寬度不能為空
|
||||||
veneer.save.veneerName.not.null=貼皮名稱不能為空
|
veneer.save.veneerName.not.null=貼皮名稱不能為空
|
||||||
veneer.save.veneerName.length.max=貼皮名稱不能超过64个字符
|
veneer.save.veneerName.length.max=貼皮名稱不能超过64个字符
|
||||||
|
veneer.defect.save.id.not.null=貼皮ID不能為空
|
||||||
+2
-1
@@ -14,4 +14,5 @@ veneer.save.veneerNo.length.max=veener no length cannot exceed 32 characters
|
|||||||
veneer.save.veneerNo.not.null=veener no cannot be empty
|
veneer.save.veneerNo.not.null=veener no cannot be empty
|
||||||
veneer.save.width.not.null=width cannot be empty
|
veneer.save.width.not.null=width cannot be empty
|
||||||
veneer.save.veneerName.not.null=veneer name cannot be empty
|
veneer.save.veneerName.not.null=veneer name cannot be empty
|
||||||
veneer.save.veneerName.length.max=veneer name length cannot exceed 64 characters
|
veneer.save.veneerName.length.max=veneer name length cannot exceed 64 characters
|
||||||
|
veneer.defect.save.id.not.null=veneer id cannot be empty
|
||||||
+4
-1
@@ -17,4 +17,7 @@ veneer.export.head.factory=厂家
|
|||||||
veneer.export.head.num=数量
|
veneer.export.head.num=数量
|
||||||
veneer.export.head.defect=瑕疵
|
veneer.export.head.defect=瑕疵
|
||||||
veneer.export.head.remark=备注
|
veneer.export.head.remark=备注
|
||||||
veneer.export.head.status=状态
|
|
||||||
|
veneer.product.level.A=A类
|
||||||
|
veneer.product.level.B=B类
|
||||||
|
veneer.product.level.C=C类
|
||||||
+4
-1
@@ -17,4 +17,7 @@ veneer.export.head.factory=廠家
|
|||||||
veneer.export.head.num=數量
|
veneer.export.head.num=數量
|
||||||
veneer.export.head.defect=瑕疵
|
veneer.export.head.defect=瑕疵
|
||||||
veneer.export.head.remark=備註
|
veneer.export.head.remark=備註
|
||||||
veneer.export.head.status=狀態
|
|
||||||
|
veneer.product.level.A=A類
|
||||||
|
veneer.product.level.B=B類
|
||||||
|
veneer.product.level.C=C類
|
||||||
+4
-1
@@ -17,4 +17,7 @@ veneer.export.head.factory=factory
|
|||||||
veneer.export.head.num=num
|
veneer.export.head.num=num
|
||||||
veneer.export.head.defect=defect
|
veneer.export.head.defect=defect
|
||||||
veneer.export.head.remark=remark
|
veneer.export.head.remark=remark
|
||||||
veneer.export.head.status=status
|
|
||||||
|
veneer.product.level.A=Class A
|
||||||
|
veneer.product.level.B=Class B
|
||||||
|
veneer.product.level.C=Class C
|
||||||
+7
-1
@@ -14,4 +14,10 @@ global.org.product.expired=组织产品套餐已过期,请续费后继续使
|
|||||||
global.not.login=账号未登录
|
global.not.login=账号未登录
|
||||||
|
|
||||||
veneer.not.exist=贴皮不存在
|
veneer.not.exist=贴皮不存在
|
||||||
veneer.no.exist=贴皮编号已存在
|
veneer.no.exist=贴皮编号已存在
|
||||||
|
|
||||||
|
veneer.import.required.lack=第{0}行存在带*必填项为空,请检查文件
|
||||||
|
veneer.import.length.error=第{0}行{1}长度不能超过{2}个字符,请检查文件
|
||||||
|
veneer.import.digital.type.error=第{0}行{1}只能输入数字,请检查文件
|
||||||
|
veneer.import.positive.number.error=第{0}行{1}必须大于0,请检查文件
|
||||||
|
veneer.import.number.length.error=第{0}行{1}长度不能超过整数{2}位、小数{3}位,请检查文件
|
||||||
+7
-1
@@ -14,4 +14,10 @@ global.org.product.expired=組織產品套餐已過期,請續費後繼續使
|
|||||||
global.not.login=賬號未登錄
|
global.not.login=賬號未登錄
|
||||||
|
|
||||||
veneer.not.exist=貼皮不存在
|
veneer.not.exist=貼皮不存在
|
||||||
veneer.no.exist=貼皮編號已存在
|
veneer.no.exist=貼皮編號已存在
|
||||||
|
|
||||||
|
veneer.import.required.lack=第{0}行存在帶*必填項為空,請檢查檔案
|
||||||
|
veneer.import.length.error=第{0}行{1}長度不能超過{2}個字元,請檢查檔案
|
||||||
|
veneer.import.digital.type.error=第{0}行{1}只能輸入數位,請檢查檔案
|
||||||
|
veneer.import.positive.number.error=第{0}行{1}必須大於0,請檢查檔案
|
||||||
|
veneer.import.number.length.error=第{0}行{1}長度不能超過整數{2}位、小數{3}位,請檢查檔案
|
||||||
+7
-1
@@ -14,4 +14,10 @@ global.org.product.expired=The organization's product package has expired, pleas
|
|||||||
global.not.login=The account is not logged in
|
global.not.login=The account is not logged in
|
||||||
|
|
||||||
veneer.not.exist=veneer not exist
|
veneer.not.exist=veneer not exist
|
||||||
veneer.no.exist=veneer no already exists
|
veneer.no.exist=veneer no already exists
|
||||||
|
|
||||||
|
veneer.import.required.lack=The required field is empty in line {0}, please check the file
|
||||||
|
veneer.import.length.error=The length of the field cannot exceed {0} characters in line {1}, please check the file
|
||||||
|
veneer.import.digital.type.error=The field can only be filled in with numbers in line {0}, please check the file
|
||||||
|
veneer.import.positive.number.error=The field must be greater than 0 in line {0}, please check the file
|
||||||
|
veneer.import.number.length.error=The length of the field cannot exceed integer {0} digits and decimal {1} digits in line {2}, please check the file
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user