Browse Source

工位管理 导入demo代码

master
chenfang 2 years ago
parent
commit
7171c1f20d
  1. 4
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workstation/ErrorCodeConstants.java
  2. 27
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/WorkstationController.java
  3. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationBaseVO.java
  4. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationExportReqVO.java
  5. 38
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationImportExcelVo.java
  6. 24
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationImportRespVO.java
  7. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationPageReqVO.java
  8. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/workstation/WorkstationConvert.java
  9. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/workstation/WorkstationMapper.java
  10. 15
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationService.java
  11. 64
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationServiceImpl.java

4
win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workstation/ErrorCodeConstants.java

@ -11,4 +11,8 @@ public interface ErrorCodeConstants {
ErrorCode WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_000_000, "工位不存在"); ErrorCode WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_000_000, "工位不存在");
ErrorCode WORKSTATION_NOT_RIGHT = new ErrorCode(1_040_000_001, "工位信息填写不正确");
ErrorCode CODE_NOT_ONLY = new ErrorCode(1_040_000_002, "code已存在");
} }

27
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/WorkstationController.java

@ -10,15 +10,18 @@ import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import com.win.module.wms.service.workstation.WorkstationService; import com.win.module.wms.service.workstation.WorkstationService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -96,4 +99,28 @@ public class WorkstationController {
ExcelUtils.write(response, "工位.xls", "数据", WorkstationExcelVO.class, datas); ExcelUtils.write(response, "工位.xls", "数据", WorkstationExcelVO.class, datas);
} }
@GetMapping("/get-import-template")
@Operation(summary = "获得导入用户模板")
public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo
List<WorkstationImportExcelVo> list = Arrays.asList(
WorkstationImportExcelVo.builder().code("yunai")
.workshopCode("1").productionLineCode("1").available("TRUE").build());
// 输出
ExcelUtils.write(response, "用户导入模板.xls", "用户列表", WorkstationImportExcelVo.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:workstation:import')")
public CommonResult<WorkstationImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
List<WorkstationImportExcelVo> list = ExcelUtils.read(file, WorkstationImportExcelVo.class);
return success(workstationService.importUserList(list, updateSupport));
}
} }

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationBaseVO.java

