Browse Source

完成主子表导入

master
刘忱 2 years ago
parent
commit
b666823f4d
  1. 80
      win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ConvertUtil.java
  2. 8
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java
  3. 12
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/DictTypeConstants.java
  4. 27
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/PurchaseclaimRequestMainController.java
  5. 37
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailExcelVO.java
  6. 22
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportErrorVO.java
  7. 113
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestImportVO.java
  8. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainBaseVO.java
  9. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestMainCreateReqVO.java
  10. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseclaimRequest/PurchaseclaimRequestDetailConvert.java
  11. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainService.java
  12. 42
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseclaimRequest/PurchaseclaimRequestMainServiceImpl.java

80
win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/listener/ExcelListener.java → 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<T> extends AnalysisEventListener<T> {
public class ConvertUtil<T> {
/**
* excel数据
@ -47,19 +44,17 @@ public class ExcelListener<T> extends AnalysisEventListener<T> {
/**
* 子表class
*/
private Class<?> subClass;
private String subClassName;
/**
* 构造函数
*/
@SuppressWarnings("unchecked")
public ExcelListener() {
public ConvertUtil(Class<T> mainClass) {
dataList = new ArrayList<>();
this.mainClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
this.mainClass = mainClass;
}
@Override
public void invoke(Object object, AnalysisContext analysisContext) {
public ConvertUtil<T> invoke(List<?> dataList) {
if(this.methodName == null) {
String methodName = this.getOnlyOneAnnotation();
if(methodName == null) {
@ -74,12 +69,10 @@ public class ExcelListener<T> extends AnalysisEventListener<T> {
}
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<T> extends AnalysisEventListener<T> {
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<Object> 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<T> extends AnalysisEventListener<T> {
}
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<T> extends AnalysisEventListener<T> {
}
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<T> extends AnalysisEventListener<T> {
// 非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<T> extends AnalysisEventListener<T> {
}
return null;
}
/**
* <p>获取自己及继承自父类的所有字段包括私有字段和受保护字段可以使用反射 API 中的 getDeclaredFields() 方法来递归获取父类的字段</p>
*
* @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;
}
}

8
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java

@ -1,8 +0,0 @@
/**
* system 模块下我们放通用业务支撑上层的核心业务
* 例如说用户部门权限数据字典等等
*
* 1. Controller URL /system/ 开头避免和其它 Module 冲突
* 2. DataObject 表名 system_ 开头方便在数据库中区分
*/
package com.win.module.system;

12
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";//原因
}

27
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<PurchaseclaimRequestMainDO> list = purchaseclaimRequestMainService.getPurchaseclaimRequestMainList(exportReqVO);
//组装vo
Map<Integer, String[]> 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<PurchaseclaimRequestDetailExcelVO> resultList = new ArrayList<>();
for(PurchaseclaimRequestMainDO mainDO : list) {
List<PurchaseclaimRequestDetailDO> 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<PurchaseclaimRequestDetailImportVO> list = new ArrayList<>();
List<PurchaseclaimRequestImportVO> list = new ArrayList<>();
Map<Integer, String[]> 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<Map<String, Object>> importExcel(HttpServletResponse response,
@RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
List<PurchaseclaimRequestMainCreateReqVO> list = ExcelUtils.read(file, PurchaseclaimRequestMainCreateReqVO.class);
List<PurchaseclaimRequestDetailImportVO> errorList = purchaseclaimRequestMainService.importPurchaseclaimRequestList(list, mode, updatePart);
List<PurchaseclaimRequestImportVO> list = ExcelUtils.read(file, PurchaseclaimRequestImportVO.class);
ConvertUtil<PurchaseclaimRequestMainCreateReqVO> convertUtil = new ConvertUtil<>(PurchaseclaimRequestMainCreateReqVO.class);
List<PurchaseclaimRequestMainCreateReqVO> createReqVOList = convertUtil.invoke(list).getDataList();
List<PurchaseclaimRequestImportErrorVO> errorList = purchaseclaimRequestMainService.importPurchaseclaimRequestList(createReqVOList, mode, updatePart);
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size());
if(!errorList.isEmpty()) {

37
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;
}

22
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseclaimRequest/vo/PurchaseclaimRequestDetailImportVO.java → 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("备注")

113
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;
}

2
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;

2
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<PurchaseclaimRequestDetailCreateReqVO> subList;

2
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);
}

2
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<PurchaseclaimRequestDetailImportVO> importPurchaseclaimRequestList(List<PurchaseclaimRequestMainCreateReqVO> datas, Integer mode, boolean updatePart);
public List<PurchaseclaimRequestImportErrorVO> importPurchaseclaimRequestList(List<PurchaseclaimRequestMainCreateReqVO> datas, Integer mode, boolean updatePart);
}

42
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<PurchaseclaimRequestDetailImportVO> importPurchaseclaimRequestList(List<PurchaseclaimRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) {
public List<PurchaseclaimRequestImportErrorVO> importPurchaseclaimRequestList(List<PurchaseclaimRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) {
if (CollUtil.isEmpty(datas)) {
throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY);
}
List<PurchaseclaimRequestDetailImportVO> errorList = new ArrayList<>();
List<PurchaseclaimRequestImportErrorVO> 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<PurchaseclaimRequestDetailCreateReqVO> 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<PurchaseclaimRequestDetailCreateReqVO> 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<PurchaseclaimRequestDetailCreateReqVO> subList = createReqVO.getSubList();

Loading…
Cancel
Save