Browse Source

物品基本信息导入功能及导入模板代码

master
chenfang 2 years ago
parent
commit
cf05131d0b
  1. 34
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java
  2. 70
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/vo/ItembasicImportExcelVo.java
  3. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/itembasic/ItembasicConvert.java
  4. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/itembasic/ItembasicMapper.java
  5. 23
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java
  6. 57
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicServiceImpl.java

34
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java

@ -1,6 +1,7 @@
package com.win.module.wms.controller.itembasic;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.win.framework.common.enums.CommonStatusEnum;
import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.excel.core.util.ExcelUtils;
@ -12,15 +13,18 @@ import com.win.module.wms.dal.mysql.itembasic.ItembasicMapper;
import com.win.module.wms.service.itembasic.ItembasicService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@ -116,5 +120,35 @@ public class ItembasicController {
List<ItembasicExcelVO> datas = ItembasicConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "物品基本信息.xls", "数据", ItembasicExcelVO.class, datas);
}
@GetMapping("/get-import-template")
@Operation(summary = "获得导入用户模板")
public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo
List<ItembasicImportExcelVo> list = Arrays.asList(
ItembasicImportExcelVo.builder().code("yunai").uom(1).isStdPack(1).enableBuy(1)
.enableMake(1).status(CommonStatusEnum.ENABLE.getStatus()).enableOutsourcing(1)
.isRecycled(1).isPhantom(1).abcClass(1).type(1).validityDays(1).available(1).build(),
ItembasicImportExcelVo.builder().code("yuanma").uom(2).isStdPack(2).enableBuy(2)
.enableMake(2).status(CommonStatusEnum.DISABLE.getStatus()).enableOutsourcing(2)
.isRecycled(2).isPhantom(2).abcClass(2).type(2).validityDays(2).available(2).build()
);
// 输出
ExcelUtils.write(response, "用户导入模板.xls", "用户列表", ItembasicImportExcelVo.class, list);
}
@PostMapping("/import")
@Operation(summary = "导入用户")
@Parameters({
@Parameter(name = "file", description = "Excel 文件", required = true),
@Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true")
})
@PreAuthorize("@ss.hasPermission('wms:itembasic:import')")
public CommonResult<ItembasicImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
List<ItembasicImportExcelVo> list = ExcelUtils.read(file, ItembasicImportExcelVo.class);
return success(itembasicService.importUserList(list, updateSupport));
}
}

70
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/vo/ItembasicImportExcelVo.java

