From b666823f4de63d83e981e1d9c98f4ce2bd0ca40e Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Tue, 31 Oct 2023 10:28:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=B8=BB=E5=AD=90=E8=A1=A8?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConvertUtil.java} | 80 +++++++------ .../com/win/module/system/package-info.java | 8 -- .../module/wms/enums/DictTypeConstants.java | 12 +- .../PurchaseclaimRequestMainController.java | 27 +++-- .../vo/PurchaseclaimRequestDetailExcelVO.java | 37 +++--- ...=> PurchaseclaimRequestImportErrorVO.java} | 22 ++-- .../vo/PurchaseclaimRequestImportVO.java | 113 ++++++++++++++++++ .../vo/PurchaseclaimRequestMainBaseVO.java | 2 + .../PurchaseclaimRequestMainCreateReqVO.java | 2 + .../PurchaseclaimRequestDetailConvert.java | 2 +- .../PurchaseclaimRequestMainService.java | 2 +- .../PurchaseclaimRequestMainServiceImpl.java | 42 +++---- 12 files changed, 247 insertions(+), 102 deletions(-) rename win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/{listener/ExcelListener.java => util/ConvertUtil.java} (70%) delete mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java rename win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/{PurchaseclaimRequestDetailImportVO.java => PurchaseclaimRequestImportErrorVO.java} (82%) create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportVO.java diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/listener/ExcelListener.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ConvertUtil.java similarity index 70% rename from win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/listener/ExcelListener.java rename to win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ConvertUtil.java index 39c974b0..2509c6d2 100644 --- a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/listener/ExcelListener.java +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ConvertUtil.java @@ -1,10 +1,7 @@ -package com.win.framework.excel.core.listener; +package com.win.framework.excel.core.util; -import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ReflectUtil; -import com.alibaba.excel.context.AnalysisContext; -import com.alibaba.excel.event.AnalysisEventListener; import com.google.common.base.Objects; import com.win.framework.common.exception.ServiceException; import com.win.framework.excel.core.annotations.OnlyOne; @@ -22,7 +19,7 @@ import java.util.List; @Data @Slf4j -public class ExcelListener extends AnalysisEventListener { +public class ConvertUtil { /** * excel数据 @@ -47,19 +44,17 @@ public class ExcelListener extends AnalysisEventListener { /** * 子表class */ - private Class subClass; + private String subClassName; /** * 构造函数 */ - @SuppressWarnings("unchecked") - public ExcelListener() { + public ConvertUtil(Class mainClass) { dataList = new ArrayList<>(); - this.mainClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + this.mainClass = mainClass; } - @Override - public void invoke(Object object, AnalysisContext analysisContext) { + public ConvertUtil invoke(List dataList) { if(this.methodName == null) { String methodName = this.getOnlyOneAnnotation(); if(methodName == null) { @@ -74,12 +69,10 @@ public class ExcelListener extends AnalysisEventListener { } this.subObjectMethodName = subObjectMethodName; } - this.buildEntity(object); - } - - @Override - public void doAfterAllAnalysed(AnalysisContext analysisContext) { - + for(Object object : dataList) { + this.buildEntity(object); + } + return this; } /** @@ -105,22 +98,27 @@ public class ExcelListener extends AnalysisEventListener { T mainObject = this.checkDataIsExist(vo); Object subObject; try {//创建子数据对象 - subObject = this.subClass.getDeclaredConstructors()[0].newInstance((Object) null); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { + subObject = Class.forName(this.subClassName).newInstance(); + } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { throw new RuntimeException(e); } BeanUtil.copyProperties(vo, subObject); if(mainObject == null) {//list中不存在主数据 try {//创建主数据对象 - mainObject = (T) this.mainClass.getDeclaredConstructors()[0].newInstance((Object) null); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { + mainObject = (T) Class.forName(this.mainClass.getName()).newInstance(); + } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { throw new RuntimeException(e); } BeanUtil.copyProperties(vo, mainObject); - Method setMethod = ReflectUtil.getMethod(this.mainClass, "set" + this.subObjectMethodName); + Method setMethod = null; List subClassList = new ArrayList<>(); subClassList.add(subObject); - ReflectUtil.invoke(mainObject, setMethod, subClassList); + try { + setMethod = this.mainClass.getMethod("set" + this.subObjectMethodName, List.class); + setMethod.invoke(mainObject, subClassList); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } dataList.add(mainObject); } else {//list中存在主数据,只添加子数据 Method getMethod = ReflectUtil.getMethod(this.mainClass, "get" + this.subObjectMethodName); @@ -132,10 +130,10 @@ public class ExcelListener extends AnalysisEventListener { } private String getOnlyOneAnnotation() { - Field[] fields = mainClass.getDeclaredFields(); + Field[] fields = this.getAllFields(this.mainClass); for (Field field : fields) { // 只判断该字段拥有非空注解 - if (AnnotationUtil.hasAnnotation(field, OnlyOne.class)){ + if (field.isAnnotationPresent(OnlyOne.class)) { //获取属性的名字 String attributeName = field.getName(); //将属性名字的首字母大写 @@ -146,16 +144,10 @@ public class ExcelListener extends AnalysisEventListener { } private String getSubObjectAnnotation() { - Object object; - try { - object = mainClass.getDeclaredConstructors()[0].newInstance((Object) null); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - Field[] fields = object.getClass().getDeclaredFields(); + Field[] fields = this.getAllFields(this.mainClass); for (Field field : fields) { // 只判断该字段拥有非空注解 - if (AnnotationUtil.hasAnnotation(field, SubObject.class)) { + if (field.isAnnotationPresent(SubObject.class)) { Class fieldType = field.getType(); if (Collection.class.isAssignableFrom(fieldType)) { java.lang.reflect.Type[] actualType = ((ParameterizedType) field.getGenericType()).getActualTypeArguments(); @@ -163,7 +155,7 @@ public class ExcelListener extends AnalysisEventListener { // 非class类型的不处理 throw new ServiceException().setMessage("SubObject非泛型"); } - this.subClass = actualType[0].getClass(); + this.subClassName = actualType[0].getTypeName(); } else { throw new ServiceException().setMessage("SubObject注解属性必须是Collection实现类"); } @@ -175,5 +167,25 @@ public class ExcelListener extends AnalysisEventListener { } return null; } + /** + *

获取自己及继承自父类的所有字段,包括私有字段和受保护字段,可以使用反射 API 中的 getDeclaredFields() 方法来递归获取父类的字段。

+ * + * @param clazz clazz + * @return {@link Field[] } + * @see Class + * @see Field[] + */ + private Field[] getAllFields(Class clazz) { + Field[] fields = clazz.getDeclaredFields(); + Class parent = clazz.getSuperclass(); + if (parent != null) { + Field[] parentFields = getAllFields(parent); + Field[] allFields = new Field[fields.length + parentFields.length]; + System.arraycopy(fields, 0, allFields, 0, fields.length); + System.arraycopy(parentFields, 0, allFields, fields.length, parentFields.length); + fields = allFields; + } + return fields; + } } diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java deleted file mode 100644 index 7789e98c..00000000 --- a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - * system 模块下,我们放通用业务,支撑上层的核心业务。 - * 例如说:用户、部门、权限、数据字典等等 - * - * 1. Controller URL:以 /system/ 开头,避免和其它 Module 冲突 - * 2. DataObject 表名:以 system_ 开头,方便在数据库中区分 - */ -package com.win.module.system; diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/DictTypeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/DictTypeConstants.java index 07f6f46d..fd1006d1 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/DictTypeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/DictTypeConstants.java @@ -7,15 +7,15 @@ package com.win.module.wms.enums; */ public interface DictTypeConstants { - String ITEM_STATUS = "item_status";// 物品状态 + String ITEM_STATUS = "item_status";// 物品状态 - String UOM = "uom";// 计量单位 + String UOM = "uom";// 计量单位 - String TRUE_FALSE = "true_false";// 是否 + String TRUE_FALSE = "true_false";// 是否 - String ABC_CLASS = "abc_class";// ABC类 + String ABC_CLASS = "abc_class";// ABC类 - String ITEM_TYPE = "item_type";// 物品类型 + String ITEM_TYPE = "item_type";// 物品类型 String ITEM_CATEGORY = "Item_category";// 物品种类 @@ -64,5 +64,7 @@ public interface DictTypeConstants { String LABEL_TYPE = "label_type";//标签类型 String CARRIER_TYPE = "carrier_type";//承运商类型 String INVENTORY_STATUS = "inventory_status";//库存状态 + String REQUEST_STATUS = "request_status";//请求状态 + String PURCHASE_RETURN_REASON = "purchase_return_reason";//原因 } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/PurchaseclaimRequestMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/PurchaseclaimRequestMainController.java index fd671ee4..f7925d30 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/PurchaseclaimRequestMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/PurchaseclaimRequestMainController.java @@ -4,6 +4,7 @@ import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; import com.win.framework.dict.core.util.DictFrameworkUtils; +import com.win.framework.excel.core.util.ConvertUtil; import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.module.system.api.user.AdminUserApi; @@ -116,6 +117,11 @@ public class PurchaseclaimRequestMainController { public void exportPurchaseclaimRequestMainExcel(@Valid PurchaseclaimRequestMainExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = purchaseclaimRequestMainService.getPurchaseclaimRequestMainList(exportReqVO); //组装vo + Map mapDropDown = new HashMap<>(); + String[] purchaseReturnReason = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_RETURN_REASON); + mapDropDown.put(16, purchaseReturnReason); + String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); + mapDropDown.put(25, uom); List resultList = new ArrayList<>(); for(PurchaseclaimRequestMainDO mainDO : list) { List subList = purchaseclaimRequestDetailService.getPurchaseclaimRequestDetailList(mainDO.getId()); @@ -125,21 +131,24 @@ public class PurchaseclaimRequestMainController { } } // 导出 Excel - ExcelUtils.write(response, "采购索赔申请主.xlsx", "数据", PurchaseclaimRequestDetailExcelVO.class, resultList); + ExcelUtils.write(response, "采购索赔申请主.xlsx", "数据", PurchaseclaimRequestDetailExcelVO.class, resultList, mapDropDown); } @GetMapping("/get-import-template") @Operation(summary = "获得导入采购索赔信息模板") public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo - List list = new ArrayList<>(); + List list = new ArrayList<>(); Map mapDropDown = new HashMap<>(); - String[] status = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.ITEM_STATUS); - mapDropDown.put(4, status); + String[] purchaseReturnReason = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_RETURN_REASON); + mapDropDown.put(16, purchaseReturnReason); + String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); + mapDropDown.put(25, uom); // 输出 - ExcelUtils.write(response, "采购索赔信息导入模板.xlsx", "采购索赔信息列表", PurchaseclaimRequestDetailImportVO.class, list,mapDropDown); + ExcelUtils.write(response, "采购索赔信息导入模板.xlsx", "采购索赔信息列表", PurchaseclaimRequestImportVO.class, list, mapDropDown); } + @PostMapping("/import") @Operation(summary = "导入采购索赔基本信息") @Parameters({ @@ -147,13 +156,15 @@ public class PurchaseclaimRequestMainController { @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) - @PreAuthorize("@ss.hasPermission('wms:itembasic:import')") + @PreAuthorize("@ss.hasPermission('wms:purchaseclaim-request-main:import')") public CommonResult> importExcel(HttpServletResponse response, @RequestParam("file") MultipartFile file, @RequestParam(value = "mode") Integer mode, @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { - List list = ExcelUtils.read(file, PurchaseclaimRequestMainCreateReqVO.class); - List errorList = purchaseclaimRequestMainService.importPurchaseclaimRequestList(list, mode, updatePart); + List list = ExcelUtils.read(file, PurchaseclaimRequestImportVO.class); + ConvertUtil convertUtil = new ConvertUtil<>(PurchaseclaimRequestMainCreateReqVO.class); + List createReqVOList = convertUtil.invoke(list).getDataList(); + List errorList = purchaseclaimRequestMainService.importPurchaseclaimRequestList(createReqVOList, mode, updatePart); Map returnMap = new HashMap<>(); returnMap.put("errorCount", errorList.size()); if(!errorList.isEmpty()) { diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailExcelVO.java index 13a07687..23ec78a5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailExcelVO.java @@ -3,6 +3,7 @@ package com.win.module.wms.controller.purchaseclaimRequest.vo; import com.alibaba.excel.annotation.ExcelProperty; import com.win.framework.excel.core.annotations.DictFormat; import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.wms.enums.DictTypeConstants; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -40,15 +41,6 @@ public class PurchaseclaimRequestDetailExcelVO { @ExcelProperty("业务类型") private String businessType; - @ExcelProperty("备注") - private String remark; - - @ExcelProperty("创建时间") - private LocalDateTime createTime; - - @ExcelProperty("创建者用户名") - private String creator; - @ExcelProperty("申请时间") private LocalDateTime requestTime; @@ -59,15 +51,9 @@ public class PurchaseclaimRequestDetailExcelVO { private String departmentCode; @ExcelProperty(value = "状态", converter = DictConvert.class) - @DictFormat("request_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.REQUEST_STATUS) private String status; - @ExcelProperty("最后更新时间") - private LocalDateTime updateTime; - - @ExcelProperty("最后更新者用户名") - private String updater; - @ExcelProperty("自动提交") private String autoCommit; @@ -93,7 +79,7 @@ public class PurchaseclaimRequestDetailExcelVO { private String poLine; @ExcelProperty(value = "原因", converter = DictConvert.class) - @DictFormat("purchase_return_reason") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.PURCHASE_RETURN_REASON) private String reason; @ExcelProperty("单价") @@ -121,7 +107,22 @@ public class PurchaseclaimRequestDetailExcelVO { private BigDecimal qty; @ExcelProperty(value = "计量单位", converter = DictConvert.class) - @DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.UOM) private String uom; + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @ExcelProperty("创建者用户名") + private String creator; + + @ExcelProperty("最后更新时间") + private LocalDateTime updateTime; + + @ExcelProperty("最后更新者用户名") + private String updater; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailImportVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportErrorVO.java similarity index 82% rename from win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailImportVO.java rename to win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportErrorVO.java index 9ab511c4..b4d56a19 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailImportVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportErrorVO.java @@ -1,9 +1,15 @@ package com.win.module.wms.controller.purchaseclaimRequest.vo; import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.win.framework.excel.core.annotations.DictFormat; import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.wms.enums.DictTypeConstants; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -15,7 +21,11 @@ import java.time.LocalDateTime; * @author 超级管理员 */ @Data -public class PurchaseclaimRequestDetailImportVO { +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) +public class PurchaseclaimRequestImportErrorVO { @ExcelProperty("导入状态") private String importStatus; @@ -39,18 +49,16 @@ public class PurchaseclaimRequestDetailImportVO { private String businessType; @ExcelProperty("申请时间") + @ColumnWidth(value = 16) private LocalDateTime requestTime; @ExcelProperty("截止时间") + @ColumnWidth(value = 16) private LocalDateTime dueTime; @ExcelProperty("部门") private String departmentCode; - @ExcelProperty(value = "状态", converter = DictConvert.class) - @DictFormat("request_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 - private String status; - @ExcelProperty("自动提交") private String autoCommit; @@ -76,7 +84,7 @@ public class PurchaseclaimRequestDetailImportVO { private String poLine; @ExcelProperty(value = "原因", converter = DictConvert.class) - @DictFormat("purchase_return_reason") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.PURCHASE_RETURN_REASON) private String reason; @ExcelProperty("单价") @@ -104,7 +112,7 @@ public class PurchaseclaimRequestDetailImportVO { private BigDecimal qty; @ExcelProperty(value = "计量单位", converter = DictConvert.class) - @DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.UOM) private String uom; @ExcelProperty("备注") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportVO.java new file mode 100644 index 00000000..c8d4cab6 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportVO.java @@ -0,0 +1,113 @@ +package com.win.module.wms.controller.purchaseclaimRequest.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.wms.enums.DictTypeConstants; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + + +/** + * 采购索赔申请子 Excel VO + * + * @author 超级管理员 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 +public class PurchaseclaimRequestImportVO { + + @ExcelProperty("发货单号") + private String asnNumber; + + @ExcelProperty("要货计划单号") + private String ppNumber; + + @ExcelProperty("供应商代码") + private String supplierCode; + + @ExcelProperty("单据号") + private String number; + + @ExcelProperty("业务类型") + private String businessType; + + @ExcelProperty("申请时间") + @ColumnWidth(value = 16) + private LocalDateTime requestTime; + + @ExcelProperty("截止时间") + @ColumnWidth(value = 16) + private LocalDateTime dueTime; + + @ExcelProperty("部门") + private String departmentCode; + + @ExcelProperty("自动提交") + private String autoCommit; + + @ExcelProperty("自动通过") + private String autoAgree; + + @ExcelProperty("自动执行") + private String autoExecute; + + @ExcelProperty("直接生成记录") + private String directCreateRecord; + + @ExcelProperty("批次") + private String batch; + + @ExcelProperty("替代批次") + private String altBatch; + + @ExcelProperty("订单号") + private String poNumber; + + @ExcelProperty("订单行") + private String poLine; + + @ExcelProperty(value = "原因", converter = DictConvert.class) + @DictFormat(DictTypeConstants.PURCHASE_RETURN_REASON) + private String reason; + + @ExcelProperty("单价") + private BigDecimal singlePrice; + + @ExcelProperty("金额") + private BigDecimal amount; + + @ExcelProperty("物品代码") + private String itemCode; + + @ExcelProperty("物品名称") + private String itemName; + + @ExcelProperty("物品描述1") + private String itemDesc1; + + @ExcelProperty("物品描述2") + private String itemDesc2; + + @ExcelProperty("项目代码") + private String projectCode; + + @ExcelProperty("数量") + private BigDecimal qty; + + @ExcelProperty(value = "计量单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.UOM) + private String uom; + + @ExcelProperty("备注") + private String remark; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainBaseVO.java index e9484d22..8f493013 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainBaseVO.java @@ -1,5 +1,6 @@ package com.win.module.wms.controller.purchaseclaimRequest.vo; +import com.win.framework.excel.core.annotations.OnlyOne; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -29,6 +30,7 @@ public class PurchaseclaimRequestMainBaseVO { @NotNull(message = "供应商代码不能为空") private String supplierCode; + @OnlyOne @Schema(description = "单据号") private String number; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainCreateReqVO.java index f35c9956..9adb316b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainCreateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainCreateReqVO.java @@ -1,5 +1,6 @@ package com.win.module.wms.controller.purchaseclaimRequest.vo; +import com.win.framework.excel.core.annotations.SubObject; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,6 +14,7 @@ import java.util.List; @ToString(callSuper = true) public class PurchaseclaimRequestMainCreateReqVO extends PurchaseclaimRequestMainBaseVO { + @SubObject @Schema(description = "子表数据") private List subList; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseclaimRequest/PurchaseclaimRequestDetailConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseclaimRequest/PurchaseclaimRequestDetailConvert.java index 09e7ec30..4486b929 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseclaimRequest/PurchaseclaimRequestDetailConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseclaimRequest/PurchaseclaimRequestDetailConvert.java @@ -52,5 +52,5 @@ public interface PurchaseclaimRequestDetailConvert { @Mapping(source = "mainVo.number", target = "number"), @Mapping(source = "mainVo.remark", target = "remark"), }) - PurchaseclaimRequestDetailImportVO convert(PurchaseclaimRequestMainCreateReqVO mainVo, PurchaseclaimRequestDetailCreateReqVO detailVo); + PurchaseclaimRequestImportErrorVO convert(PurchaseclaimRequestMainCreateReqVO mainVo, PurchaseclaimRequestDetailCreateReqVO detailVo); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainService.java index 8637acc1..02688bdf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainService.java @@ -86,5 +86,5 @@ public interface PurchaseclaimRequestMainService { * @param updatePart 是否支持更新 * @return 导入结果 */ - public List importPurchaseclaimRequestList(List datas, Integer mode, boolean updatePart); + public List importPurchaseclaimRequestList(List datas, Integer mode, boolean updatePart); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainServiceImpl.java index 67f7e1f4..37e36f12 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainServiceImpl.java @@ -1,9 +1,9 @@ package com.win.module.wms.service.purchaseclaimRequest; import cn.hutool.core.collection.CollUtil; -import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; +import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.module.system.api.serialnumber.SerialNumberApi; import com.win.module.system.enums.serialNumber.RuleCodeEnum; import com.win.module.wms.controller.purchaseclaimRequest.vo.*; @@ -13,6 +13,7 @@ import com.win.module.wms.dal.dataobject.purchaseclaimRequest.PurchaseclaimReque import com.win.module.wms.dal.dataobject.purchaseclaimRequest.PurchaseclaimRequestMainDO; import com.win.module.wms.dal.mysql.purchaseclaimRequest.PurchaseclaimRequestDetailMapper; import com.win.module.wms.dal.mysql.purchaseclaimRequest.PurchaseclaimRequestMainMapper; +import com.win.module.wms.enums.DictTypeConstants; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -116,31 +117,32 @@ public class PurchaseclaimRequestMainServiceImpl implements PurchaseclaimRequest return purchaseclaimRequestMainMapper.selectList(exportReqVO); } - public List importPurchaseclaimRequestList(List datas, Integer mode, boolean updatePart) { + public List importPurchaseclaimRequestList(List datas, Integer mode, boolean updatePart) { if (CollUtil.isEmpty(datas)) { throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); } - List errorList = new ArrayList<>(); + List errorList = new ArrayList<>(); datas.forEach(createReqVO -> { // 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList boolean isError = false; - String importRemark = ""; - try { - if(mode != null){ - validatePurchaseclaimRequestMainExists(null); - } - } catch (ServiceException ex) { - isError = true; - importRemark += ex.getMessage() + ","; - } - if(isError) { - List subList = createReqVO.getSubList(); - for (PurchaseclaimRequestDetailCreateReqVO detailVo : subList) { - PurchaseclaimRequestDetailImportVO importVO = PurchaseclaimRequestDetailConvert.INSTANCE.convert(createReqVO, detailVo); - importVO.setImportStatus("失败"); - importVO.setImportRemark(importRemark.substring(0, importRemark.length() - 1)); - } - } +// String importRemark = ""; +// try { +// if(mode != null){ +// validatePurchaseclaimRequestMainExists(null); +// } +// } catch (ServiceException ex) { +// isError = true; +// importRemark += ex.getMessage() + ","; +// } +// if(isError) { +// List subList = createReqVO.getSubList(); +// for (PurchaseclaimRequestDetailCreateReqVO detailVo : subList) { +// PurchaseclaimRequestImportErrorVO importVO = PurchaseclaimRequestDetailConvert.INSTANCE.convert(createReqVO, detailVo); +// importVO.setImportStatus("失败"); +// importVO.setImportRemark(importRemark.substring(0, importRemark.length() - 1)); +// } +// } + createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); PurchaseclaimRequestMainDO createObj = PurchaseclaimRequestMainConvert.INSTANCE.convert(createReqVO); purchaseclaimRequestMainMapper.insert(createObj); List subList = createReqVO.getSubList();