diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java index 39c7ecc5a..411446836 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java @@ -420,6 +420,48 @@ public class SkuController { page.setTotal(total); return Result.OK(page); } + + @GetMapping("/listAllWithFilters") + public Result listAllWithFilters( + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "50") Integer pageSize, + @RequestParam(name = "column", defaultValue = "erp_code") String column, + @RequestParam(name = "order", defaultValue = "ASC") String order, + @RequestParam(name = "erpCodes", required = false) String erpCodes, + @RequestParam(name = "zhNames", required = false) String zhNames, + @RequestParam(name = "enNames", required = false) String enNames, + ServletRequest servletRequest) { + + String parsedColumn = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column.replace("_dictText", "")); + String parsedOrder = order.toUpperCase(); + if (!parsedOrder.equals("ASC") && !parsedOrder.equals("DESC")) { + return Result.error("Error 400 Bad Request"); + } + + try { + specialFilterContentForDictSql(parsedColumn); + } catch (RuntimeException e) { + return Result.error("Error 400 Bad Request"); + } + + List skuOrdersPage; + int total; + + List erpCodeList = erpCodes == null ? null : Arrays.asList(erpCodes.split(",")); + List zhNameList = zhNames == null ? null : Arrays.asList(zhNames.split(",")); + List enNameList = enNames == null ? null : Arrays.asList(enNames.split(",")); + + // Count and fetch ALL records (not just latest) + total = skuService.countAllSkuWeightHistoryWithFilters(erpCodeList, zhNameList, enNameList); + skuOrdersPage = skuService.fetchAllSkuWeightsWithFilters(pageNo, pageSize, parsedColumn, parsedOrder, erpCodeList, zhNameList, enNameList); + + IPage page = new Page<>(); + page.setRecords(skuOrdersPage); + page.setCurrent(pageNo); + page.setSize(pageSize); + page.setTotal(total); + return Result.OK(page); + } @GetMapping("/listAllSelectableSkuIds") public Result listAllSelectableSkuIds(@RequestParam(name = "clientId") String clientId, @RequestParam(name = "erpCodes", required = false) String erpCodes, diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java index 08861b12f..a84313136 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuWeightController.java @@ -11,8 +11,10 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.alibaba.fastjson.JSONObject; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; @@ -20,6 +22,7 @@ import org.jeecg.common.system.vo.LoginUser; import org.jeecg.config.JeecgBaseConfig; import org.jeecg.modules.business.entity.Sku; import org.jeecg.modules.business.entity.SkuWeight; +import org.jeecg.modules.business.model.SkuDocument; import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.service.ISecurityService; import org.jeecg.modules.business.service.ISkuListMabangService; @@ -35,10 +38,14 @@ import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.modules.business.vo.ResponsesWithMsg; import org.jeecg.modules.business.vo.SkuWeightPage; import org.jeecg.modules.business.vo.SkuWeightParam; +import org.jeecg.modules.message.websocket.WebSocketSender; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -72,6 +79,8 @@ public class SkuWeightController extends JeecgController deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.skuWeightService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } + public Result deleteBatch(@RequestBody List ids) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + boolean isEmployee = securityService.checkIsEmployee(); + if (!isEmployee) { + log.info("User {}, tried to access /skuWeight/updateBatch but is not authorized.", sysUser.getUsername()); + return Result.error(403,"Forbidden."); + } + List weightsToDelete = skuWeightService.listByIds(ids); + // delete from mysql + skuWeightService.removeByIds(ids); + //update the latest SKU weight in MongoDB + for (SkuWeight deleted : weightsToDelete) { + String skuId = deleted.getSkuId(); + Date deletedDate = deleted.getEffectiveDate(); + + Query query = new Query(Criteria.where("skuId").is(skuId)); + SkuDocument doc = mongoTemplate.findOne(query, SkuDocument.class); + + boolean isLatestDeleted = doc != null && + doc.getLatestSkuWeight() != null && + deletedDate.equals(doc.getLatestSkuWeight().getEffectiveDate()); + if (isLatestDeleted) { + skuMongoService.deleteSkuWeightBySkuId(skuId); + List remaining = skuWeightService.list( + new QueryWrapper().eq("sku_id", skuId).orderByDesc("effective_date")); + if (!remaining.isEmpty()) { + skuMongoService.upsertSkuWeight(remaining.get(0)); + } + } + } + log.info("Deleted SKU weights: {}", weightsToDelete); + return Result.OK("SKU重量批量删除成功!"); + } /** * 通过id查询 @@ -192,106 +229,198 @@ public class SkuWeightController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { - log.info("Importing Sku weights from Excel..."); - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); + public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + log.info("Importing Sku weights from Excel..."); + boolean isEmployee = securityService.checkIsEmployee(); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if(!isEmployee){ + log.info("User {}, tried to access /skuWeight/updateBatch but is not authorized.", sysUser.getUsername()); + return Result.error(403,"Forbidden."); + } + String userId = ((LoginUser) SecurityUtils.getSubject().getPrincipal()).getId(); + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS); - ResponsesWithMsg responses = new ResponsesWithMsg<>(); - List skuWeights = new ArrayList<>(); - Map skuWeightMappedByErpCode = new HashMap<>(); - for (Map.Entry entity : fileMap.entrySet()) { - MultipartFile file = entity.getValue(); - try (InputStream inputStream = file.getInputStream()){ - Workbook workbook = new HSSFWorkbook(inputStream); - Sheet firstSheet = workbook.getSheetAt(0); - int firstRow = firstSheet.getFirstRowNum(); - int lastRow = firstSheet.getLastRowNum(); - for (int rowIndex = firstRow + 1; rowIndex <= lastRow; rowIndex++) { - Row row = firstSheet.getRow(rowIndex); - SkuWeight skuWeight = new SkuWeight(); - boolean hasError = false; - String erpCode = null; - for (int cellIndex = row.getFirstCellNum(); cellIndex < NUMBER_OF_SKU_EXCEL_COLUMNS; cellIndex++) { - Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); - if(hasError) continue; - if(cell.getCellType().equals(CellType.BLANK)){ - responses.addFailure("Row " + rowIndex + " has empty cell at index " + cellIndex); - hasError = true; - continue; - } - switch (cellIndex) { - case 0: - String skuCode = cell.getStringCellValue(); - Sku sku = skuService.getByErpCode(skuCode); - if(sku == null){ - responses.addFailure("Row " + rowIndex + " SKU not found : " + skuCode); - hasError = true; - continue; - } - erpCode = skuCode; - skuWeight.setSkuId(sku.getId()); - break; - case 1: - int weight; - if(cell.getCellType().equals(CellType.STRING)) - weight = Integer.parseInt(cell.getStringCellValue()); - else if(cell.getCellType().equals(CellType.NUMERIC)) - weight = (int) cell.getNumericCellValue(); - else { - responses.addFailure("Row " + rowIndex + " Weight is not a number - Sku : " + erpCode); - hasError = true; - continue; - } - skuWeight.setWeight(weight); - break; - case 2: - String date; - if(cell.getCellType().equals(CellType.STRING)) - date = cell.getStringCellValue(); - else if(cell.getCellType().equals(CellType.NUMERIC)) - date = formatter.format(cell.getDateCellValue()); - else { - responses.addFailure("Row " + rowIndex + " Date is not a date - Sku : " + erpCode); - hasError = true; - continue; - } - Date effectiveDate = formatter.parse(date); - skuWeight.setEffectiveDate(effectiveDate); - break; - } - } - if(hasError) continue; - skuWeights.add(skuWeight); - assert erpCode != null; - skuWeightMappedByErpCode.put(erpCode, skuWeight); - } - log.info("Import weights for skus: {}", skuWeightMappedByErpCode.keySet()); - ResponsesWithMsg mabangResponses = skuListMabangService.mabangSkuWeightUpdate(skuWeights); - List skuWeightSuccesses = new ArrayList<>(); - mabangResponses.getSuccesses().forEach((skuErpCode, messages) -> { - skuWeightSuccesses.add(skuWeightMappedByErpCode.get(skuErpCode)); - }); - skuWeightSuccesses.forEach(skuWeight -> skuMongoService.upsertSkuWeight(skuWeight)); - skuWeightService.saveBatch(skuWeights); + for (Map.Entry entry : fileMap.entrySet()) { + MultipartFile file = entry.getValue(); + + executor.submit(() -> { + try (InputStream inputStream = file.getInputStream()) { + Workbook workbook = file.getOriginalFilename().endsWith(".xlsx") + ? new XSSFWorkbook(inputStream) + : new HSSFWorkbook(inputStream); + Sheet sheet = workbook.getSheetAt(0); + int firstRow = sheet.getFirstRowNum(); + int lastRow = sheet.getLastRowNum(); + + List skuWeights = new ArrayList<>(); + Map skuWeightMappedByErpCode = new HashMap<>(); + ResponsesWithMsg responses = new ResponsesWithMsg<>(); + + for (int rowIndex = firstRow + 1; rowIndex <= lastRow; rowIndex++) { + Row row = sheet.getRow(rowIndex); + if (row == null) continue; + + SkuWeight skuWeight = new SkuWeight(); + boolean hasError = false; + String erpCode = null; + + for (int cellIndex = 0; cellIndex < NUMBER_OF_SKU_EXCEL_COLUMNS; cellIndex++) { + Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); + if (hasError) break; + + if (cell.getCellType() == CellType.BLANK) { + responses.addFailure("Row " + (rowIndex + 1), " Cell " + cellIndex + " is blank"); + log.error("Row {} Cell {} is blank", rowIndex + 1, cellIndex); + hasError = true; + break; + } + + try { + switch (cellIndex) { + case 0: // ERP Code + String skuCode = cell.getStringCellValue().trim(); + Sku sku = skuService.getByErpCode(skuCode); + if (sku == null || sku.getId() == null) { + responses.addFailure("Row " + (rowIndex + 1), " 无效ERP编码: " + skuCode); + log.error("Row {} is not a valid SKU", rowIndex + 1); + hasError = true; + break; + } + erpCode = skuCode; + skuWeight.setSkuId(sku.getId()); + break; + + case 1: // Weight + int weight; + if (cell.getCellType() == CellType.STRING) { + weight = Integer.parseInt(cell.getStringCellValue().trim()); + } else if (cell.getCellType() == CellType.NUMERIC) { + weight = (int) cell.getNumericCellValue(); + } else { + responses.addFailure("Row " + (rowIndex + 1), + "无法识别的重量类型"); + hasError = true; + throw new IllegalArgumentException("无法识别的重量类型"); + } + skuWeight.setWeight(weight); + break; + + case 2: // Date + String dateStr; + if (cell.getCellType() == CellType.STRING) { + dateStr = cell.getStringCellValue().trim(); + } else if (cell.getCellType() == CellType.NUMERIC) { + dateStr = formatter.format(cell.getDateCellValue()); + } else { + responses.addFailure("Row " + (rowIndex + 1), + "日期格式错误"); + hasError = true; + throw new IllegalArgumentException("日期格式错误"); + } + Date effectiveDate = formatter.parse(dateStr); + skuWeight.setEffectiveDate(effectiveDate); + break; + } + } catch (Exception ex) { + responses.addFailure("Row " + (rowIndex + 1), " Column " + cellIndex + " error: " + ex.getMessage()); + hasError = true; + } + } + + if (hasError) continue; + + log.info("Querying sku_weight with sku_id = {}", skuWeight.getSkuId()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("sku_id", skuWeight.getSkuId()); + List existingWeight = skuWeightService.list(wrapper); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String dateStr = sdf.format(skuWeight.getEffectiveDate()); + + boolean sameDateExists = existingWeight.stream() + .anyMatch(e -> sdf.format(e.getEffectiveDate()).equals(dateStr)); + if (sameDateExists) { + responses.addSuccess("Row " + (rowIndex + 1), " 已存在相同SKU和日期,跳过"); + log.info("Row {} 已存在相同SKU和日期,跳过", rowIndex + 1); + log.info("Row {} has existing weight with same date for SKU {}, skipping", + rowIndex + 1, skuWeight.getSkuId()); + continue; + } + + boolean sameContentExists = existingWeight.stream() + .anyMatch(e -> e.getWeight() == skuWeight.getWeight()); + if (sameContentExists) { + responses.addSuccess("Row " + (rowIndex + 1), " 内容一致,仅日期不同,跳过"); + log.info("Row {} has existing weight with same content but different date for SKU {}, skipping", + rowIndex + 1, skuWeight.getSkuId()); + continue; + } + + skuWeights.add(skuWeight); + skuWeightMappedByErpCode.put(erpCode, skuWeight); + responses.addSuccess("Row " + (rowIndex + 1), + erpCode + " 成功解析并导入"); + } + if (!skuWeights.isEmpty()) { + //step 1: Save to MySQL and MongoDB + skuWeightService.saveBatch(skuWeights); + skuWeights.forEach(skuWeight -> skuMongoService.upsertSkuWeight(skuWeight)); + log.info("Database import completed, {} records processed", skuWeights.size()); + + //step 2: Notify frontend about the import result + JSONObject detailMsg = new JSONObject(); + detailMsg.put("cmd", "import-result"); + detailMsg.put("msgTxt", "SKU重量导入数据库完成,正在同步马帮..."); + + detailMsg.put("data", new JSONObject() {{ + put("successes", responses.getSuccesses()); + put("failures", responses.getFailures()); + }}); + + log.info("import-result 消息体: {}", detailMsg.toJSONString()); + log.info("import-result message:{} ", detailMsg.toJSONString()); + WebSocketSender.sendToUser(userId, detailMsg.toJSONString()); + + //step 3: Asynchronously call Mabang API + executor.submit(() -> { + try { + ResponsesWithMsg mabangResponses = skuListMabangService.mabangSkuWeightUpdate(skuWeights); + + List matchedSuccesses = new ArrayList<>(); + mabangResponses.getSuccesses().forEach((skuErpCode, messages) -> { + SkuWeight matched = skuWeightMappedByErpCode.get(skuErpCode); + if (matched != null) { + matchedSuccesses.add(matched); + } + }); + log.info("Mabang synchronization completed - successes: {}, failures: {}", + mabangResponses.getSuccesses().size(), mabangResponses.getFailures().size()); + } catch (Exception ex) { + log.error("Mabang synchronization failed", ex); + } + }); + + } else { + log.warn("No valid SKU weights found to import, skipping"); + JSONObject detailMsg = new JSONObject(); + detailMsg.put("cmd", "import-result"); + detailMsg.put("msgTxt", "未发现可导入的 SKU 权重记录"); + detailMsg.put("data", new JSONObject() {{ + put("successes", responses.getSuccesses()); + put("failures", responses.getFailures()); + }}); + + WebSocketSender.sendToUser(userId, detailMsg.toJSONString()); + } + } catch (Exception e) { + log.error("asynchronous import failed", e); + } + }); + } + return Result.OK("导入任务已提交,请稍后查看结果"); + } - mabangResponses.getSuccesses().forEach(responses::addSuccess); - mabangResponses.getFailures().forEach(responses::addFailure); - } catch (Exception e) { - e.printStackTrace(); - String msg = e.getMessage(); - log.error(msg, e); - return Result.error("文件导入失败:" + e.getMessage()); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return Result.OK(responses); - } /** * /!\ Not maintained use updateBatch instead. @@ -335,11 +464,45 @@ public class SkuWeightController extends JeecgController skuWeightsMap = new HashMap<>(); - for(String skuId : param.getIds()){ + + ResponsesWithMsg responses = new ResponsesWithMsg<>(); + for (String weightId : param.getIds()) { + //get SkuWeight by weightId + SkuWeight weightRecord = skuWeightService.getById(weightId); + if (weightRecord == null) { + log.warn("weightId {} invalid, no corresponding SKU weight record found", weightId); + responses.addFailure("weightId 无效: " + weightId); + continue; + } + // get SKU by skuId + String skuId = weightRecord.getSkuId(); Sku sku = skuService.getById(skuId); - if(sku == null){ - return Result.error(404,"SKU not found : " + skuId); + if (sku == null) { + log.warn("SKU not found for weightId: {}", weightId); + responses.addFailure("SKU not found for weightId: " + weightId); + continue; + } + //check if there is an existing record with the same sku_id and effective_date + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("sku_id", skuId); + wrapper.apply("DATE(effective_date) = {0}", new SimpleDateFormat("yyyy-MM-dd").format(param.getEffectiveDate())); + if (skuWeightService.count(wrapper) > 0) { + log.warn("SKU {} already has a weight record for the same date, skipping", sku.getErpCode()); + responses.addSuccess(sku.getErpCode() , ": 相同日期的重量记录已存在,跳过"); + continue; + } + //check if there is an existing record with the same sku_id and weight but different effective_date + wrapper = new QueryWrapper<>(); + wrapper.eq("sku_id", skuId).eq("weight", param.getWeight()); + List existing = skuWeightService.list(wrapper); + boolean sameContentDiffDate = existing.stream() + .anyMatch(e -> !e.getEffectiveDate().equals(param.getEffectiveDate())); + if (sameContentDiffDate) { + log.warn("SKU {} has the same weight but different date, skipping", sku.getErpCode()); + responses.addSuccess(sku.getErpCode() , ": 日期不同但重量相同,跳过"); + continue; } SkuWeight skuWeight = new SkuWeight(); skuWeight.setCreateBy(sysUser.getUsername()); @@ -350,34 +513,40 @@ public class SkuWeightController extends JeecgController skuWeights = new ArrayList<>(skuWeightsMap.values()); + if (skuWeights.isEmpty()) { + log.warn("No valid SKU weights to update, task not submitted"); + return Result.error("日期或者重量重复,没有有效的数据可更新,任务未提交"); + } + // Update Mongo + save to database + skuWeightService.saveBatch(skuWeights); + skuWeights.forEach(skuMongoService::upsertSkuWeight); + skuWeights.forEach(skuWeight -> { + skuMongoService.upsertSkuWeight(skuWeight); + String erpCode = skuService.getById(skuWeight.getSkuId()).getErpCode(); + responses.addSuccess(erpCode, "数据库重量已成功更新"); + }); + + log.info("SKU weights updated successfully, {} records processed", skuWeights.size()); + // send WebSocket message + JSONObject detailMsg = new JSONObject(); + detailMsg.put("cmd", "update-result"); + detailMsg.put("msgTxt", "SKU重量已更新到数据库,正在同步马帮..."); + detailMsg.put("data", new JSONObject() {{ + put("successes", responses.getSuccesses()); + put("failures", responses.getFailures()); + }}); + log.info("update-result message: {}", detailMsg.toJSONString()); + WebSocketSender.sendToUser(userId, detailMsg.toJSONString()); + // Asynchronously call Mabang API to update SKU weights ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS); executor.submit(() -> { try { - ResponsesWithMsg responses = skuListMabangService.mabangSkuWeightUpdate(skuWeights); - List skuWeightSuccesses = new ArrayList<>(); - responses.getSuccesses().forEach((skuErpCode, messages) -> { - skuWeightSuccesses.add(skuWeightsMap.get(skuErpCode)); - }); - // Update Mongo + save to database - skuWeightSuccesses.forEach(skuWeight -> skuMongoService.upsertSkuWeight(skuWeight)); - skuWeightService.saveBatch(skuWeights); + skuListMabangService.mabangSkuWeightUpdate(skuWeights); + log.info("updateBatch call to Mabang submitted successfully"); } catch (Exception e) { - log.error("Asynchronous updateBatch processing failed", e); + log.error("Asynchronous updateBatch call to Mabang failed", e); } }); - return Result.OK("Batch Edit task has been submitted, please check progress later"); - /////////////////////////////////////////////////// - /** - List skuWeights = new ArrayList<>(skuWeightsMap.values()); - ResponsesWithMsg responses = skuListMabangService.mabangSkuWeightUpdate(skuWeights); - List skuWeightSuccesses = new ArrayList<>(); - responses.getSuccesses().forEach((skuErpCode, messages) -> { - skuWeightSuccesses.add(skuWeightsMap.get(skuErpCode)); - }); - - skuWeightSuccesses.forEach(skuWeight -> skuMongoService.upsertSkuWeight(skuWeight)); - skuWeightService.saveBatch(skuWeights); - return Result.OK(responses);*/ } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java index 58b6a03c2..955e1a361 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java @@ -53,12 +53,14 @@ public interface SkuMapper extends BaseMapper { Integer countAllSkus(); Integer countAllSkuWeightsWithFilters(@Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); + Integer countAllSkuWeightHistoryWithFilters(@Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); Integer countAllClientSkus(@Param("clientId") String clientId); Integer countAllClientSkusWithFilters(@Param("clientId") String clientId, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); List fetchSkuWeights(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order); List fetchSkusByClient(@Param("clientId") String clientId, @Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order); List fetchSkuWeightsWithFilters(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); + List fetchAllSkuWeightsWithFilters(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); List fetchSkusByClientWithFilters(@Param("clientId") String clientId, @Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex); List listSelectableSkuIdsWithFilters(@Param("clientId") String clientId, @Param("erpCodes") String erpCodeList, @Param("zhNames") String zhNameList, @Param("enNames") String enNameList); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml index 5666bbf25..8469e48bd 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml @@ -243,22 +243,37 @@ FROM sku s WHERE s.status = 3 AND ( + + s.erp_code REGEXP #{erpCodes} + + - s.erp_code REGEXP #{erpCodes} + AND - - - AND - - s.zh_name REGEXP #{zhNames} + s.zh_name REGEXP #{zhNames} + + + + AND - - - AND - - s.en_name REGEXP #{enNames} - - ); + s.en_name REGEXP #{enNames} + + ); + + +