@ -48,7 +48,7 @@ public class WorkstationBaseVO {
@Schema(description = "是否可用", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "是否可用", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否可用不能为空") @NotNull(message = "是否可用不能为空")
private Integer available; private String available;
@Schema(description = "生效时间") @Schema(description = "生效时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationExportReqVO.java

@ -37,7 +37,7 @@ public class WorkstationExportReqVO {
private String fgLocationCode; private String fgLocationCode;
@Schema(description = "是否可用") @Schema(description = "是否可用")
private Integer available; private String available;
@Schema(description = "生效时间") @Schema(description = "生效时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

38
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationImportExcelVo.java

@ -0,0 +1,38 @@
package com.win.module.wms.controller.workstation.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 WorkstationImportExcelVo {
@ExcelProperty("代码")
private String code;
@ExcelProperty(value = "类型", converter = DictConvert.class)
@DictFormat(DictTypeConstants.WORK_STATION_TYPE)
private String tupe;
@ExcelProperty(value = "车间代码")
private String workshopCode;
@ExcelProperty(value = "生产线代码")
private String productionLineCode;
@ExcelProperty(value = "是否可用", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String available;
}

24
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationImportRespVO.java

@ -0,0 +1,24 @@
package com.win.module.wms.controller.workstation.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Schema(description = "管理后台 - 用户导入 Response VO")
@Data
@Builder
public class WorkstationImportRespVO {
@Schema(description = "创建成功的用户名数组", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> createWorkstations;
@Schema(description = "更新成功的用户名数组", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> updateWorkstations;
@Schema(description = "导入失败的用户集合,key 为用户名,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED)
private Map<String, String> failureWorkstations;
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/vo/WorkstationPageReqVO.java

@ -42,7 +42,7 @@ public class WorkstationPageReqVO extends PageParam {
private String fgLocationCode; private String fgLocationCode;
@Schema(description = "是否可用") @Schema(description = "是否可用")
private Integer available; private String available;
@Schema(description = "生效时间") @Schema(description = "生效时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/workstation/WorkstationConvert.java

@ -1,16 +1,12 @@
package com.win.module.wms.convert.workstation; package com.win.module.wms.convert.workstation;
import java.util.*;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.workstation.vo.*;
import com.win.module.wms.controller.workstation.vo.WorkstationCreateReqVO; import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import com.win.module.wms.controller.workstation.vo.WorkstationExcelVO;
import com.win.module.wms.controller.workstation.vo.WorkstationRespVO;
import com.win.module.wms.controller.workstation.vo.WorkstationUpdateReqVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import java.util.List;
/** /**
* 工位 Convert * 工位 Convert
@ -28,6 +24,8 @@ public interface WorkstationConvert {
WorkstationRespVO convert(WorkstationDO bean); WorkstationRespVO convert(WorkstationDO bean);
WorkstationDO convert(WorkstationImportExcelVo bean);
List<WorkstationRespVO> convertList(List<WorkstationDO> list); List<WorkstationRespVO> convertList(List<WorkstationDO> list);
PageResult<WorkstationRespVO> convertPage(PageResult<WorkstationDO> page); PageResult<WorkstationRespVO> convertPage(PageResult<WorkstationDO> page);

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/workstation/WorkstationMapper.java

@ -1,15 +1,15 @@
package com.win.module.wms.dal.mysql.workstation; package com.win.module.wms.dal.mysql.workstation;
import java.util.*;
import com.win.framework.common.pojo.PageResult; 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.mapper.BaseMapperX;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.module.wms.controller.workstation.vo.WorkstationExportReqVO; import com.win.module.wms.controller.workstation.vo.WorkstationExportReqVO;
import com.win.module.wms.controller.workstation.vo.WorkstationPageReqVO; import com.win.module.wms.controller.workstation.vo.WorkstationPageReqVO;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* 工位 Mapper * 工位 Mapper
* *
@ -18,6 +18,10 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface WorkstationMapper extends BaseMapperX<WorkstationDO> { public interface WorkstationMapper extends BaseMapperX<WorkstationDO> {
default WorkstationDO selectByCode(String code) {
return selectOne(WorkstationDO::getCode, code);
}
default PageResult<WorkstationDO> selectPage(WorkstationPageReqVO reqVO) { default PageResult<WorkstationDO> selectPage(WorkstationPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<WorkstationDO>() return selectPage(reqVO, new LambdaQueryWrapperX<WorkstationDO>()
.eqIfPresent(WorkstationDO::getCode, reqVO.getCode()) .eqIfPresent(WorkstationDO::getCode, reqVO.getCode())

15
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationService.java

@ -1,14 +1,12 @@
package com.win.module.wms.service.workstation; package com.win.module.wms.service.workstation;
import java.util.*;
import javax.validation.*;
import com.win.module.wms.controller.workstation.vo.WorkstationCreateReqVO;
import com.win.module.wms.controller.workstation.vo.WorkstationExportReqVO;
import com.win.module.wms.controller.workstation.vo.WorkstationPageReqVO;
import com.win.module.wms.controller.workstation.vo.WorkstationUpdateReqVO;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.workstation.vo.*;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
/** /**
* 工位 Service 接口 * 工位 Service 接口
@ -71,4 +69,5 @@ public interface WorkstationService {
*/ */
List<WorkstationDO> getWorkstationList(WorkstationExportReqVO exportReqVO); List<WorkstationDO> getWorkstationList(WorkstationExportReqVO exportReqVO);
WorkstationImportRespVO importUserList(List<WorkstationImportExcelVo> list, Boolean isUpdateSupport);
} }

64
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationServiceImpl.java

@ -1,22 +1,27 @@
package com.win.module.wms.service.workstation; package com.win.module.wms.service.workstation;
import cn.hutool.core.collection.CollUtil;
import com.win.framework.common.exception.ServiceException;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.workstation.vo.WorkstationCreateReqVO; import com.win.framework.datapermission.core.util.DataPermissionUtils;
import com.win.module.wms.controller.workstation.vo.WorkstationExportReqVO; import com.win.module.wms.controller.workstation.vo.*;
import com.win.module.wms.controller.workstation.vo.WorkstationPageReqVO;
import com.win.module.wms.controller.workstation.vo.WorkstationUpdateReqVO;
import com.win.module.wms.convert.workstation.WorkstationConvert; import com.win.module.wms.convert.workstation.WorkstationConvert;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import com.win.module.wms.dal.mysql.workstation.WorkstationMapper; import com.win.module.wms.dal.mysql.workstation.WorkstationMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; 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.wms.enums.workstation.ErrorCodeConstants.WORKSTATION_NOT_EXISTS; import static com.win.module.wms.enums.workstation.ErrorCodeConstants.WORKSTATION_NOT_EXISTS;
import static com.win.module.wms.enums.workstation.ErrorCodeConstants.WORKSTATION_NOT_RIGHT;
/** /**
* 工位 Service 实现类 * 工位 Service 实现类
@ -81,5 +86,56 @@ public class WorkstationServiceImpl implements WorkstationService {
public List<WorkstationDO> getWorkstationList(WorkstationExportReqVO exportReqVO) { public List<WorkstationDO> getWorkstationList(WorkstationExportReqVO exportReqVO) {
return workstationMapper.selectList(exportReqVO); return workstationMapper.selectList(exportReqVO);
} }
@Override
@Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
public WorkstationImportRespVO importUserList(List<WorkstationImportExcelVo> workstations, Boolean isUpdateSupport) {
if (CollUtil.isEmpty(workstations)) {
throw exception(USER_IMPORT_LIST_IS_EMPTY);
}
WorkstationImportRespVO respVO = WorkstationImportRespVO.builder().createWorkstations(new ArrayList<>())
.updateWorkstations(new ArrayList<>()).failureWorkstations(new LinkedHashMap<>()).build();
workstations.forEach(workstation -> {
// 校验,判断是否有不符合的原因
try {
validateUserForCreateOrUpdate(workstation.getCode());
} catch (ServiceException ex) {
respVO.getFailureWorkstations().put(workstation.getCode(), ex.getMessage());
return;
}
// 判断如果不存在,在进行插入
WorkstationDO existWorkstation = workstationMapper.selectByCode(workstation.getCode());
if (existWorkstation == null) {
workstationMapper.insert(WorkstationConvert.INSTANCE.convert(workstation));
respVO.getCreateWorkstations().add(workstation.getCode());
return;
}
// 如果存在,判断是否允许更新
// if (!isUpdateSupport) {
// String put = respVO.getFailureWorkstations().put(workstation.getCode(), USER_USERNAME_EXISTS.getMsg());
// System.out.println(put);
// return;
// }
WorkstationDO updateUser = WorkstationConvert.INSTANCE.convert(workstation);
updateUser.setId(existWorkstation.getId());
workstationMapper.updateById(updateUser);
respVO.getUpdateWorkstations().add(workstation.getCode());
});
return respVO;
}
private void validateUserForCreateOrUpdate(String code) {
// 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确
DataPermissionUtils.executeIgnore(() -> {
// 校验code唯一
codeExists(code);
});
}
private void codeExists(String code) {
if (code.isEmpty()) {
throw exception(WORKSTATION_NOT_RIGHT);
}
}
} }

Loading…
Cancel
Save