diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/transactiontype/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/transactiontype/ErrorCodeConstants.java new file mode 100644 index 00000000..1c9f91fb --- /dev/null +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/transactiontype/ErrorCodeConstants.java @@ -0,0 +1,20 @@ +package com.win.module.wms.enums.transactiontype; + +import com.win.framework.common.exception.ErrorCode; + +/** + * System 错误码枚举类 + * + * system 系统,使用 1-002-000-000 段 + */ +public interface ErrorCodeConstants { + + ErrorCode NOT_EXISTS = new ErrorCode(1_0_000_000, "仓库不存在"); + + ErrorCode TRANSACTIONTYPE_CODE_EXISTS = new ErrorCode(1_0_000_001, "code已存在"); + + ErrorCode CODE_EXISTSNO = new ErrorCode(1_039_000_002, "code已存在"); + + ErrorCode TRANSACTIONTYPE_AVAIABLE_NOT_EXISTS = new ErrorCode(1_040_000_003, "是否可用不存在"); + +} diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/warehouse/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/warehouse/ErrorCodeConstants.java index 13f1e31f..ac986ea0 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/warehouse/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/warehouse/ErrorCodeConstants.java @@ -11,4 +11,9 @@ public interface ErrorCodeConstants { ErrorCode WAREHOUSE_NOT_EXISTS = new ErrorCode(1_033_000_000, "仓库不存在"); + ErrorCode WAREHOUSE_CODE_EXISTS = new ErrorCode(1_033_000_001, "code已存在"); + + ErrorCode WAREHOUSE_CODE_EXISTSNO = new ErrorCode(1_033_000_002, "code不存在"); + + ErrorCode WAREHOUSE_AVAIABLE_NOT_EXISTS = new ErrorCode(1_033_000_003, "是否可用不存在"); } diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workshop/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workshop/ErrorCodeConstants.java index 1aeab46b..ccc91b82 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workshop/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workshop/ErrorCodeConstants.java @@ -11,4 +11,10 @@ public interface ErrorCodeConstants { ErrorCode WORKSHOP_NOT_EXISTS = new ErrorCode(1_038_000_000, "车间不存在"); + ErrorCode CODE_EXISTS = new ErrorCode(1_039_000_000, "code已存在"); + + ErrorCode CODE_EXISTSNO = new ErrorCode(1_039_000_000, "code已存在"); + + ErrorCode AVAIABLE_NOT_EXISTS = new ErrorCode(1_040_000_000, "是否可用不存在"); + } diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workstation/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workstation/ErrorCodeConstants.java index 5437cf01..ab4e0ae5 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workstation/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/workstation/ErrorCodeConstants.java @@ -11,8 +11,11 @@ public interface ErrorCodeConstants { ErrorCode WORKSTATION_NOT_EXISTS = new ErrorCode(1_040_000_000, "工位不存在"); - ErrorCode CODE_NOT_EXISTS = new ErrorCode(1_040_000_001, "code不存在"); + ErrorCode WORKSTATION_CODE_NOT_EXISTS = new ErrorCode(1_040_000_001, "code不存在"); + + ErrorCode WORKSTATION_CODE_EXISTS = new ErrorCode(1_040_000_002, "code已存在"); + + ErrorCode WORKSTATION_AVAIABLE_NOT_EXISTS = new ErrorCode(1_040_000_003, "是否可用不存在"); - ErrorCode CODE_EXISTS = new ErrorCode(1_040_000_002, "code已存在"); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java index bbacfe06..6321d706 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java @@ -102,7 +102,7 @@ public class AccountcalendarController { } @GetMapping("/get-import-template") - @Operation(summary = "获得导入账期日历模板") + @Operation(summary = "获得导入账期日历板模") public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo List list = Arrays.asList( diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/vo/AccountcalendarImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/vo/AccountcalendarImportExcelVo.java index 64118e3d..71411bd3 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/vo/AccountcalendarImportExcelVo.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/vo/AccountcalendarImportExcelVo.java @@ -21,8 +21,7 @@ import java.time.LocalDateTime; public class AccountcalendarImportExcelVo { @ExcelProperty("年") - private String year; - + private String code; @ExcelProperty("月") private String month; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java index 657c0b80..82a1b73c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java @@ -191,9 +191,9 @@ public class ItembasicController { }) @PreAuthorize("@ss.hasPermission('wms:itembasic: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 { + @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, ItembasicImportExcelVo.class); List errorList = itembasicService.importItembasicList(list, mode, updatePart); Map returnMap = new HashMap<>(); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/transactiontype/TransactiontypeController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/transactiontype/TransactiontypeController.java index d1902038..8cfba502 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/transactiontype/TransactiontypeController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/transactiontype/TransactiontypeController.java @@ -1,6 +1,9 @@ package com.win.module.wms.controller.transactiontype; +import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.module.wms.controller.transactiontype.vo.*; +import com.win.module.wms.enums.DictTypeConstants; +import io.swagger.v3.oas.annotations.Parameters; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -11,6 +14,8 @@ import io.swagger.v3.oas.annotations.Operation; import javax.validation.*; import javax.servlet.http.*; +import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.util.*; import java.io.IOException; @@ -23,10 +28,10 @@ import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.operatelog.core.annotations.OperateLog; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.*; -import com.win.module.wms.controller.transactiontype.vo.*; import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; import com.win.module.wms.convert.transactiontype.TransactiontypeConvert; import com.win.module.wms.service.transactiontype.TransactiontypeService; +import org.springframework.web.multipart.MultipartFile; @Tag(name = "管理后台 - 事务类型") @RestController @@ -99,4 +104,46 @@ public class TransactiontypeController { ExcelUtils.write(response, "事务类型.xls", "数据", TransactiontypeExcelVO.class, datas); } + @GetMapping("/get-import-template") + @Operation(summary = "获得导入仓库信息模板") + public void importTemplate(HttpServletResponse response) throws IOException { + // 手动创建导出 demo + List list = Arrays.asList( + ); + // 手动创建导出 demo + Map mapDropDown = new HashMap<>(); + String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); + mapDropDown.put(4, available); + // 输出 + + // 输出 + ExcelUtils.write(response, "仓库导入模板.xls", "仓库列表", TransactiontypeImportExcelVo.class, list,mapDropDown); + } + + + @PostMapping("/import") + @Operation(summary = "导入仓库信息") + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), + @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") + }) + @PreAuthorize("@ss.hasPermission('wms:transactiontype: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, TransactiontypeImportExcelVo.class); + List errorList = transactiontypeService.importTransactiontypeList(list, mode, updatePart); + Map returnMap = new HashMap<>(); + returnMap.put("errorCount", errorList.size()); + if(!errorList.isEmpty()) { + String url = ExcelUtils.writeLocalFile("仓库导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xls", "错误列表", errorList); + returnMap.put("errorFile", url); + } + return success(returnMap); + } + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/transactiontype/vo/TransactiontypeImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/transactiontype/vo/TransactiontypeImportExcelVo.java new file mode 100644 index 00000000..d1adc0ba --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/transactiontype/vo/TransactiontypeImportExcelVo.java @@ -0,0 +1,63 @@ +package com.win.module.wms.controller.transactiontype.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 io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 +public class TransactiontypeImportExcelVo { + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty("库存动作") + private String inventoryAction; + + @ExcelProperty(value = "生效时间") + @ColumnWidth(value = 16) + private LocalDateTime activeTime; + + @ExcelProperty(value = "失效时间") + @ColumnWidth(value = 16) + private LocalDateTime expireTime; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty(value = "允许为负数", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String allowNegative; + + @ExcelProperty(value = "是否为空", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String available; + + @ExcelProperty(value = "是否软删除", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String isSoftDeleted; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/warehouse/WarehouseController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/warehouse/WarehouseController.java index e7cf8a1f..d5bd947a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/warehouse/WarehouseController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/warehouse/WarehouseController.java @@ -2,25 +2,33 @@ package com.win.module.wms.controller.warehouse; import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.PageResult; +import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.operatelog.core.annotations.OperateLog; +import com.win.module.wms.controller.itembasic.vo.ItembasicImportExcelVo; + import com.win.module.wms.controller.warehouse.vo.*; +import com.win.module.wms.controller.workshop.vo.WorkshopImportExcelVo; import com.win.module.wms.convert.warehouse.WarehouseConvert; import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.warehouse.WarehouseService; 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.Collection; -import java.util.List; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.*; import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @@ -95,5 +103,46 @@ public class WarehouseController { List datas = WarehouseConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "仓库.xls", "数据", WarehouseExcelVO.class, datas); } + @GetMapping("/get-import-template") + @Operation(summary = "获得导入仓库信息模板") + public void importTemplate(HttpServletResponse response) throws IOException { + // 手动创建导出 demo + List list = Arrays.asList( + ); + // 手动创建导出 demo + Map mapDropDown = new HashMap<>(); + String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); + mapDropDown.put(4, available); + // 输出 + + // 输出 + ExcelUtils.write(response, "仓库导入模板.xls", "仓库列表", WarehouseImportExcelVo.class, list,mapDropDown); + } + + + @PostMapping("/import") + @Operation(summary = "导入仓库信息") + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), + @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") + }) + @PreAuthorize("@ss.hasPermission('wms:warehouse: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, WarehouseImportExcelVo.class); + List errorList = warehouseService.importWarehouseList(list, mode, updatePart); + Map returnMap = new HashMap<>(); + returnMap.put("errorCount", errorList.size()); + if(!errorList.isEmpty()) { + String url = ExcelUtils.writeLocalFile("仓库导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xls", "错误列表", errorList); + returnMap.put("errorFile", url); + } + return success(returnMap); + } + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/warehouse/vo/WarehouseImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/warehouse/vo/WarehouseImportExcelVo.java new file mode 100644 index 00000000..f3bc95f4 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/warehouse/vo/WarehouseImportExcelVo.java @@ -0,0 +1,58 @@ +package com.win.module.wms.controller.warehouse.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 io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 +public class WarehouseImportExcelVo { + + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty(value = "类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.WAREHOUSE_TYPE) + private String type; + + @ExcelProperty(value = "是否可用", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String available; + + @ExcelProperty(value = "生效时间") + @ColumnWidth(value = 16) + private LocalDateTime activeTime; + + @ExcelProperty(value = "失效时间") + @ColumnWidth(value = 16) + private LocalDateTime expireTime; + + @ExcelProperty("备注") + private String remark; + + +} \ No newline at end of file diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workshop/WorkshopController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workshop/WorkshopController.java index 412facfb..c821df58 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workshop/WorkshopController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workshop/WorkshopController.java @@ -2,25 +2,30 @@ package com.win.module.wms.controller.workshop; import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.PageResult; +import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.module.wms.controller.workshop.vo.*; import com.win.module.wms.convert.workshop.WorkshopConvert; import com.win.module.wms.dal.dataobject.workshop.WorkshopDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.workshop.WorkshopService; 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.Collection; -import java.util.List; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.*; import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @@ -96,4 +101,39 @@ public class WorkshopController { ExcelUtils.write(response, "车间.xls", "数据", WorkshopExcelVO.class, datas); } + @GetMapping("/get-import-template") + @Operation(summary = "获得导入车间板模") + public void importTemplate(HttpServletResponse response) throws IOException { + // 手动创建导出 demo + List list = Arrays.asList(); + Map mapDropDown = new HashMap<>(); + String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); + mapDropDown.put(6, available); + // 输出 + ExcelUtils.write(response, "车间导入模板.xls", "车间列表", WorkshopImportExcelVo.class, list,mapDropDown); + } + + @PostMapping("/import") + @Operation(summary = "导入车间信息") + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), + @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") + }) + @PreAuthorize("@ss.hasPermission('wms:workshop: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, WorkshopImportExcelVo.class); + List errorList = workshopService.importUserList(list, mode, updatePart); + Map returnMap = new HashMap<>(); + returnMap.put("errorCount", errorList.size()); + if(!errorList.isEmpty()) { + String url = ExcelUtils.writeLocalFile("车间导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xls", "错误列表", errorList); + returnMap.put("errorFile", url); + } + return success(returnMap); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workshop/vo/WorkshopImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workshop/vo/WorkshopImportExcelVo.java new file mode 100644 index 00000000..8703d50e --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workshop/vo/WorkshopImportExcelVo.java @@ -0,0 +1,54 @@ +package com.win.module.wms.controller.workshop.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.time.LocalDateTime; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 + +public class WorkshopImportExcelVo { + + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty(value = "类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.WORKSHOP_TYPE) + private String type; + + + @ExcelProperty(value = "是否可用", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String available; + + @ExcelProperty(value = "生效时间") + @ColumnWidth(value = 16) + private LocalDateTime activeTime; + + @ExcelProperty(value = "失效时间") + @ColumnWidth(value = 16) + private LocalDateTime expireTime; + + @ExcelProperty("备注") + private String remark; + +} \ No newline at end of file diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/transactiontype/TransactiontypeConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/transactiontype/TransactiontypeConvert.java index 65a4e3f6..5de1ee1c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/transactiontype/TransactiontypeConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/transactiontype/TransactiontypeConvert.java @@ -4,10 +4,9 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.transactiontype.vo.TransactiontypeCreateReqVO; -import com.win.module.wms.controller.transactiontype.vo.TransactiontypeExcelVO; -import com.win.module.wms.controller.transactiontype.vo.TransactiontypeRespVO; -import com.win.module.wms.controller.transactiontype.vo.TransactiontypeUpdateReqVO; +import com.win.module.wms.controller.transactiontype.vo.*; +import com.win.module.wms.controller.warehouse.vo.WarehouseImportExcelVo; +import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; @@ -34,4 +33,7 @@ public interface TransactiontypeConvert { List convertList02(List list); + TransactiontypeDO convert(TransactiontypeExcelVO bean); + + TransactiontypeDO convert(TransactiontypeImportExcelVo bean); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/warehouse/WarehouseConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/warehouse/WarehouseConvert.java index 3a31e694..e9f5db22 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/warehouse/WarehouseConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/warehouse/WarehouseConvert.java @@ -4,10 +4,11 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.warehouse.vo.WarehouseCreateReqVO; -import com.win.module.wms.controller.warehouse.vo.WarehouseExcelVO; -import com.win.module.wms.controller.warehouse.vo.WarehouseRespVO; -import com.win.module.wms.controller.warehouse.vo.WarehouseUpdateReqVO; +import com.win.module.wms.controller.areabasic.vo.AreabasicImportExcelVo; +import com.win.module.wms.controller.warehouse.vo.*; +import com.win.module.wms.controller.workshop.vo.WorkshopImportExcelVo; +import com.win.module.wms.dal.dataobject.areabasic.AreabasicDO; +import com.win.module.wms.dal.dataobject.workshop.WorkshopDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; @@ -34,4 +35,6 @@ public interface WarehouseConvert { List convertList02(List list); + WarehouseDO convert(WarehouseImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/workshop/WorkshopConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/workshop/WorkshopConvert.java index b7bd3a15..d2a317ab 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/workshop/WorkshopConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/workshop/WorkshopConvert.java @@ -4,10 +4,11 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.workshop.vo.WorkshopCreateReqVO; -import com.win.module.wms.controller.workshop.vo.WorkshopExcelVO; -import com.win.module.wms.controller.workshop.vo.WorkshopRespVO; -import com.win.module.wms.controller.workshop.vo.WorkshopUpdateReqVO; +import com.win.module.wms.controller.areabasic.vo.AreabasicImportExcelVo; +import com.win.module.wms.controller.itembasic.vo.ItembasicExcelVO; +import com.win.module.wms.controller.workshop.vo.*; +import com.win.module.wms.dal.dataobject.areabasic.AreabasicDO; +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.workshop.WorkshopDO; @@ -34,4 +35,5 @@ public interface WorkshopConvert { List convertList02(List list); + WorkshopDO convert(WorkshopImportExcelVo importWorkshop); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/transactiontype/TransactiontypeMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/transactiontype/TransactiontypeMapper.java index 280f6e57..0b545b2a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/transactiontype/TransactiontypeMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/transactiontype/TransactiontypeMapper.java @@ -8,6 +8,8 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.transactiontype.vo.TransactiontypeExportReqVO; import com.win.module.wms.controller.transactiontype.vo.TransactiontypePageReqVO; import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; +import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; +import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +20,11 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface TransactiontypeMapper extends BaseMapperX { + + default TransactiontypeDO selectByCode(String code) { + return selectOne(TransactiontypeDO::getCode, code); + } + default PageResult selectPage(TransactiontypePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(TransactiontypeDO::getCode, reqVO.getCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/warehouse/WarehouseMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/warehouse/WarehouseMapper.java index b6e5c531..39c9b0c1 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/warehouse/WarehouseMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/warehouse/WarehouseMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.warehouse.vo.WarehouseExportReqVO; import com.win.module.wms.controller.warehouse.vo.WarehousePageReqVO; import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; +import com.win.module.wms.dal.dataobject.workshop.WorkshopDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +19,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface WarehouseMapper extends BaseMapperX { + default WarehouseDO selectByCode(String code) { + return selectOne(WarehouseDO::getCode, code); + } default PageResult selectPage(WarehousePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(WarehouseDO::getCode, reqVO.getCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/workshop/WorkshopMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/workshop/WorkshopMapper.java index 0a1ed25b..9e1e6ac7 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/workshop/WorkshopMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/workshop/WorkshopMapper.java @@ -7,6 +7,7 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.workshop.vo.WorkshopExportReqVO; import com.win.module.wms.controller.workshop.vo.WorkshopPageReqVO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.workshop.WorkshopDO; import org.apache.ibatis.annotations.Mapper; @@ -18,6 +19,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface WorkshopMapper extends BaseMapperX { + default WorkshopDO selectByCode(String code) { + return selectOne(WorkshopDO::getCode, code); + } default PageResult selectPage(WorkshopPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(WorkshopDO::getCode, reqVO.getCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeService.java index bf9c0619..10b4403e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeService.java @@ -7,6 +7,9 @@ import com.win.module.wms.controller.transactiontype.vo.TransactiontypeCreateReq import com.win.module.wms.controller.transactiontype.vo.TransactiontypeExportReqVO; import com.win.module.wms.controller.transactiontype.vo.TransactiontypePageReqVO; import com.win.module.wms.controller.transactiontype.vo.TransactiontypeUpdateReqVO; +import com.win.module.wms.controller.transactiontype.vo.TransactiontypeImportExcelVo; +import com.win.module.wms.controller.warehouse.vo.WarehouseImportExcelVo; +import com.win.module.wms.controller.workshop.vo.WorkshopImportExcelVo; import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +74,10 @@ public interface TransactiontypeService { */ List getTransactiontypeList(TransactiontypeExportReqVO exportReqVO); + + List importTransactiontypeList(List importWarehouse, Integer mode, boolean updatePart); } + + + + diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeServiceImpl.java index 566b6885..c04ba3b3 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/transactiontype/TransactiontypeServiceImpl.java @@ -1,23 +1,35 @@ package com.win.module.wms.service.transactiontype; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.annotations.VisibleForTesting; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.datapermission.core.util.DataPermissionUtils; import com.win.module.wms.controller.transactiontype.vo.TransactiontypeCreateReqVO; import com.win.module.wms.controller.transactiontype.vo.TransactiontypeExportReqVO; import com.win.module.wms.controller.transactiontype.vo.TransactiontypePageReqVO; import com.win.module.wms.controller.transactiontype.vo.TransactiontypeUpdateReqVO; +import com.win.module.wms.controller.transactiontype.vo.TransactiontypeImportExcelVo; +import com.win.module.wms.convert.transactiontype.TransactiontypeConvert; +import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import java.util.*; -import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.convert.transactiontype.TransactiontypeConvert; import com.win.module.wms.dal.mysql.transactiontype.TransactiontypeMapper; +; 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.ErrorCodeConstants.*; +import static com.win.module.wms.enums.transactiontype.ErrorCodeConstants.*; + /** * 事务类型 Service 实现类 @@ -59,7 +71,7 @@ public class TransactiontypeServiceImpl implements TransactiontypeService { private void validateTransactiontypeExists(Long id) { if (transactiontypeMapper.selectById(id) == null) { - throw exception(TRANSACTIONTYPE_NOT_EXISTS); + throw exception(NOT_EXISTS); } } @@ -82,5 +94,90 @@ public class TransactiontypeServiceImpl implements TransactiontypeService { public List getTransactiontypeList(TransactiontypeExportReqVO exportReqVO) { return transactiontypeMapper.selectList(exportReqVO); } + public List importTransactiontypeList(List transactiontypes, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(transactiontypes)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + transactiontypes.forEach(transactiontype -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateTransactiontypeForCreateOrUpdate(null,transactiontype.getCode(),transactiontype.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(transactiontype); + return; + } + + // 判断如果不存在,在进行插入 + TransactiontypeDO existTransactiontype = transactiontypeMapper.selectByCode(transactiontype.getCode()); + if (existTransactiontype == null&& mode != 3) { + transactiontypeMapper.insert(TransactiontypeConvert.INSTANCE.convert(transactiontype)); + } + else if (existTransactiontype != null && mode != 2) {// 如果存在,判断是否允许更新 + TransactiontypeDO transactiontypeDO = TransactiontypeConvert.INSTANCE.convert(transactiontype); + transactiontypeDO.setId(existTransactiontype.getId()); + transactiontypeMapper.updateById(transactiontypeDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateTransactiontypeForCreateOrUpdate(Long id, String code, String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateTransactiontypepExists(id); + // 校验code唯一 + validateCodeExists(id,code); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateTransactiontypepExists(Long id) { + if (id == null) { + return; + } + TransactiontypeDO transactiontype = transactiontypeMapper.selectById(id); + if (transactiontype == null) { + throw exception(TRANSACTIONTYPE_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String code) { + if (code.isEmpty()) { + throw exception(CODE_EXISTSNO); + } + if (StrUtil.isBlank(code)) { + return; + } + TransactiontypeDO transactiontype = transactiontypeMapper.selectByCode(code); + if (transactiontype == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(TRANSACTIONTYPE_CODE_EXISTS); + } + if (!transactiontype.getId().equals(id)) { + throw exception(CODE_EXISTSNO); + } + } + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(TRANSACTIONTYPE_AVAIABLE_NOT_EXISTS); + } + } + + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseService.java index 1857fa10..34e83383 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseService.java @@ -3,10 +3,8 @@ package com.win.module.wms.service.warehouse; import java.util.*; import javax.validation.*; -import com.win.module.wms.controller.warehouse.vo.WarehouseCreateReqVO; -import com.win.module.wms.controller.warehouse.vo.WarehouseExportReqVO; -import com.win.module.wms.controller.warehouse.vo.WarehousePageReqVO; -import com.win.module.wms.controller.warehouse.vo.WarehouseUpdateReqVO; +import com.win.module.wms.controller.itembasic.vo.ItembasicImportExcelVo; +import com.win.module.wms.controller.warehouse.vo.*; import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +69,7 @@ public interface WarehouseService { */ List getWarehouseList(WarehouseExportReqVO exportReqVO); + + List importWarehouseList(List warehouses, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseServiceImpl.java index 02a9369f..f19bc23f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/warehouse/WarehouseServiceImpl.java @@ -1,22 +1,40 @@ package com.win.module.wms.service.warehouse; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.annotations.VisibleForTesting; +import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.PageResult; +import com.win.framework.datapermission.core.util.DataPermissionUtils; import com.win.module.wms.controller.warehouse.vo.WarehouseCreateReqVO; import com.win.module.wms.controller.warehouse.vo.WarehouseExportReqVO; import com.win.module.wms.controller.warehouse.vo.WarehousePageReqVO; import com.win.module.wms.controller.warehouse.vo.WarehouseUpdateReqVO; +import com.win.module.wms.controller.warehouse.vo.WarehouseImportExcelVo; +import com.win.module.wms.controller.warehouse.vo.WarehouseImportExcelVo; import com.win.module.wms.convert.warehouse.WarehouseConvert; +import com.win.module.wms.convert.warehouse.WarehouseConvert; +import com.win.module.wms.convert.warehouse.WarehouseConvert; +import com.win.module.wms.convert.workshop.WorkshopConvert; +import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; +import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; import com.win.module.wms.dal.dataobject.warehouse.WarehouseDO; import com.win.module.wms.dal.mysql.warehouse.WarehouseMapper; import org.springframework.stereotype.Service; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.win.module.wms.enums.warehouse.ErrorCodeConstants.WAREHOUSE_NOT_EXISTS; +import static com.win.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; + +import static com.win.module.wms.enums.warehouse.ErrorCodeConstants.*; + + /** * 仓库 Service 实现类 @@ -32,6 +50,8 @@ public class WarehouseServiceImpl implements WarehouseService { @Override public Long createWarehouse(WarehouseCreateReqVO createReqVO) { + validateWarehouseForCreateOrUpdate(createReqVO.getId(),createReqVO.getCode(),createReqVO.getAvailable()); + // 插入 WarehouseDO warehouse = WarehouseConvert.INSTANCE.convert(createReqVO); warehouseMapper.insert(warehouse); @@ -42,7 +62,7 @@ public class WarehouseServiceImpl implements WarehouseService { @Override public void updateWarehouse(WarehouseUpdateReqVO updateReqVO) { // 校验存在 - validateWarehouseExists(updateReqVO.getId()); + validateWarehouseForCreateOrUpdate(updateReqVO.getId(),updateReqVO.getCode(),updateReqVO.getAvailable()); // 更新 WarehouseDO updateObj = WarehouseConvert.INSTANCE.convert(updateReqVO); warehouseMapper.updateById(updateObj); @@ -82,4 +102,88 @@ public class WarehouseServiceImpl implements WarehouseService { return warehouseMapper.selectList(exportReqVO); } + public List importWarehouseList(List warehouses, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(warehouses)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + warehouses.forEach(warehouse -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateWarehouseForCreateOrUpdate(null,warehouse.getCode(),warehouse.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(warehouse); + return; + } + + // 判断如果不存在,在进行插入 + WarehouseDO existWarehouse = warehouseMapper.selectByCode(warehouse.getCode()); + if (existWarehouse == null&& mode != 3) { + warehouseMapper.insert(WarehouseConvert.INSTANCE.convert(warehouse)); + } + else if (existWarehouse != null && mode != 2) {// 如果存在,判断是否允许更新 + WarehouseDO warehouseDO = WarehouseConvert.INSTANCE.convert(warehouse); + warehouseDO.setId(existWarehouse.getId()); + warehouseMapper.updateById(warehouseDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateWarehouseForCreateOrUpdate(Long id, String code, String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateWarehousepExists(id); + // 校验code唯一 + validateCodeExists(id,code); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateWarehousepExists(Long id) { + if (id == null) { + return; + } + WarehouseDO warehouse = warehouseMapper.selectById(id); + if (warehouse == null) { + throw exception(WAREHOUSE_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String code) { + if (code.isEmpty()) { + throw exception(WAREHOUSE_CODE_EXISTS); + } + if (StrUtil.isBlank(code)) { + return; + } + WarehouseDO warehouse = warehouseMapper.selectByCode(code); + if (warehouse == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(WAREHOUSE_CODE_EXISTS); + } + if (!warehouse.getId().equals(id)) { + throw exception(WAREHOUSE_CODE_EXISTS); + } + } + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(WAREHOUSE_AVAIABLE_NOT_EXISTS); + } + } + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopService.java index 90dbfe16..11e8b827 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopService.java @@ -3,10 +3,8 @@ package com.win.module.wms.service.workshop; import java.util.*; import javax.validation.*; -import com.win.module.wms.controller.workshop.vo.WorkshopCreateReqVO; -import com.win.module.wms.controller.workshop.vo.WorkshopExportReqVO; -import com.win.module.wms.controller.workshop.vo.WorkshopPageReqVO; -import com.win.module.wms.controller.workshop.vo.WorkshopUpdateReqVO; +import com.win.module.wms.controller.itembasic.vo.ItembasicImportExcelVo; +import com.win.module.wms.controller.workshop.vo.*; import com.win.module.wms.dal.dataobject.workshop.WorkshopDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +69,6 @@ public interface WorkshopService { */ List getWorkshopList(WorkshopExportReqVO exportReqVO); + List importUserList(List importWorkshop, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopServiceImpl.java index 5dc49f7b..c082c62e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workshop/WorkshopServiceImpl.java @@ -1,22 +1,34 @@ package com.win.module.wms.service.workshop; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.util.StrUtil; +import com.google.common.annotations.VisibleForTesting; +import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.workshop.vo.WorkshopCreateReqVO; -import com.win.module.wms.controller.workshop.vo.WorkshopExportReqVO; -import com.win.module.wms.controller.workshop.vo.WorkshopPageReqVO; -import com.win.module.wms.controller.workshop.vo.WorkshopUpdateReqVO; +import com.win.framework.datapermission.core.util.DataPermissionUtils; +import com.win.module.wms.controller.itembasic.vo.ItembasicImportExcelVo; +import com.win.module.wms.controller.workshop.vo.*; +import com.win.module.wms.convert.itembasic.ItembasicConvert; import com.win.module.wms.convert.workshop.WorkshopConvert; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.workshop.WorkshopDO; import com.win.module.wms.dal.mysql.workshop.WorkshopMapper; +import net.sf.jsqlparser.expression.DateTimeLiteralExpression; import org.springframework.stereotype.Service; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.win.module.wms.enums.workshop.ErrorCodeConstants.WORKSHOP_NOT_EXISTS; +import static com.win.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; + + +import static com.win.module.wms.enums.workshop.ErrorCodeConstants.*; /** * 车间 Service 实现类 @@ -32,6 +44,7 @@ public class WorkshopServiceImpl implements WorkshopService { @Override public Long createWorkshop(WorkshopCreateReqVO createReqVO) { + validateWorkshopForCreateOrUpdate(createReqVO.getId(),createReqVO.getCode(),createReqVO.getAvailable()); // 插入 WorkshopDO workshop = WorkshopConvert.INSTANCE.convert(createReqVO); workshopMapper.insert(workshop); @@ -42,7 +55,7 @@ public class WorkshopServiceImpl implements WorkshopService { @Override public void updateWorkshop(WorkshopUpdateReqVO updateReqVO) { // 校验存在 - validateWorkshopExists(updateReqVO.getId()); + validateWorkshopForCreateOrUpdate(updateReqVO.getId(),updateReqVO.getCode(),updateReqVO.getAvailable()); // 更新 WorkshopDO updateObj = WorkshopConvert.INSTANCE.convert(updateReqVO); workshopMapper.updateById(updateObj); @@ -82,4 +95,86 @@ public class WorkshopServiceImpl implements WorkshopService { return workshopMapper.selectList(exportReqVO); } + public List importUserList(List importWork, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(importWork)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + importWork.forEach(importWorkshop -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateWorkshopForCreateOrUpdate(null,importWorkshop.getCode(),importWorkshop.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(importWorkshop); + return; + } + + // 判断如果不存在,在进行插入 + WorkshopDO existWorkshop = workshopMapper.selectByCode(importWorkshop.getCode()); + if (existWorkshop == null&& mode != 3) { + workshopMapper.insert(WorkshopConvert.INSTANCE.convert(importWorkshop)); + } + else if (existWorkshop != null && mode != 2) {// 如果存在,判断是否允许更新 + WorkshopDO workshopDO = WorkshopConvert.INSTANCE.convert(importWorkshop); + workshopDO.setId(existWorkshop.getId()); + workshopMapper.updateById(workshopDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateWorkshopForCreateOrUpdate(Long id, String code, String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateWorkshoppExists(id); + // 校验code唯一 + validateCodeExists(id,code); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateWorkshoppExists(Long id) { + if (id == null) { + return; + } + WorkshopDO workshop = workshopMapper.selectById(id); + if (workshop == null) { + throw exception(WORKSHOP_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String code) { + if (code.isEmpty()) { + throw exception(CODE_EXISTSNO); + } + if (StrUtil.isBlank(code)) { + return; + } + WorkshopDO workshop = workshopMapper.selectByCode(code); + if (workshop == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(CODE_EXISTS); + } + if (!workshop.getId().equals(id)) { + throw exception(CODE_EXISTS); + } + } + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(AVAIABLE_NOT_EXISTS); + } + } + }