From 9ba08ff35b0b48abb98115e6e3c78bf4abfc8261 Mon Sep 17 00:00:00 2001 From: "hongxi.lian" Date: Mon, 16 Oct 2023 17:22:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=96=B9=E6=B3=95=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/enums/rule/ErrorCodeConstants.java | 18 +++ .../enums/saleprice/ErrorCodeConstants.java | 11 +- .../wms/enums/shift/ErrorCodeConstants.java | 20 +++ .../stdcostprice/ErrorCodeConstants.java | 8 ++ .../enums/supplier/ErrorCodeConstants.java | 8 +- .../supplieritem/ErrorCodeConstants.java | 13 +- .../systemcalendar/ErrorCodeConstants.java | 5 + .../wms/controller/rule/RuleController.java | 50 +++++++ .../controller/rule/vo/RuleImportExcelVo.java | 50 +++++++ .../saleprice/SalepriceController.java | 51 ++++++- .../saleprice/vo/SalepriceImportExcelVo.java | 57 ++++++++ .../wms/controller/shift/ShiftController.java | 54 +++++++- .../shift/vo/ShiftImportExcelVo.java | 66 +++++++++ .../stdcostprice/StdcostpriceController.java | 54 +++++++- .../vo/StdcostpriceImportExcelVo.java | 58 ++++++++ .../supplier/SupplierController.java | 51 ++++++- .../supplier/vo/SupplierImportExcelVo.java | 90 ++++++++++++ .../supplieritem/SupplieritemController.java | 51 ++++++- .../vo/SupplieriteamImportExcelVo.java | 87 ++++++++++++ .../SystemcalendarController.java | 54 +++++++- .../vo/SystemcalendarImportExcelVo.java | 57 ++++++++ .../module/wms/convert/rule/RuleConvert.java | 11 +- .../convert/saleprice/SalepriceConvert.java | 4 +- .../wms/convert/shift/ShiftConvert.java | 4 +- .../stdcostprice/StdcostpriceConvert.java | 9 +- .../wms/convert/supplier/SupplierConvert.java | 7 +- .../supplieritem/SupplieritemConvert.java | 3 + .../systemcalendar/SystemcalendarConvert.java | 3 + .../module/wms/dal/mysql/rule/RuleMapper.java | 5 + .../dal/mysql/saleprice/SalepriceMapper.java | 5 + .../wms/dal/mysql/shift/ShiftMapper.java | 4 + .../stdcostprice/StdcostpriceMapper.java | 4 + .../dal/mysql/supplier/SupplierMapper.java | 4 + .../supplieritem/SupplieritemMapper.java | 5 + .../systemcalendar/SystemcalendarMapper.java | 4 + .../module/wms/service/rule/RuleService.java | 6 +- .../wms/service/rule/RuleServiceImpl.java | 107 +++++++++++++- .../service/saleprice/SalepriceService.java | 5 +- .../saleprice/SalepriceServiceImpl.java | 127 +++++++++++++++++ .../wms/service/shift/ShiftService.java | 8 +- .../wms/service/shift/ShiftServiceImpl.java | 131 +++++++++++++++++- .../stdcostprice/StdcostpriceService.java | 5 +- .../stdcostprice/StdcostpriceServiceImpl.java | 122 +++++++++++++++- .../wms/service/supplier/SupplierService.java | 8 +- .../service/supplier/SupplierServiceImpl.java | 118 +++++++++++++++- .../supplieritem/SupplieritemService.java | 3 + .../supplieritem/SupplieritemServiceImpl.java | 115 ++++++++++++++- .../systemcalendar/SystemcalendarService.java | 10 +- .../SystemcalendarServiceImpl.java | 99 +++++++++++++ 49 files changed, 1795 insertions(+), 54 deletions(-) create mode 100644 win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/rule/ErrorCodeConstants.java create mode 100644 win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/shift/ErrorCodeConstants.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/rule/vo/RuleImportExcelVo.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/saleprice/vo/SalepriceImportExcelVo.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/shift/vo/ShiftImportExcelVo.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/stdcostprice/vo/StdcostpriceImportExcelVo.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplier/vo/SupplierImportExcelVo.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieriteamImportExcelVo.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/systemcalendar/vo/SystemcalendarImportExcelVo.java diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/rule/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/rule/ErrorCodeConstants.java new file mode 100644 index 00000000..9869d8d6 --- /dev/null +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/rule/ErrorCodeConstants.java @@ -0,0 +1,18 @@ +package com.win.module.wms.enums.rule; + +import com.win.framework.common.exception.ErrorCode; + +/** + * System 错误码枚举类 + * + * system 系统,使用 1-002-000-000 段 + */ +public interface ErrorCodeConstants { + + ErrorCode RULE_NOT_EXISTS = new ErrorCode(1_000_045_000, "规则不存在"); + + ErrorCode RULE_STRATEGYCODE_NOT_EXISTS = new ErrorCode(1_000_045_001, "策略规则不存在"); + + ErrorCode RULE_PRIORITY_NOT_EXISTS = new ErrorCode(1_000_045_001, "策略规则不存在"); + +} diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/saleprice/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/saleprice/ErrorCodeConstants.java index 7533cfe4..86abccc8 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/saleprice/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/saleprice/ErrorCodeConstants.java @@ -9,6 +9,15 @@ import com.win.framework.common.exception.ErrorCode; */ public interface ErrorCodeConstants { - ErrorCode SALEPRICE_NOT_EXISTS = new ErrorCode(1_032_000_000, "销售价格单不存在"); + ErrorCode SALEPRICE_NOT_EXISTS = new ErrorCode(1_000_032_000, "销售价格单不存在"); + + + ErrorCode SALEPRICE_ITEMCODE_NOT_EXISTS = new ErrorCode(1_000_032_001, "物料代码不存在"); + + ErrorCode SALEPRICE_CURRENCY_NOT_EXISTS = new ErrorCode(1_000_032_002, "物料代码不存在"); + + ErrorCode SALEPRICE_PRICE_NOT_EXISTS = new ErrorCode(1_000_032_003, "价格不存在"); + + ErrorCode SALEPRICE_AVAILABLE_NOT_EXISTS = new ErrorCode(1_000_032_003, "是否可用不存在"); } diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/shift/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/shift/ErrorCodeConstants.java new file mode 100644 index 00000000..d1bbc771 --- /dev/null +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/shift/ErrorCodeConstants.java @@ -0,0 +1,20 @@ +package com.win.module.wms.enums.shift; + +import com.win.framework.common.exception.ErrorCode; + +/** + * System 错误码枚举类 + * + * system 系统,使用 1-002-000-000 段 + */ +public interface ErrorCodeConstants { + + ErrorCode SHIFT_NOT_EXISTS = new ErrorCode(1_000_057_000, "班次不存在"); + + ErrorCode SHIFT_BEGIN_TIME_NOT_EXISTS = new ErrorCode(1_000_057_001, "开始时间不存在"); + + ErrorCode SHIFT_END_TIME_NOT_EXISTS = new ErrorCode(1_000_057_002, "结束时间不存在"); + ErrorCode SHIFT_AVAIABLE_NOT_EXISTS = new ErrorCode(1_000_057_003, "是否可用不存在"); + + ErrorCode SHIFT_ENDATNEXTDAY_NOT_EXISTS = new ErrorCode(1_000_057_003, "是否跨天不存在"); +} diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/stdcostprice/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/stdcostprice/ErrorCodeConstants.java index e82d6a2d..eb36711b 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/stdcostprice/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/stdcostprice/ErrorCodeConstants.java @@ -11,4 +11,12 @@ public interface ErrorCodeConstants { ErrorCode STDCOSTPRICE_NOT_EXISTS = new ErrorCode(1_023_000_000, "标准成本价格单不存在"); + ErrorCode STDCOSTPRICE_SUPPLIER_CODE_NOT_EXISTS = new ErrorCode(1_023_000_000, "供应商代码不存在"); + + ErrorCode STDCOSTPRICE_ITEN_CODE_NOT_EXISTS = new ErrorCode(1_023_000_000, "物料代码不存在"); + + ErrorCode STDCOSTPRICE_CURRENCY_NOT_EXISTS = new ErrorCode(1_023_000_000, "物料代码不存在"); + + ErrorCode STDCOSTPRICE_AVAILABLE_NOT_EXISTS = new ErrorCode(1_023_000_000, "物料代码不存在"); + } diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplier/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplier/ErrorCodeConstants.java index 6f30a72f..71f3e192 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplier/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplier/ErrorCodeConstants.java @@ -9,6 +9,12 @@ import com.win.framework.common.exception.ErrorCode; */ public interface ErrorCodeConstants { - ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1_025_000_000, "供应商不存在"); + ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1_000_025_000, "供应商不存在"); + ErrorCode SUPPLIER_NOT_EXISTSNO = new ErrorCode(1_000_025_001, "code已存在"); + ErrorCode SUPPLIER_MOUBLE_EXISTSNO = new ErrorCode(1_000_025_002, "code已存在"); + + ErrorCode SUPPLIER_AVAILABLE_NOT_EXISTS = new ErrorCode(1_000_026_003, "是否可用不存在"); + + ErrorCode SUPPLIER_SHORTNAME_NOT_EXISTS = new ErrorCode(1_000_026_003, "简称不存在"); } diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplieritem/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplieritem/ErrorCodeConstants.java index 44473263..620443a4 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplieritem/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/supplieritem/ErrorCodeConstants.java @@ -9,6 +9,17 @@ import com.win.framework.common.exception.ErrorCode; */ public interface ErrorCodeConstants { - ErrorCode SUPPLIERITEM_NOT_EXISTS = new ErrorCode(1_026_000_000, "供应商物品不存在"); + ErrorCode SUPPLIERITEM_NOT_EXISTS = new ErrorCode(1_000_026_000, "供应商物品不存在"); + + ErrorCode SUPPLIERITEM_SUPPLIER_CODE_NOT_EXISTS = new ErrorCode(1_000_026_001, "供应商代码不存在"); + + ErrorCode SUPPLIERITEM_ITEM_CODE_NOT_EXISTS = new ErrorCode(1_000_026_002, "物料代码不存在"); + + ErrorCode SUPPLIERITEM_PACK_UNIT_NOT_EXISTS = new ErrorCode(1_000_026_003, "供应商包装单位不存在"); + + ErrorCode SUPPLIERITEM_PACK_QTY_NOT_EXISTS = new ErrorCode(1_000_026_003, "供应商包装数量不存在"); + + ErrorCode SUPPLIERITEM_AVAILABLE_NOT_EXISTS = new ErrorCode(1_000_026_003, "是否可用不存在"); + } diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/systemcalendar/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/systemcalendar/ErrorCodeConstants.java index 717b1a09..30747ea7 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/systemcalendar/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/systemcalendar/ErrorCodeConstants.java @@ -11,4 +11,9 @@ public interface ErrorCodeConstants { ErrorCode SYSTEMCALENDAR_NOT_EXISTS = new ErrorCode(1_042_000_000, "系统日历不存在"); + ErrorCode SYSTEMCALENDAR_MOUBLE_EXISTS = new ErrorCode(1_000_058_001, "code已存在"); + + ErrorCode SYSTEMCALENDAR_MOUBLE_EXISTSNO = new ErrorCode(1_049_000_002, "code已存在"); + + ErrorCode SYSTEMCALENDAR_AVAIABLE_NOT_EXISTS = new ErrorCode(1_040_000_000, "是否可用不存在"); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/rule/RuleController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/rule/RuleController.java index 7f93c560..a4fad7d5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/rule/RuleController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/rule/RuleController.java @@ -1,6 +1,10 @@ package com.win.module.wms.controller.rule; +import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.module.wms.controller.rule.vo.*; +import com.win.module.wms.controller.rule.vo.RuleImportExcelVo; +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 +15,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; @@ -27,6 +33,7 @@ import com.win.module.wms.controller.rule.vo.*; import com.win.module.wms.dal.dataobject.rule.RuleDO; import com.win.module.wms.convert.rule.RuleConvert; import com.win.module.wms.service.rule.RuleService; +import org.springframework.web.multipart.MultipartFile; @Tag(name = "管理后台 - 规则") @RestController @@ -99,4 +106,47 @@ public class RuleController { ExcelUtils.write(response, "规则.xls", "数据", RuleExcelVO.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", "规则列表", RuleImportExcelVo.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:rule: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, RuleImportExcelVo.class); + List errorList = ruleService.importRuleList(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/rule/vo/RuleImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/rule/vo/RuleImportExcelVo.java new file mode 100644 index 00000000..2106a3ea --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/rule/vo/RuleImportExcelVo.java @@ -0,0 +1,50 @@ +package com.win.module.wms.controller.rule.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.math.BigDecimal; +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 RuleImportExcelVo { + + + @ExcelProperty("策略代码") + private String strategyCode; + + @ExcelProperty("优先级") + private Integer priority; + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty("条件") + private String condition; + + @ExcelProperty("配置") + private String configuration; +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/saleprice/SalepriceController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/saleprice/SalepriceController.java index ce0be883..4b8bb14c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/saleprice/SalepriceController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/saleprice/SalepriceController.java @@ -2,25 +2,31 @@ package com.win.module.wms.controller.saleprice; 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.saleprice.vo.*; +import com.win.module.wms.controller.saleprice.vo.SalepriceImportExcelVo; import com.win.module.wms.convert.saleprice.SalepriceConvert; import com.win.module.wms.dal.dataobject.saleprice.SalepriceDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.saleprice.SalepriceService; 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 +101,46 @@ public class SalepriceController { List datas = SalepriceConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "销售价格单.xls", "数据", SalepriceExcelVO.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", "销售价格单列表", SalepriceImportExcelVo.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:saleprice: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, SalepriceImportExcelVo.class); + List errorList = salepriceService.importSalepriceList(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/saleprice/vo/SalepriceImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/saleprice/vo/SalepriceImportExcelVo.java new file mode 100644 index 00000000..99c9ff90 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/saleprice/vo/SalepriceImportExcelVo.java @@ -0,0 +1,57 @@ +package com.win.module.wms.controller.saleprice.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.math.BigDecimal; +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 SalepriceImportExcelVo { + + + @ExcelProperty("客户代码") + private String customercode; + + @ExcelProperty("物料代码") + private String itemcode; + + @ExcelProperty(value = "货币", converter = DictConvert.class) + @DictFormat(DictTypeConstants.CURRENCY) + private String currency; + + @ExcelProperty("价格") + private BigDecimal price; + + @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; +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/shift/ShiftController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/shift/ShiftController.java index 367a78dc..67247350 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/shift/ShiftController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/shift/ShiftController.java @@ -2,25 +2,31 @@ package com.win.module.wms.controller.shift; 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.shift.vo.*; +import com.win.module.wms.controller.shift.vo.ShiftImportExcelVo; import com.win.module.wms.convert.shift.ShiftConvert; import com.win.module.wms.dal.dataobject.shift.ShiftDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.shift.ShiftService; 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 +101,49 @@ public class ShiftController { List datas = ShiftConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "班次.xls", "数据", ShiftExcelVO.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", "班次列表", ShiftImportExcelVo.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:shift: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, ShiftImportExcelVo.class); + List errorList = shiftService.importShiftList(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/shift/vo/ShiftImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/shift/vo/ShiftImportExcelVo.java new file mode 100644 index 00000000..782c058e --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/shift/vo/ShiftImportExcelVo.java @@ -0,0 +1,66 @@ +package com.win.module.wms.controller.shift.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.math.BigDecimal; +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 ShiftImportExcelVo { + + + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty(value = "开始时间") + @ColumnWidth(value = 16) + private LocalDateTime beginTime; + + @ExcelProperty(value = "结束时间") + @ColumnWidth(value = 16) + private LocalDateTime entTime; + + @ExcelProperty(value = "生效时间") + @ColumnWidth(value = 16) + private LocalDateTime activeTime; + + @ExcelProperty(value = "失效时间") + @ColumnWidth(value = 16) + private LocalDateTime expireTime; + + @ExcelProperty(value = "备注") + private String remark; + + @ExcelProperty(value = "是否跨天", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String endAtNextDay; + + @ExcelProperty(value = "是否可用", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String available; +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/stdcostprice/StdcostpriceController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/stdcostprice/StdcostpriceController.java index c7bd502b..6666a13b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/stdcostprice/StdcostpriceController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/stdcostprice/StdcostpriceController.java @@ -2,25 +2,31 @@ package com.win.module.wms.controller.stdcostprice; 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.stdcostprice.vo.*; +import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceImportExcelVo; import com.win.module.wms.convert.stdcostprice.StdcostpriceConvert; import com.win.module.wms.dal.dataobject.stdcostprice.StdcostpriceDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.stdcostprice.StdcostpriceService; 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 +101,49 @@ public class StdcostpriceController { List datas = StdcostpriceConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "标准成本价格单.xls", "数据", StdcostpriceExcelVO.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", "标准成本价格单列表", StdcostpriceImportExcelVo.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:stdcostprice: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, StdcostpriceImportExcelVo.class); + List errorList = stdcostpriceService.importStdcostpriceList(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/stdcostprice/vo/StdcostpriceImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/stdcostprice/vo/StdcostpriceImportExcelVo.java new file mode 100644 index 00000000..a3dbbb8f --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/stdcostprice/vo/StdcostpriceImportExcelVo.java @@ -0,0 +1,58 @@ +package com.win.module.wms.controller.stdcostprice.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.math.BigDecimal; +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 StdcostpriceImportExcelVo { + + + @ExcelProperty("供应商代码") + private String supplierCode; + + @ExcelProperty("物料代码") + private String itemCode; + + @ExcelProperty(value = "币种", converter = DictConvert.class) + @DictFormat(DictTypeConstants.CURRENCY) + private String currency; + + @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "价格不能为空") + private BigDecimal price; + + @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(value = "备注") + private String remark; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplier/SupplierController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplier/SupplierController.java index a2eb832e..b1e2a680 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplier/SupplierController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplier/SupplierController.java @@ -2,25 +2,30 @@ package com.win.module.wms.controller.supplier; 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.supplier.vo.*; import com.win.module.wms.convert.supplier.SupplierConvert; import com.win.module.wms.dal.dataobject.supplier.SupplierDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.supplier.SupplierService; 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 +100,47 @@ public class SupplierController { List datas = SupplierConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "供应商.xls", "数据", SupplierExcelVO.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", "供应商列表", SupplierImportExcelVo.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:supper: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, SupplierImportExcelVo.class); + List errorList = supplierService.importSupplierList(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/supplier/vo/SupplierImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplier/vo/SupplierImportExcelVo.java new file mode 100644 index 00000000..9a729ccc --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplier/vo/SupplierImportExcelVo.java @@ -0,0 +1,90 @@ +package com.win.module.wms.controller.supplier.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.math.BigDecimal; +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 SupplierImportExcelVo { + + + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("简称") + private String shortName; + + @ExcelProperty("地址") + private String address; + + @ExcelProperty("国家") + private String country; + + @ExcelProperty("城市") + private String city; + + @ExcelProperty("电话") + private String phone; + + @ExcelProperty("传真") + private String fax; + + @ExcelProperty("邮编") + private String postId; + + @ExcelProperty("联系人") + private String contacts; + + @ExcelProperty("银行") + private String bank; + + @ExcelProperty(value = "币种", converter = DictConvert.class) + @DictFormat(DictTypeConstants.CURRENCY) + private String currency; + + @ExcelProperty("税率") + private BigDecimal taxRate; + + @ExcelProperty(value = "供应商类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.SUPPLIER_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(value = "备注") + private String remark; + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/SupplieritemController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/SupplieritemController.java index 11515770..b1e8e096 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/SupplieritemController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/SupplieritemController.java @@ -2,25 +2,31 @@ package com.win.module.wms.controller.supplieritem; 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.supplieritem.vo.*; + import com.win.module.wms.convert.supplieritem.SupplieritemConvert; import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.supplieritem.SupplieritemService; 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 +102,45 @@ public class SupplieritemController { ExcelUtils.write(response, "供应商物品.xls", "数据", SupplieritemExcelVO.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", "供应商物品列表", SupplieriteamImportExcelVo.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:supplieriteam: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, SupplieriteamImportExcelVo.class); + List errorList = supplieritemService.importSupplieriteamList(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/supplieritem/vo/SupplieriteamImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieriteamImportExcelVo.java new file mode 100644 index 00000000..de776e3f --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieriteamImportExcelVo.java @@ -0,0 +1,87 @@ +package com.win.module.wms.controller.supplieritem.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.math.BigDecimal; +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 SupplieriteamImportExcelVo { + + + + @ExcelProperty("供应商代码") + private String supplierCode; + + @ExcelProperty("物料代码") + private String itemCode; + + @ExcelProperty("供应商物料代码") + private String supplierItemCode; + + @ExcelProperty(value = "是否为空", converter = DictConvert.class) + @DictFormat(DictTypeConstants.UOM) + private String supplierUom; + + @ExcelProperty("转换率") + private BigDecimal convertRate; + + @ExcelProperty(value = "供应商包装单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.PACK_UNIT) + private String packUnit; + + @ExcelProperty("供应商包装数量") + private BigDecimal packQty; + + @ExcelProperty(value = "供应商代替包装单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.PACK_UNIT) + private String altPackUnit; + + @ExcelProperty("供应商代替包装数量") + private BigDecimal altPackQty; + + @ExcelProperty("每器具包装数") + private Integer packQtyOfContainer; + + @ExcelProperty("默认收货仓库") + private String defaultWarehouseCode; + + @ExcelProperty("默认收货库位") + private String defaultLocationCode; + + @ExcelProperty(value = "包装结算方式", converter = DictConvert.class) + @DictFormat(DictTypeConstants.SETTLEMENT_TYPE) + private String settlementType; + + @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; +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/systemcalendar/SystemcalendarController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/systemcalendar/SystemcalendarController.java index fd7e0276..0bc6ef8b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/systemcalendar/SystemcalendarController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/systemcalendar/SystemcalendarController.java @@ -2,25 +2,31 @@ package com.win.module.wms.controller.systemcalendar; 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.systemcalendar.vo.*; +import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarImportExcelVo; import com.win.module.wms.convert.systemcalendar.SystemcalendarConvert; import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; +import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.systemcalendar.SystemcalendarService; 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 +101,49 @@ public class SystemcalendarController { List datas = SystemcalendarConvert.INSTANCE.convertList02(list); ExcelUtils.write(response, "系统日历.xls", "数据", SystemcalendarExcelVO.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", "班组列表", SystemcalendarImportExcelVo.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:systemcalendar: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, SystemcalendarImportExcelVo.class); + List errorList = systemcalendarService.importSystemcalendarList(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/systemcalendar/vo/SystemcalendarImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/systemcalendar/vo/SystemcalendarImportExcelVo.java new file mode 100644 index 00000000..9fd485b0 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/systemcalendar/vo/SystemcalendarImportExcelVo.java @@ -0,0 +1,57 @@ +package com.win.module.wms.controller.systemcalendar.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 SystemcalendarImportExcelVo { + + + @ExcelProperty("模块") + private String module; + + @ExcelProperty(value = "开始时间") + @ColumnWidth(value = 16) + private LocalDateTime startTime; + + @ExcelProperty(value = "结束时间") + @ColumnWidth(value = 16) + private LocalDateTime stopTime; + + @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; + + + + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/rule/RuleConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/rule/RuleConvert.java index 0b47a14a..2f46099c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/rule/RuleConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/rule/RuleConvert.java @@ -4,13 +4,12 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.rule.vo.RuleCreateReqVO; -import com.win.module.wms.controller.rule.vo.RuleExcelVO; -import com.win.module.wms.controller.rule.vo.RuleRespVO; -import com.win.module.wms.controller.rule.vo.RuleUpdateReqVO; +import com.win.module.wms.controller.rule.vo.*; +import com.win.module.wms.controller.saleprice.vo.SalepriceImportExcelVo; +import com.win.module.wms.dal.dataobject.saleprice.SalepriceDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; -import com.win.module.wms.dal.dataobject.rule.RuleDO; +import com.win.module.wms.dal.dataobject.rule.*; /** * 规则 Convert @@ -34,4 +33,6 @@ public interface RuleConvert { List convertList02(List list); + RuleDO convert(RuleImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/saleprice/SalepriceConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/saleprice/SalepriceConvert.java index 5135d8cf..d3981eeb 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/saleprice/SalepriceConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/saleprice/SalepriceConvert.java @@ -7,7 +7,7 @@ import com.win.framework.common.pojo.PageResult; import com.win.module.wms.controller.saleprice.vo.SalepriceCreateReqVO; import com.win.module.wms.controller.saleprice.vo.SalepriceExcelVO; import com.win.module.wms.controller.saleprice.vo.SalepriceRespVO; -import com.win.module.wms.controller.saleprice.vo.SalepriceUpdateReqVO; +import com.win.module.wms.controller.saleprice.vo.*; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.saleprice.SalepriceDO; @@ -34,4 +34,6 @@ public interface SalepriceConvert { List convertList02(List list); + SalepriceDO convert(SalepriceImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/shift/ShiftConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/shift/ShiftConvert.java index d08ca81e..db78ae04 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/shift/ShiftConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/shift/ShiftConvert.java @@ -7,7 +7,7 @@ import com.win.framework.common.pojo.PageResult; import com.win.module.wms.controller.shift.vo.ShiftCreateReqVO; import com.win.module.wms.controller.shift.vo.ShiftExcelVO; import com.win.module.wms.controller.shift.vo.ShiftRespVO; -import com.win.module.wms.controller.shift.vo.ShiftUpdateReqVO; +import com.win.module.wms.controller.shift.vo.*; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.shift.ShiftDO; @@ -34,4 +34,6 @@ public interface ShiftConvert { List convertList02(List list); + ShiftDO convert(ShiftImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/stdcostprice/StdcostpriceConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/stdcostprice/StdcostpriceConvert.java index 87332dc4..4cb89c5e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/stdcostprice/StdcostpriceConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/stdcostprice/StdcostpriceConvert.java @@ -4,10 +4,9 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceCreateReqVO; -import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceExcelVO; -import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceRespVO; -import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceUpdateReqVO; +import com.win.module.wms.controller.stdcostprice.vo.*; +import com.win.module.wms.controller.supplier.vo.SupplierImportExcelVo; +import com.win.module.wms.dal.dataobject.supplier.SupplierDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.stdcostprice.StdcostpriceDO; @@ -34,4 +33,6 @@ public interface StdcostpriceConvert { List convertList02(List list); + StdcostpriceDO convert(StdcostpriceImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplier/SupplierConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplier/SupplierConvert.java index db0d6921..844fedcf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplier/SupplierConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplier/SupplierConvert.java @@ -4,10 +4,7 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.supplier.vo.SupplierCreateReqVO; -import com.win.module.wms.controller.supplier.vo.SupplierExcelVO; -import com.win.module.wms.controller.supplier.vo.SupplierRespVO; -import com.win.module.wms.controller.supplier.vo.SupplierUpdateReqVO; +import com.win.module.wms.controller.supplier.vo.*; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.supplier.SupplierDO; @@ -34,4 +31,6 @@ public interface SupplierConvert { List convertList02(List list); + SupplierDO convert(SupplierImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplieritem/SupplieritemConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplieritem/SupplieritemConvert.java index 752f1a71..ab6c60b5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplieritem/SupplieritemConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplieritem/SupplieritemConvert.java @@ -8,6 +8,7 @@ import com.win.module.wms.controller.supplieritem.vo.SupplieritemCreateReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemExcelVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemRespVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemUpdateReqVO; +import com.win.module.wms.controller.supplieritem.vo.SupplieriteamImportExcelVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; @@ -34,4 +35,6 @@ public interface SupplieritemConvert { List convertList02(List list); + SupplieritemDO convert(SupplieriteamImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/systemcalendar/SystemcalendarConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/systemcalendar/SystemcalendarConvert.java index 5e0776ef..05e47dcd 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/systemcalendar/SystemcalendarConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/systemcalendar/SystemcalendarConvert.java @@ -8,6 +8,7 @@ import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarCreateReqVO import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarExcelVO; import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarRespVO; import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarUpdateReqVO; +import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarImportExcelVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; @@ -34,4 +35,6 @@ public interface SystemcalendarConvert { List convertList02(List list); + SystemcalendarDO convert(SystemcalendarImportExcelVo bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/rule/RuleMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/rule/RuleMapper.java index cfb59a0b..a62b44b0 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/rule/RuleMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/rule/RuleMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.rule.vo.RuleExportReqVO; import com.win.module.wms.controller.rule.vo.RulePageReqVO; import com.win.module.wms.dal.dataobject.rule.RuleDO; +import com.win.module.wms.dal.dataobject.shift.ShiftDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +19,10 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface RuleMapper extends BaseMapperX { + default RuleDO selectByCode(String code) { + return selectOne(RuleDO::getCode, code); + } + default PageResult selectPage(RulePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(RuleDO::getStrategyCode, reqVO.getStrategyCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/saleprice/SalepriceMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/saleprice/SalepriceMapper.java index 4a95041d..6d6631b4 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/saleprice/SalepriceMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/saleprice/SalepriceMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.saleprice.vo.SalepriceExportReqVO; import com.win.module.wms.controller.saleprice.vo.SalepricePageReqVO; import com.win.module.wms.dal.dataobject.saleprice.SalepriceDO; +import com.win.module.wms.dal.dataobject.shift.ShiftDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +19,10 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SalepriceMapper extends BaseMapperX { + default SalepriceDO selectByCustomercodeCode(String customercode) { + return selectOne(SalepriceDO::getCustomercode, customercode); + } + default PageResult selectPage(SalepricePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SalepriceDO::getCustomercode, reqVO.getCustomercode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/shift/ShiftMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/shift/ShiftMapper.java index b376e5ca..0d4f45e1 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/shift/ShiftMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/shift/ShiftMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.shift.vo.ShiftExportReqVO; import com.win.module.wms.controller.shift.vo.ShiftPageReqVO; import com.win.module.wms.dal.dataobject.shift.ShiftDO; +import com.win.module.wms.dal.dataobject.supplier.SupplierDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +19,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ShiftMapper extends BaseMapperX { + default ShiftDO selectByCode(String code) { + return selectOne(ShiftDO::getCode, code); + } default PageResult selectPage(ShiftPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ShiftDO::getCode, reqVO.getCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/stdcostprice/StdcostpriceMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/stdcostprice/StdcostpriceMapper.java index 3415fb27..d939dd3b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/stdcostprice/StdcostpriceMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/stdcostprice/StdcostpriceMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceExportReqVO; import com.win.module.wms.controller.stdcostprice.vo.StdcostpricePageReqVO; import com.win.module.wms.dal.dataobject.stdcostprice.StdcostpriceDO; +import com.win.module.wms.dal.dataobject.supplier.SupplierDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +19,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface StdcostpriceMapper extends BaseMapperX { + default StdcostpriceDO selectByStdcostpriceCode(String suppliercode) { + return selectOne( StdcostpriceDO::getSupplierCode,suppliercode); + } default PageResult selectPage(StdcostpricePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(StdcostpriceDO::getSupplierCode, reqVO.getSupplierCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplier/SupplierMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplier/SupplierMapper.java index 58801d05..9a31c627 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplier/SupplierMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplier/SupplierMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.supplier.vo.SupplierExportReqVO; import com.win.module.wms.controller.supplier.vo.SupplierPageReqVO; import com.win.module.wms.dal.dataobject.supplier.SupplierDO; +import com.win.module.wms.dal.dataobject.team.TeamDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +19,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SupplierMapper extends BaseMapperX { + default SupplierDO selectByCode(String code) { + return selectOne(SupplierDO::getCode, code); + } default PageResult selectPage(SupplierPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SupplierDO::getCode, reqVO.getCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplieritem/SupplieritemMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplieritem/SupplieritemMapper.java index 14167a7a..a6dc9658 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplieritem/SupplieritemMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplieritem/SupplieritemMapper.java @@ -8,6 +8,8 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.supplieritem.vo.SupplieritemExportReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemPageReqVO; import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; +import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; +import com.win.module.wms.dal.dataobject.team.TeamDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +20,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SupplieritemMapper extends BaseMapperX { + + default SupplieritemDO selectBySuppercode(String suppercode) {return selectOne(SupplieritemDO::getSupplierCode, suppercode); + } default PageResult selectPage(SupplieritemPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SupplieritemDO::getSupplierCode, reqVO.getSupplierCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/systemcalendar/SystemcalendarMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/systemcalendar/SystemcalendarMapper.java index d34dd2f5..807c7ee4 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/systemcalendar/SystemcalendarMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/systemcalendar/SystemcalendarMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarExportReqVO; import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarPageReqVO; import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; +import com.win.module.wms.dal.dataobject.team.TeamDO; import org.apache.ibatis.annotations.Mapper; /** @@ -18,6 +19,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SystemcalendarMapper extends BaseMapperX { + default SystemcalendarDO selectByMoudule(String mouble) { + return selectOne(SystemcalendarDO::getModule, mouble); + } default PageResult selectPage(SystemcalendarPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SystemcalendarDO::getModule, reqVO.getModule()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java index 242c999f..9909b13e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleService.java @@ -6,7 +6,8 @@ import javax.validation.*; import com.win.module.wms.controller.rule.vo.RuleCreateReqVO; import com.win.module.wms.controller.rule.vo.RuleExportReqVO; import com.win.module.wms.controller.rule.vo.RulePageReqVO; -import com.win.module.wms.controller.rule.vo.RuleUpdateReqVO; +import com.win.module.wms.controller.rule.vo.*; +import com.win.module.wms.controller.saleprice.vo.SalepriceImportExcelVo; import com.win.module.wms.dal.dataobject.rule.RuleDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +72,7 @@ public interface RuleService { */ List getRuleList(RuleExportReqVO exportReqVO); + + List importRuleList(List importTeam, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java index 0d28c789..7f3c4fcf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java @@ -1,23 +1,34 @@ package com.win.module.wms.service.rule; +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.rule.vo.RuleCreateReqVO; import com.win.module.wms.controller.rule.vo.RuleExportReqVO; import com.win.module.wms.controller.rule.vo.RulePageReqVO; import com.win.module.wms.controller.rule.vo.RuleUpdateReqVO; +import com.win.module.wms.controller.rule.vo.RuleImportExcelVo; +import com.win.module.wms.convert.rule.RuleConvert; +import com.win.module.wms.dal.dataobject.rule.RuleDO; 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.rule.RuleDO; import com.win.framework.common.pojo.PageResult; import com.win.module.wms.convert.rule.RuleConvert; import com.win.module.wms.dal.mysql.rule.RuleMapper; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.win.module.wms.enums.ErrorCodeConstants.*; +import static com.win.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; + +import static com.win.module.wms.enums.rule.ErrorCodeConstants.*; /** * 规则 Service 实现类 @@ -83,4 +94,96 @@ public class RuleServiceImpl implements RuleService { return ruleMapper.selectList(exportReqVO); } + public List importRuleList(List rules, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(rules)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + rules.forEach(rule -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateRuleForCreateOrUpdate(null,rule.getCode(),rule.getStrategyCode(),rule.getPriority()); + } + } catch (ServiceException ex) { + errorList.add(rule); + return; + } + + // 判断如果不存在,在进行插入 + RuleDO existRule = ruleMapper.selectByCode(rule.getCode()); + if (existRule == null&& mode != 3) { + ruleMapper.insert(RuleConvert.INSTANCE.convert(rule)); + } + else if (existRule != null && mode != 2) {// 如果存在,判断是否允许更新 + RuleDO ruleDO = RuleConvert.INSTANCE.convert(rule); + ruleDO.setId(existRule.getId()); + ruleMapper.updateById(ruleDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateRuleForCreateOrUpdate(Long id, String code, String strategycode,Integer priority) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateRulepExists(id); + // 校验code唯一 + validateCodeExists(id,code); + validateStrategycode(strategycode); + validatePriority(priority); + + }); + } + @VisibleForTesting + private void validateRulepExists(Long id) { + if (id == null) { + return; + } + RuleDO rule = ruleMapper.selectById(id); + if (rule == null) { + throw exception(RULE_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String code) { + if (code.isEmpty()) { + throw exception(RULE_NOT_EXISTS); + } + if (StrUtil.isBlank(code)) { + return; + } + RuleDO rule = ruleMapper.selectByCode(code); + if (rule == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(RULE_NOT_EXISTS); + } + if (!rule.getId().equals(id)) { + throw exception(RULE_NOT_EXISTS); + } + } + @VisibleForTesting + private void validateStrategycode(String strategycode) { + if (strategycode.isEmpty()) { + throw exception(RULE_STRATEGYCODE_NOT_EXISTS); + } + } + @VisibleForTesting + private void validatePriority(Integer priority) { + if (priority == null) { + throw exception(RULE_PRIORITY_NOT_EXISTS); + } + } + + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceService.java index 42076dde..89d7ec96 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceService.java @@ -6,7 +6,8 @@ import javax.validation.*; import com.win.module.wms.controller.saleprice.vo.SalepriceCreateReqVO; import com.win.module.wms.controller.saleprice.vo.SalepriceExportReqVO; import com.win.module.wms.controller.saleprice.vo.SalepricePageReqVO; -import com.win.module.wms.controller.saleprice.vo.SalepriceUpdateReqVO; +import com.win.module.wms.controller.saleprice.vo.*; +import com.win.module.wms.controller.shift.vo.ShiftImportExcelVo; import com.win.module.wms.dal.dataobject.saleprice.SalepriceDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +72,6 @@ public interface SalepriceService { */ List getSalepriceList(SalepriceExportReqVO exportReqVO); + List importSalepriceList(List importTeam, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceServiceImpl.java index 7d0fff9e..8bf1eab8 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/saleprice/SalepriceServiceImpl.java @@ -1,22 +1,35 @@ package com.win.module.wms.service.saleprice; +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.saleprice.vo.SalepriceCreateReqVO; import com.win.module.wms.controller.saleprice.vo.SalepriceExportReqVO; import com.win.module.wms.controller.saleprice.vo.SalepricePageReqVO; import com.win.module.wms.controller.saleprice.vo.SalepriceUpdateReqVO; +import com.win.module.wms.controller.saleprice.vo.SalepriceImportExcelVo; import com.win.module.wms.convert.saleprice.SalepriceConvert; +import com.win.module.wms.convert.saleprice.SalepriceConvert; +import com.win.module.wms.dal.dataobject.saleprice.SalepriceDO; import com.win.module.wms.dal.dataobject.saleprice.SalepriceDO; import com.win.module.wms.dal.mysql.saleprice.SalepriceMapper; import org.springframework.stereotype.Service; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; +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.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; import static com.win.module.wms.enums.saleprice.ErrorCodeConstants.SALEPRICE_NOT_EXISTS; +import static com.win.module.wms.enums.saleprice.ErrorCodeConstants.*; /** * 销售价格单 Service 实现类 @@ -82,4 +95,118 @@ public class SalepriceServiceImpl implements SalepriceService { return salepriceMapper.selectList(exportReqVO); } + public List importSalepriceList(List saleprices, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(saleprices)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + saleprices.forEach(saleprice -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateSalepriceForCreateOrUpdate(null,saleprice.getCustomercode(),saleprice.getItemcode(),saleprice.getCurrency() + ,saleprice.getPrice(),saleprice.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(saleprice); + return; + } + + // 判断如果不存在,在进行插入 + SalepriceDO existSaleprice = salepriceMapper.selectByCustomercodeCode(saleprice.getCustomercode()); + if (existSaleprice == null&& mode != 3) { + salepriceMapper.insert(SalepriceConvert.INSTANCE.convert(saleprice)); + } + else if (existSaleprice != null && mode != 2) {// 如果存在,判断是否允许更新 + SalepriceDO salepriceDO = SalepriceConvert.INSTANCE.convert(saleprice); + salepriceDO.setId(existSaleprice.getId()); + salepriceMapper.updateById(salepriceDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateSalepriceForCreateOrUpdate(Long id, String customercode, String itemcode, String currency, + BigDecimal price, String available ) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateSalepricepExists(id); + // 校验code唯一 + validateCodeExists(id,customercode); + validateItemCodeExists(itemcode); + validateCurrencyExists(currency); + validatePriceExists(price); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateSalepricepExists(Long id) { + if (id == null) { + return; + } + SalepriceDO saleprice = salepriceMapper.selectById(id); + if (saleprice == null) { + throw exception(SALEPRICE_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String code) { + if (code.isEmpty()) { + throw exception(SALEPRICE_NOT_EXISTS); + } + if (StrUtil.isBlank(code)) { + return; + } + SalepriceDO saleprice = salepriceMapper.selectByCustomercodeCode(code); + if (saleprice == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(SALEPRICE_NOT_EXISTS); + } + if (!saleprice.getId().equals(id)) { + throw exception(SALEPRICE_NOT_EXISTS); + } + } + @VisibleForTesting + private void validatePriceExists(BigDecimal price) { + if (price ==null) { + throw exception(SALEPRICE_PRICE_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateCurrencyExists(String currency) { + if (currency.isEmpty()) { + throw exception(SALEPRICE_CURRENCY_NOT_EXISTS); + } + } + + + @VisibleForTesting + private void validateItemCodeExists(String itemcode) { + if (itemcode.isEmpty()) { + throw exception(SALEPRICE_ITEMCODE_NOT_EXISTS); + } + } + + + + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(SALEPRICE_AVAILABLE_NOT_EXISTS); + } + } + + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftService.java index 1fa18d5d..c16d5f6e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftService.java @@ -3,10 +3,8 @@ package com.win.module.wms.service.shift; import java.util.*; import javax.validation.*; -import com.win.module.wms.controller.shift.vo.ShiftCreateReqVO; -import com.win.module.wms.controller.shift.vo.ShiftExportReqVO; -import com.win.module.wms.controller.shift.vo.ShiftPageReqVO; -import com.win.module.wms.controller.shift.vo.ShiftUpdateReqVO; +import com.win.module.wms.controller.shift.vo.*; +import com.win.module.wms.controller.supplier.vo.SupplierImportExcelVo; import com.win.module.wms.dal.dataobject.shift.ShiftDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +69,6 @@ public interface ShiftService { */ List getShiftList(ShiftExportReqVO exportReqVO); + List importShiftList(List importTeam, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftServiceImpl.java index 261ebb05..4fd3d7cc 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/shift/ShiftServiceImpl.java @@ -1,13 +1,26 @@ package com.win.module.wms.service.shift; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.LocalDateTimeUtil; +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.shift.vo.ShiftCreateReqVO; import com.win.module.wms.controller.shift.vo.ShiftExportReqVO; import com.win.module.wms.controller.shift.vo.ShiftPageReqVO; import com.win.module.wms.controller.shift.vo.ShiftUpdateReqVO; +import com.win.module.wms.controller.shift.vo.ShiftImportExcelVo; +import com.win.module.wms.convert.shift.ShiftConvert; +import com.win.module.wms.dal.dataobject.shift.ShiftDO; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; +import java.time.LocalDateTime; import java.util.*; import com.win.module.wms.dal.dataobject.shift.ShiftDO; @@ -17,7 +30,9 @@ import com.win.module.wms.convert.shift.ShiftConvert; import com.win.module.wms.dal.mysql.shift.ShiftMapper; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.win.module.wms.enums.ErrorCodeConstants.*; +import static com.win.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; + +import static com.win.module.wms.enums.shift.ErrorCodeConstants.*; /** * 班次 Service 实现类 @@ -83,4 +98,118 @@ public class ShiftServiceImpl implements ShiftService { return shiftMapper.selectList(exportReqVO); } + + + public List importShiftList(List shifts, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(shifts)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + shifts.forEach(shift -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateShiftForCreateOrUpdate(null,shift.getCode(),shift.getBeginTime(),shift.getEntTime(),shift.getEndAtNextDay(), + shift.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(shift); + return; + } + + // 判断如果不存在,在进行插入 + ShiftDO existShift = shiftMapper.selectByCode(shift.getCode()); + if (existShift == null&& mode != 3) { + shiftMapper.insert(ShiftConvert.INSTANCE.convert(shift)); + } + else if (existShift != null && mode != 2) {// 如果存在,判断是否允许更新 + ShiftDO shiftDO = ShiftConvert.INSTANCE.convert(shift); + shiftDO.setId(existShift.getId()); + shiftMapper.updateById(shiftDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateShiftForCreateOrUpdate(Long id, String code, LocalDateTime begintime, LocalDateTime endtime, String endatnextday, + String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateShiftpExists(id); + // 校验code唯一 + validateCodeExists(id,code); + validateBeginTimeExists(begintime); + validateEndTimeExists(endtime); + validateEndatnextDayExists(endatnextday); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateShiftpExists(Long id) { + if (id == null) { + return; + } + ShiftDO shift = shiftMapper.selectById(id); + if (shift == null) { + throw exception(SHIFT_NOT_EXISTS); + } + } + + + + + + @VisibleForTesting + private void validateCodeExists(Long id,String code) { + if (code.isEmpty()) { + throw exception(SHIFT_NOT_EXISTS); + } + if (StrUtil.isBlank(code)) { + return; + } + ShiftDO shift = shiftMapper.selectByCode(code); + if (shift == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(SHIFT_NOT_EXISTS); + } + if (!shift.getId().equals(id)) { + throw exception(SHIFT_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateEndatnextDayExists(String endatnextday) { + if (endatnextday.isEmpty()) { + throw exception(SHIFT_ENDATNEXTDAY_NOT_EXISTS); + } + } + @VisibleForTesting + private void validateEndTimeExists(LocalDateTime endtime) { + if (endtime == null) { + throw exception(SHIFT_END_TIME_NOT_EXISTS); + } + } + @VisibleForTesting + private void validateBeginTimeExists(LocalDateTime begintime) { + if (begintime == null) { + throw exception(SHIFT_BEGIN_TIME_NOT_EXISTS); + } + } + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(SHIFT_AVAIABLE_NOT_EXISTS); + } + } + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceService.java index 7be907c5..9415061e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceService.java @@ -1,10 +1,11 @@ package com.win.module.wms.service.stdcostprice; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceCreateReqVO; +import com.win.module.wms.controller.stdcostprice.vo.*; import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceExportReqVO; import com.win.module.wms.controller.stdcostprice.vo.StdcostpricePageReqVO; import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceUpdateReqVO; +import com.win.module.wms.controller.supplier.vo.SupplierImportExcelVo; import com.win.module.wms.dal.dataobject.stdcostprice.StdcostpriceDO; import javax.validation.Valid; @@ -72,4 +73,6 @@ public interface StdcostpriceService { */ List getStdcostpriceList(StdcostpriceExportReqVO exportReqVO); + List importStdcostpriceList(List importTeam, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceServiceImpl.java index 4b65f7b2..43bc226e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/stdcostprice/StdcostpriceServiceImpl.java @@ -1,23 +1,36 @@ package com.win.module.wms.service.stdcostprice; +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.stdcostprice.vo.StdcostpriceCreateReqVO; import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceExportReqVO; import com.win.module.wms.controller.stdcostprice.vo.StdcostpricePageReqVO; import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceUpdateReqVO; +import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceImportExcelVo; +import com.win.module.wms.convert.stdcostprice.StdcostpriceConvert; +import com.win.module.wms.dal.dataobject.stdcostprice.StdcostpriceDO; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; import java.util.*; - import com.win.module.wms.dal.dataobject.stdcostprice.StdcostpriceDO; + import com.win.framework.common.pojo.PageResult; import com.win.module.wms.convert.stdcostprice.StdcostpriceConvert; import com.win.module.wms.dal.mysql.stdcostprice.StdcostpriceMapper; 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.stdcostprice.ErrorCodeConstants.STDCOSTPRICE_NOT_EXISTS; +import static com.win.module.wms.enums.stdcostprice.ErrorCodeConstants.*; /** * 标准成本价格单 Service 实现类 @@ -82,5 +95,112 @@ public class StdcostpriceServiceImpl implements StdcostpriceService { public List getStdcostpriceList(StdcostpriceExportReqVO exportReqVO) { return stdcostpriceMapper.selectList(exportReqVO); } + public List importStdcostpriceList(List stdcostprices, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(stdcostprices)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + stdcostprices.forEach(stdcostprice -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateStdcostpriceForCreateOrUpdate(null,stdcostprice.getSupplierCode(),stdcostprice.getItemCode(), + stdcostprice.getCurrency(),stdcostprice.getPrice(),stdcostprice.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(stdcostprice); + return; + } + + // 判断如果不存在,在进行插入 + StdcostpriceDO existStdcostprice = stdcostpriceMapper.selectByStdcostpriceCode(stdcostprice.getSupplierCode()); + if (existStdcostprice == null&& mode != 3) { + stdcostpriceMapper.insert(StdcostpriceConvert.INSTANCE.convert(stdcostprice)); + } + else if (existStdcostprice != null && mode != 2) {// 如果存在,判断是否允许更新 + StdcostpriceDO stdcostpriceDO = StdcostpriceConvert.INSTANCE.convert(stdcostprice); + stdcostpriceDO.setId(existStdcostprice.getId()); + stdcostpriceMapper.updateById(stdcostpriceDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateStdcostpriceForCreateOrUpdate(Long id, String suppercode, String itemcode, String currency, + BigDecimal price,String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateStdcostpricepExists(id); + // 校验code唯一 + + validateCodeExists(id,suppercode); + validateItemCodeExists(itemcode); + validateCurrencyExists(currency); + validatePriceExists(price); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateStdcostpricepExists(Long id) { + if (id == null) { + return; + } + StdcostpriceDO stdcostprice = stdcostpriceMapper.selectById(id); + if (stdcostprice == null) { + throw exception(STDCOSTPRICE_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String suppercode) { + if (suppercode.isEmpty()) { + throw exception(STDCOSTPRICE_SUPPLIER_CODE_NOT_EXISTS); + } + if (StrUtil.isBlank(suppercode)) { + return; + } + StdcostpriceDO stdcostprice = stdcostpriceMapper.selectByStdcostpriceCode(suppercode); + if (stdcostprice == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(STDCOSTPRICE_SUPPLIER_CODE_NOT_EXISTS); + } + if (!stdcostprice.getId().equals(id)) { + throw exception(STDCOSTPRICE_SUPPLIER_CODE_NOT_EXISTS); + } + } + + @VisibleForTesting + private void validateItemCodeExists(String itemcode) { + if (itemcode.isEmpty()) { + throw exception(STDCOSTPRICE_ITEN_CODE_NOT_EXISTS); + } + } + @VisibleForTesting + private void validateCurrencyExists(String currency) { + if (currency.isEmpty()) { + throw exception(STDCOSTPRICE_CURRENCY_NOT_EXISTS); + } + } + @VisibleForTesting + private void validatePriceExists(BigDecimal price) { + if (price == null) { + throw exception(STDCOSTPRICE_CURRENCY_NOT_EXISTS); + } + } + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(STDCOSTPRICE_AVAILABLE_NOT_EXISTS); + } + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierService.java index b9035715..446c456c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierService.java @@ -3,10 +3,8 @@ package com.win.module.wms.service.supplier; import java.util.*; import javax.validation.*; -import com.win.module.wms.controller.supplier.vo.SupplierCreateReqVO; -import com.win.module.wms.controller.supplier.vo.SupplierExportReqVO; -import com.win.module.wms.controller.supplier.vo.SupplierPageReqVO; -import com.win.module.wms.controller.supplier.vo.SupplierUpdateReqVO; +import com.win.module.wms.controller.supplier.vo.*; +import com.win.module.wms.controller.supplier.vo.SupplierImportExcelVo; import com.win.module.wms.dal.dataobject.supplier.SupplierDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +69,6 @@ public interface SupplierService { */ List getSupplierList(SupplierExportReqVO exportReqVO); + List importSupplierList(List importTeam, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierServiceImpl.java index 64a80595..7b0257bd 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplier/SupplierServiceImpl.java @@ -1,22 +1,38 @@ package com.win.module.wms.service.supplier; +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.module.wms.controller.supplier.vo.SupplierCreateReqVO; -import com.win.module.wms.controller.supplier.vo.SupplierExportReqVO; -import com.win.module.wms.controller.supplier.vo.SupplierPageReqVO; -import com.win.module.wms.controller.supplier.vo.SupplierUpdateReqVO; +import com.win.framework.datapermission.core.util.DataPermissionUtils; +import com.win.module.wms.controller.supplier.vo.*; + +import com.win.module.wms.controller.supplier.vo.SupplierImportExcelVo; +import com.win.module.wms.convert.supplier.SupplierConvert; + + import com.win.module.wms.convert.supplier.SupplierConvert; +import com.win.module.wms.dal.dataobject.supplier.SupplierDO; + + import com.win.module.wms.dal.dataobject.supplier.SupplierDO; import com.win.module.wms.dal.mysql.supplier.SupplierMapper; 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.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; import static com.win.module.wms.enums.supplier.ErrorCodeConstants.SUPPLIER_NOT_EXISTS; +import static com.win.module.wms.enums.supplier.ErrorCodeConstants.*; +import static com.win.module.wms.enums.supplier.ErrorCodeConstants.*; +import static com.win.module.wms.enums.supplier.ErrorCodeConstants.*; /** * 供应商 Service 实现类 @@ -81,5 +97,99 @@ public class SupplierServiceImpl implements SupplierService { public List getSupplierList(SupplierExportReqVO exportReqVO) { return supplierMapper.selectList(exportReqVO); } + public List importSupplierList(List suppliers, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(suppliers)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + suppliers.forEach(supplier -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateSupplierForCreateOrUpdate(null,supplier.getCode(),supplier.getShortName(),supplier.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(supplier); + return; + } + + // 判断如果不存在,在进行插入 + SupplierDO existSupplier = supplierMapper.selectByCode(supplier.getCode()); + if (existSupplier == null&& mode != 3) { + supplierMapper.insert(SupplierConvert.INSTANCE.convert(supplier)); + } + else if (existSupplier != null && mode != 2) {// 如果存在,判断是否允许更新 + SupplierDO supplierDO = SupplierConvert.INSTANCE.convert(supplier); + supplierDO.setId(existSupplier.getId()); + supplierMapper.updateById(supplierDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateSupplierForCreateOrUpdate(Long id, String code, String shortname, String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateSupplierpExists(id); + // 校验code唯一 + validateCodeExists(id,code); + validateShortnameExists(shortname); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateSupplierpExists(Long id) { + if (id == null) { + return; + } + SupplierDO supplier = supplierMapper.selectById(id); + if (supplier == null) { + throw exception(SUPPLIER_NOT_EXISTSNO); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String code) { + if (code.isEmpty()) { + throw exception(SUPPLIER_MOUBLE_EXISTSNO); + } + if (StrUtil.isBlank(code)) { + return; + } + SupplierDO supplier = supplierMapper.selectByCode(code); + if (supplier == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(SUPPLIER_NOT_EXISTSNO); + } + if (!supplier.getId().equals(id)) { + throw exception(SUPPLIER_NOT_EXISTSNO); + } + } + @VisibleForTesting + private void validateShortnameExists(String shortname) { + if (shortname.isEmpty()) { + throw exception(SUPPLIER_SHORTNAME_NOT_EXISTS); + } + } + + + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(SUPPLIER_AVAILABLE_NOT_EXISTS); + } + } + + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemService.java index 2eb4c970..1cfdcc57 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemService.java @@ -7,6 +7,7 @@ import com.win.module.wms.controller.supplieritem.vo.SupplieritemCreateReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemExportReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemPageReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemUpdateReqVO; +import com.win.module.wms.controller.supplieritem.vo.SupplieriteamImportExcelVo; import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +72,6 @@ public interface SupplieritemService { */ List getSupplieritemList(SupplieritemExportReqVO exportReqVO); + List importSupplieriteamList(List importTeam, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemServiceImpl.java index 86e4abf7..7a6153cf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/supplieritem/SupplieritemServiceImpl.java @@ -1,22 +1,37 @@ package com.win.module.wms.service.supplieritem; +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.supplieritem.vo.SupplieritemCreateReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemExportReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemPageReqVO; +import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO;; import com.win.module.wms.controller.supplieritem.vo.SupplieritemUpdateReqVO; +import com.win.module.wms.controller.supplieritem.vo.SupplieriteamImportExcelVo; import com.win.module.wms.convert.supplieritem.SupplieritemConvert; + import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; + +import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; import com.win.module.wms.dal.mysql.supplieritem.SupplieritemMapper; import org.springframework.stereotype.Service; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; +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.supplieritem.ErrorCodeConstants.SUPPLIERITEM_NOT_EXISTS; +import static com.win.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; +import static com.win.module.wms.enums.supplieritem.ErrorCodeConstants.*; + /** * 供应商物品 Service 实现类 @@ -82,4 +97,102 @@ public class SupplieritemServiceImpl implements SupplieritemService { return supplieritemMapper.selectList(exportReqVO); } + public List importSupplieriteamList(List supplieriteams, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(supplieriteams)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + supplieriteams.forEach(supplieriteam -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateSupplieriteamForCreateOrUpdate(null,supplieriteam.getSupplierCode(), + supplieriteam.getItemCode(),supplieriteam.getPackUnit(),supplieriteam.getPackQty(),supplieriteam.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(supplieriteam); + return; + } + + // 判断如果不存在,在进行插入 + SupplieritemDO existSupplieriteam = supplieritemMapper.selectBySuppercode(supplieriteam.getSupplierCode()); + if (existSupplieriteam == null&& mode != 3) { + supplieritemMapper.insert(SupplieritemConvert.INSTANCE.convert(supplieriteam)); + } + else if (existSupplieriteam != null && mode != 2) {// 如果存在,判断是否允许更新 + SupplieritemDO supplieriteamDO = SupplieritemConvert.INSTANCE.convert(supplieriteam); + supplieriteamDO.setId(existSupplieriteam.getId()); + supplieritemMapper.updateById(supplieriteamDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateSupplieriteamForCreateOrUpdate(Long id, String suppliercode, String itemcode, String packunit ,BigDecimal packqty, + String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateSupplieriteampExists(id); + // 校验code唯一 + validateSupperCodeExists(suppliercode); + validateItemCodeExists(itemcode); + validatePackunitExists(packunit); + validatePackQtyExists(packqty); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateSupplieriteampExists(Long id) { + if (id == null) { + return; + } + SupplieritemDO supplieritem = supplieritemMapper.selectById(id); + if (supplieritem == null) { + throw exception(SUPPLIERITEM_NOT_EXISTS); + } + } + @VisibleForTesting + private void validateSupperCodeExists(String suppliercode) { + if (suppliercode.isEmpty()) { + throw exception(SUPPLIERITEM_SUPPLIER_CODE_NOT_EXISTS); + } + + } + @VisibleForTesting + private void validateItemCodeExists(String itemcode) { + if (itemcode.isEmpty()) { + throw exception(SUPPLIERITEM_ITEM_CODE_NOT_EXISTS); + } + } + + + + @VisibleForTesting + private void validatePackunitExists(String packunit) { + if (packunit == null) { + throw exception(SUPPLIERITEM_PACK_UNIT_NOT_EXISTS); + } + } + @VisibleForTesting + private void validatePackQtyExists(BigDecimal packqty) { + if (packqty == null) { + throw exception(SUPPLIERITEM_PACK_QTY_NOT_EXISTS ); + } + } + + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(SUPPLIERITEM_AVAILABLE_NOT_EXISTS); + } + } + + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarService.java index d7bf345c..9823b6c2 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarService.java @@ -3,10 +3,8 @@ package com.win.module.wms.service.systemcalendar; import java.util.*; import javax.validation.*; -import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarCreateReqVO; -import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarExportReqVO; -import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarPageReqVO; -import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarUpdateReqVO; +import com.win.module.wms.controller.systemcalendar.vo.*; +import com.win.module.wms.controller.team.vo.TeamImportExcelVo; import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; import com.win.framework.common.pojo.PageResult; @@ -71,4 +69,8 @@ public interface SystemcalendarService { */ List getSystemcalendarList(SystemcalendarExportReqVO exportReqVO); + + + List importSystemcalendarList(List importTeam, Integer mode, boolean updatePart); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarServiceImpl.java index d4e1b69f..3e78806b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/systemcalendar/SystemcalendarServiceImpl.java @@ -1,22 +1,34 @@ package com.win.module.wms.service.systemcalendar; +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.systemcalendar.vo.SystemcalendarCreateReqVO; import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarExportReqVO; import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarPageReqVO; import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarUpdateReqVO; +import com.win.module.wms.controller.systemcalendar.vo.SystemcalendarImportExcelVo; import com.win.module.wms.convert.systemcalendar.SystemcalendarConvert; +import com.win.module.wms.convert.systemcalendar.SystemcalendarConvert; +import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; import com.win.module.wms.dal.dataobject.systemcalendar.SystemcalendarDO; import com.win.module.wms.dal.mysql.systemcalendar.SystemcalendarMapper; 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.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; import static com.win.module.wms.enums.systemcalendar.ErrorCodeConstants.SYSTEMCALENDAR_NOT_EXISTS; +import static com.win.module.wms.enums.systemcalendar.ErrorCodeConstants.*; /** * 系统日历 Service 实现类 @@ -81,5 +93,92 @@ public class SystemcalendarServiceImpl implements SystemcalendarService { public List getSystemcalendarList(SystemcalendarExportReqVO exportReqVO) { return systemcalendarMapper.selectList(exportReqVO); } + public List importSystemcalendarList(List systemcalendars, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(systemcalendars)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + systemcalendars.forEach(systemcalendar -> { + // 校验,判断是否有不符合的原因 + try { + if(mode != null){ + validateSystemcalendarForCreateOrUpdate(null,systemcalendar.getModule(),systemcalendar.getAvailable()); + } + } catch (ServiceException ex) { + errorList.add(systemcalendar); + return; + } + + // 判断如果不存在,在进行插入 + SystemcalendarDO existSystemcalendar = systemcalendarMapper.selectByMoudule(systemcalendar.getModule()); + if (existSystemcalendar == null&& mode != 3) { + systemcalendarMapper.insert(SystemcalendarConvert.INSTANCE.convert(systemcalendar)); + } + else if (existSystemcalendar != null && mode != 2) {// 如果存在,判断是否允许更新 + SystemcalendarDO systemcalendarDO = SystemcalendarConvert.INSTANCE.convert(systemcalendar); + systemcalendarDO.setId(existSystemcalendar.getId()); + systemcalendarMapper.updateById(systemcalendarDO); + } + }); + //错误不为空并非部分更新,手工回滚 + if(!errorList.isEmpty() && !updatePart) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return errorList; + } + + private void validateSystemcalendarForCreateOrUpdate(Long id, String mouble, String available) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + DataPermissionUtils.executeIgnore(() -> { + validateSystemcalendarpExists(id); + // 校验code唯一 + validateCodeExists(id,mouble); + validateAvailableExists(available); + + }); + } + @VisibleForTesting + private void validateSystemcalendarpExists(Long id) { + if (id == null) { + return; + } + SystemcalendarDO systemcalendar = systemcalendarMapper.selectById(id); + if (systemcalendar == null) { + throw exception(SYSTEMCALENDAR_MOUBLE_EXISTS); + } + } + + @VisibleForTesting + private void validateCodeExists(Long id,String mouble) { + if (mouble.isEmpty()) { + throw exception(SYSTEMCALENDAR_MOUBLE_EXISTS); + } + if (StrUtil.isBlank(mouble)) { + return; + } + SystemcalendarDO systemcalendar = systemcalendarMapper.selectByMoudule(mouble); + if (systemcalendar == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(SYSTEMCALENDAR_MOUBLE_EXISTS); + } + if (!systemcalendar.getId().equals(id)) { + throw exception(SYSTEMCALENDAR_MOUBLE_EXISTS); + } + } + @VisibleForTesting + private void validateAvailableExists(String available) { + if (available == null) { + throw exception(SYSTEMCALENDAR_AVAIABLE_NOT_EXISTS); + } + } + + + + + + }