@ -0,0 +1,70 @@
package com.win.module.wms.controller.itembasic.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;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class ItembasicImportExcelVo {
@ExcelProperty("代码")
private String code;
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.ITEM_STATUS)
private Integer status;
@ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.UOM)
private Integer uom;
@ExcelProperty(value = "是否标包", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private Integer isStdPack;
@ExcelProperty(value = "可采购", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private Integer enableBuy;
@ExcelProperty(value = "可制造", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private Integer enableMake;
@ExcelProperty(value = "可委外加工", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private Integer enableOutsourcing;
@ExcelProperty(value = "回收件", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private Integer isRecycled;
@ExcelProperty(value = "虚零件", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private Integer isPhantom;
@ExcelProperty(value = "ABC类", converter = DictConvert.class)
@DictFormat(DictTypeConstants.ABC_CLASS)
private Integer abcClass;
@ExcelProperty(value = "类型", converter = DictConvert.class)
@DictFormat(DictTypeConstants.ITEM_TYPE)
private Integer type;
@ExcelProperty(value = "有效天数")
private Integer validityDays;
@ExcelProperty(value = "是否可用", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private Integer available;
}

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/itembasic/ItembasicConvert.java

@ -1,16 +1,12 @@
package com.win.module.wms.convert.itembasic;
import java.util.*;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.itembasic.vo.ItembasicCreateReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicExcelVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicRespVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicUpdateReqVO;
import com.win.module.wms.controller.itembasic.vo.*;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import java.util.List;
/**
* 物品基本信息 Convert
@ -28,6 +24,8 @@ public interface ItembasicConvert {
ItembasicRespVO convert(ItembasicDO bean);
ItembasicDO convert(ItembasicImportExcelVo bean);
List<ItembasicRespVO> convertList(List<ItembasicDO> list);
PageResult<ItembasicRespVO> convertPage(PageResult<ItembasicDO> page);

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/itembasic/ItembasicMapper.java

@ -1,15 +1,15 @@
package com.win.module.wms.dal.mysql.itembasic;
import java.util.*;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.mapper.BaseMapperX;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.module.wms.controller.itembasic.vo.ItembasicExportReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicPageReqVO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 物品基本信息 Mapper
*
@ -18,6 +18,10 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ItembasicMapper extends BaseMapperX<ItembasicDO> {
default ItembasicDO selectByCode(String code) {
return selectOne(ItembasicDO::getCode, code);
}
default PageResult<ItembasicDO> selectPage(ItembasicPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ItembasicDO>()
.eqIfPresent(ItembasicDO::getCode, reqVO.getCode())

23
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java

@ -1,14 +1,12 @@
package com.win.module.wms.service.itembasic;
import java.util.*;
import javax.validation.*;
import com.win.module.wms.controller.itembasic.vo.ItembasicCreateReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicExportReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicPageReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicUpdateReqVO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.itembasic.vo.*;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
/**
* 物品基本信息 Service 接口
@ -71,4 +69,13 @@ public interface ItembasicService {
*/
List<ItembasicDO> getItembasicList(ItembasicExportReqVO exportReqVO);
/**
* 批量导入用户
*
* @param importUsers 导入用户列表
* @param isUpdateSupport 是否支持更新
* @return 导入结果
*/
ItembasicImportRespVO importUserList(List<ItembasicImportExcelVo> importItembasics, boolean isUpdateSupport);
}

57
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicServiceImpl.java

@ -1,21 +1,26 @@
package com.win.module.wms.service.itembasic;
import cn.hutool.core.collection.CollUtil;
import com.win.framework.common.exception.ServiceException;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.itembasic.vo.ItembasicCreateReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicExportReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicPageReqVO;
import com.win.module.wms.controller.itembasic.vo.ItembasicUpdateReqVO;
import com.win.framework.datapermission.core.util.DataPermissionUtils;
import com.win.module.wms.controller.itembasic.vo.*;
import com.win.module.wms.convert.itembasic.ItembasicConvert;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.mysql.itembasic.ItembasicMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY;
import static com.win.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS;
import static com.win.module.wms.enums.itembasic.ErrorCodeConstants.ITEMBASIC_NOT_EXISTS;
import static com.win.module.wms.enums.itembasic.ErrorCodeConstants.ITEMBASIC_NOT_RIGHT;
@ -174,4 +179,48 @@ public class ItembasicServiceImpl implements ItembasicService {
return itembasicMapper.selectList(exportReqVO);
}
@Override
@Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
public ItembasicImportRespVO importUserList(List<ItembasicImportExcelVo> importItembasics, boolean isUpdateSupport) {
if (CollUtil.isEmpty(importItembasics)) {
throw exception(USER_IMPORT_LIST_IS_EMPTY);
}
ItembasicImportRespVO respVO = ItembasicImportRespVO.builder().createItembasics(new ArrayList<>())
.updateItembasics(new ArrayList<>()).failureItembasics(new LinkedHashMap<>()).build();
importItembasics.forEach(importItembasic -> {
// 校验,判断是否有不符合的原因
try {
validateUserForCreateOrUpdate(importItembasic.getCode());
} catch (ServiceException ex) {
respVO.getFailureItembasics().put(importItembasic.getCode(), ex.getMessage());
return;
}
// 判断如果不存在,在进行插入
ItembasicDO existItembasic = itembasicMapper.selectByCode(importItembasic.getCode());
if (existItembasic == null) {
itembasicMapper.insert(ItembasicConvert.INSTANCE.convert(importItembasic)); // 设置默认密码及空岗位编号数组
respVO.getCreateItembasics().add(importItembasic.getCode());
return;
}
// 如果存在,判断是否允许更新
if (!isUpdateSupport) {
respVO.getFailureItembasics().put(importItembasic.getCode(), USER_USERNAME_EXISTS.getMsg());
return;
}
ItembasicDO updateUser = ItembasicConvert.INSTANCE.convert(importItembasic);
updateUser.setId(existItembasic.getId());
itembasicMapper.updateById(updateUser);
respVO.getUpdateItembasics().add(importItembasic.getCode());
});
return respVO;
}
private void validateUserForCreateOrUpdate(String code) {
// 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确
DataPermissionUtils.executeIgnore(() -> {
// 校验code唯一
codeExists(code);
});
}
}

Loading…
Cancel
Save