diff --git a/src/main/java/com/vxnet/pms/repository/BaseRepository.java b/src/main/java/com/vxnet/pms/repository/BaseRepository.java index 31925af..2484aa8 100644 --- a/src/main/java/com/vxnet/pms/repository/BaseRepository.java +++ b/src/main/java/com/vxnet/pms/repository/BaseRepository.java @@ -59,7 +59,7 @@ public abstract class BaseRepository { for (Map.Entry entry : params.entrySet()) { try { if (entry.getValue() == null) continue; - String key = entry.getKey(); + String key = entry.getKey().replaceAll("([a-z])([A-Z]+)", "$1_$2").toLowerCase(); Map condition; if (entry.getValue() instanceof String) { condition = objectMapper.readValue((String) entry.getValue(), Map.class); @@ -102,7 +102,11 @@ public abstract class BaseRepository { params = preprocessParams(params); String orderBy = pageable.getSort().isEmpty() ? "" - : pageable.getSort().stream().map(order -> order.getProperty() + " " + order.getDirection()).collect(Collectors.joining(", ")); + : pageable + .getSort() + .stream() + .map(order -> order.getProperty().replaceAll("([a-z])([A-Z]+)", "$1_$2").toLowerCase() + " " + order.getDirection()) + .collect(Collectors.joining(", ")); long page = pageable.getPageNumber(); long size = pageable.getPageSize(); Map bindMap = new HashMap<>(); @@ -113,7 +117,8 @@ public abstract class BaseRepository { for (Map.Entry entry : params.entrySet()) { try { if (entry.getValue() == null) continue; - String key = entry.getKey(); + String keyOrg = entry.getKey(); + String key = keyOrg.replaceAll("([a-z])([A-Z]+)", "$1_$2").toLowerCase(); Map condition; if (entry.getValue() instanceof String) { condition = objectMapper.readValue((String) entry.getValue(), Map.class); @@ -128,7 +133,7 @@ public abstract class BaseRepository { .append(fields.isEmpty() ? "" : ", ") .append(key) .append(" as ") - .append(name.toString().isEmpty() ? key : name.toString()); + .append(name.toString().isEmpty() ? keyOrg : name.toString()); } String operator = condition.get("op").toString(); Object value = condition.get("value"); @@ -167,6 +172,7 @@ public abstract class BaseRepository { } // 执行查询并返回结果 + //return executeSpec.fetch().all().map(this::convertKeysToCamelCase); return executeSpec.fetch().all(); } } diff --git a/src/main/java/com/vxnet/pms/service/DictService.java b/src/main/java/com/vxnet/pms/service/DictService.java index 4211bc2..f4683f7 100644 --- a/src/main/java/com/vxnet/pms/service/DictService.java +++ b/src/main/java/com/vxnet/pms/service/DictService.java @@ -3,7 +3,9 @@ package com.vxnet.pms.service; import com.vxnet.pms.domain.Dict; import com.vxnet.pms.repository.DictRepository; import com.vxnet.pms.security.SecurityUtils; +import java.util.HashMap; import java.util.Map; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import reactor.core.publisher.Flux; @@ -71,35 +73,6 @@ public class DictService { ); } - public Mono countDicts(String table, Map params) { - return SecurityUtils.getCurrentOrganization().flatMap(organization -> dictRepository.countRows(organization, table, params)); - } - - public Flux> getDicts(String table, Map params, Pageable pageable) { - return SecurityUtils.getCurrentOrganization() - .map(organization -> dictRepository.getRows(organization, table, params, pageable)) - .flatMapMany(dicts -> dicts); - } - - public Mono countRootDicts(Map params) { - return SecurityUtils.getCurrentOrganization().flatMap(organization -> dictRepository.countRootDicts(organization, params)); - } - - public Flux getDictTree(Map params, Pageable pageable) { - return SecurityUtils.getCurrentOrganization() - .map(organization -> dictRepository.findRootDicts(organization, params, pageable)) - .flatMapMany(rootDicts -> - rootDicts.flatMap(rootDict -> - Mono.just(rootDict) - .zipWith(getChildren(rootDict.getOrganization(), rootDict.getNumber()).collectList()) - .map(tuple -> { - rootDict.setChildren(tuple.getT2()); - return rootDict; - }) - ) - ); - } - private Flux getChildren(String organization, String number) { return dictRepository .findByParentNumber(organization, number) @@ -112,4 +85,46 @@ public class DictService { }) ); } + + public Mono countDicts(String table, Map params) { + return SecurityUtils.getCurrentOrganization().flatMap(organization -> dictRepository.countRows(organization, table, params)); + } + + public Flux> getDicts(String table, Map params, Pageable pageable) { + return SecurityUtils.getCurrentOrganization() + .map(organization -> dictRepository.getRows(organization, table, params, pageable)) + .flatMapMany(dicts -> dicts); + } + + public Flux> getDictsTree(String table, Map params, Pageable pageable) { + return SecurityUtils.getCurrentOrganization() + .flatMapMany(organization -> + dictRepository + .getRows(organization, table, params, pageable) + .flatMap(dict -> { + params.put("parentNumber[op]", "="); + params.put("parentNumber[value]", dict.get("number").toString()); + return Mono.just(dict) + .zipWith(getRowsChildren(organization, table, params).collectList()) + .map(tuple -> { + dict.put("children", tuple.getT2()); + return dict; + }); + }) + ); + } + + private Flux> getRowsChildren(String organization, String table, Map params) { + return dictRepository + .getRows(organization, table, params, PageRequest.of(0, Integer.MAX_VALUE)) + .flatMap(dict -> { + params.put("parentNumber[value]", dict.get("number").toString()); + return Mono.just(dict) + .zipWith(getRowsChildren(organization, table, params).collectList()) + .map(tuple -> { + dict.put("children", tuple.getT2()); + return dict; + }); + }); + } } diff --git a/src/main/java/com/vxnet/pms/web/rest/CompanyResource.java b/src/main/java/com/vxnet/pms/web/rest/CompanyResource.java index fe71b89..b06c777 100644 --- a/src/main/java/com/vxnet/pms/web/rest/CompanyResource.java +++ b/src/main/java/com/vxnet/pms/web/rest/CompanyResource.java @@ -41,7 +41,7 @@ public class CompanyResource { "property", "remark", "status", - "sort_no", + "sortNo", "createdBy", "createdDate", "updatedBy", diff --git a/src/main/java/com/vxnet/pms/web/rest/DictResource.java b/src/main/java/com/vxnet/pms/web/rest/DictResource.java index 1445c40..e8ecdf1 100644 --- a/src/main/java/com/vxnet/pms/web/rest/DictResource.java +++ b/src/main/java/com/vxnet/pms/web/rest/DictResource.java @@ -32,8 +32,8 @@ public class DictResource { "property", "remark", "status", - "parent_number", - "sort_no", + "parentNumber", + "sortNo", "createdBy", "createdDate", "updatedBy", @@ -82,16 +82,18 @@ public class DictResource { } @GetMapping("/dicts/tree") - public Mono>> getDictTree( + public Mono>>> getDictsTree( @RequestParam Map params, @org.springdoc.core.annotations.ParameterObject Pageable pageable ) { + String table = "jhi_dict"; if (!onlyContainsAllowedProperties(pageable)) { return Mono.just(ResponseEntity.badRequest().build()); } return dictService - .countRootDicts(params) - .map(total -> ResponseEntity.ok().header("X-Total-Count", String.valueOf(total)).body(dictService.getDictTree(params, pageable)) + .countDicts(table, params) + .map(total -> + ResponseEntity.ok().header("X-Total-Count", String.valueOf(total)).body(dictService.getDictsTree(table, params, pageable)) ); } } diff --git a/src/main/java/com/vxnet/pms/web/rest/StockResource.java b/src/main/java/com/vxnet/pms/web/rest/StockResource.java index 685472d..9e6e318 100644 --- a/src/main/java/com/vxnet/pms/web/rest/StockResource.java +++ b/src/main/java/com/vxnet/pms/web/rest/StockResource.java @@ -39,8 +39,8 @@ public class StockResource { "property", "remark", "status", - "parent_number", - "sort_no", + "parentNumber", + "sortNo", "createdBy", "createdDate", "updatedBy", diff --git a/src/main/webapp/app/entities/dict/dict-edit.component.ts b/src/main/webapp/app/entities/dict/dict-edit.component.ts index 16cc736..90dfff4 100644 --- a/src/main/webapp/app/entities/dict/dict-edit.component.ts +++ b/src/main/webapp/app/entities/dict/dict-edit.component.ts @@ -41,18 +41,18 @@ export default defineComponent({ const [parentDictsRes, statusDictsRes] = await Promise.all([ axios.get('api/dicts', { params: { - number: { name: 'number' }, - name: { name: 'name' }, - parent_number: { op: 'IFNULL', value: '' }, + number: { name: '' }, + name: { name: '' }, + parentNumber: { op: 'IFNULL', value: '' }, status: { op: '=', value: '1' }, }, }), axios.get('api/dicts', { params: { - number: { name: 'number' }, - name: { name: 'name' }, - property: { name: 'property' }, - parent_number: { op: '=', value: 'StatusType' }, + number: { name: '' }, + name: { name: '' }, + property: { name: '' }, + parentNumber: { op: '=', value: 'StatusType' }, status: { op: '=', value: '1' }, }, }), diff --git a/src/main/webapp/app/entities/dict/dict.component.ts b/src/main/webapp/app/entities/dict/dict.component.ts index 6cbd3c6..55d7575 100644 --- a/src/main/webapp/app/entities/dict/dict.component.ts +++ b/src/main/webapp/app/entities/dict/dict.component.ts @@ -26,12 +26,23 @@ export default defineComponent({ const statusDicts = ref([]); const showFilter = ref(false); const filterParams = ref({ - number: null, - name: null, - property: null, - status: null, + number: { op: '=', value: null }, + name: { op: '=', value: null }, + property: { op: '=', value: null }, + status: { op: '=', value: null }, }); + const operatorSelect = [ + { value: '=', text: t$('entity.operator.equal') }, + { value: '>', text: t$('entity.operator.greaterThan') }, + { value: '<', text: t$('entity.operator.lessThan') }, + { value: '>=', text: t$('entity.operator.greaterOrEqual') }, + { value: '<=', text: t$('entity.operator.lessOrEqual') }, + { value: '!=', text: t$('entity.operator.notEqual') }, + { value: 'like', text: t$('entity.operator.like') }, + { value: 'not like', text: t$('entity.operator.notLike') }, + ]; + // 父级字典选项 const numberOptions = ref([]); const isLoadingNumberOptions = ref(false); @@ -94,9 +105,9 @@ export default defineComponent({ isLoadingNumberOptions.value = true; try { const params = { - number: { name: 'number' }, - name: { name: 'name' }, - parent_number: { op: 'IFNULL', value: '' }, + number: { name: '' }, + name: { name: '' }, + parentNumber: { op: 'IFNULL', value: '' }, status: { op: '=', value: '1' }, }; //// 如果有查询条件,添加到请求参数中 @@ -126,7 +137,7 @@ export default defineComponent({ handleSyncList(); }; - const propOrder = ref('sort_no'); + const propOrder = ref('sortNo'); const reverse = ref(false); const sort = () => { @@ -151,30 +162,40 @@ export default defineComponent({ const handleSyncList = async () => { isFetching.value = true; try { - const processedParams = showFilter.value - ? Object.entries(filterParams.value).reduce((acc, [key, value]) => { - acc[key] = value === '' ? null : value; - return acc; - }, {}) - : {}; - + let params = Object.entries(dict.value).reduce((acc, [key]) => { + acc[`${key}[name]`] = ''; + if (key === 'parentNumber') { + acc[`${key}[op]`] = 'IFNULL'; + acc[`${key}[value]`] = ''; + } + return acc; + }, {}); + if (showFilter.value) { + params = Object.entries(filterParams.value).reduce((acc, [key, filterParam]) => { + if (filterParam.value !== null && filterParam.value !== '') { + acc[`${key}[op]`] = filterParam.op; + acc[`${key}[value]`] = filterParam.value; + } + return acc; + }, params); + } + console.log('params', params); // 获取分页数据 const paginationQuery = { page: page.value - 1, size: itemsPerPage.value, sort: sort(), }; - // 获取状态字典列表 const [dictsRes, statusDictsRes] = await Promise.all([ axios.get(`api/dicts/tree?${buildPaginationQuery(paginationQuery)}`, { - params: processedParams, + params: params, }), axios.get('api/dicts', { params: { - number: { name: 'number' }, - name: { name: 'name' }, - parent_number: { op: '=', value: 'StatusType' }, + number: { name: '' }, + name: { name: '' }, + parentNumber: { op: '=', value: 'StatusType' }, status: { op: '=', value: '1' }, }, }), @@ -246,6 +267,7 @@ export default defineComponent({ propOrder, reverse, changeOrder, + operatorSelect, handlePageSizeChange, }; }, diff --git a/src/main/webapp/app/entities/dict/dict.vue b/src/main/webapp/app/entities/dict/dict.vue index 0800160..6626a07 100644 --- a/src/main/webapp/app/entities/dict/dict.vue +++ b/src/main/webapp/app/entities/dict/dict.vue @@ -31,32 +31,38 @@
- + + + +
- + + + +
-
- - -
-
- - -
+ + + + + + + +
diff --git a/src/main/webapp/app/entities/stock/stock.component.ts b/src/main/webapp/app/entities/stock/stock.component.ts index 822403d..a3226fb 100644 --- a/src/main/webapp/app/entities/stock/stock.component.ts +++ b/src/main/webapp/app/entities/stock/stock.component.ts @@ -70,23 +70,27 @@ export default defineComponent({ const handleSyncList = async () => { isFetching.value = true; try { - const processedParams = showFilter.value - ? Object.entries(filterParams.value).reduce((acc, [key, filterParam]) => { - if (filterParam.value !== null && filterParam.value !== '') { - acc[`${key}[op]`] = filterParam.op; - acc[`${key}[value]`] = filterParam.value; - } - return acc; - }, {}) - : {}; + let params = Object.entries(stock.value).reduce((acc, [key]) => { + acc[`${key}[name]`] = ''; + return acc; + }, {}); + if (showFilter.value) { + params = Object.entries(filterParams.value).reduce((acc, [key, filterParam]) => { + if (filterParam.value !== null && filterParam.value !== '') { + acc[`${key}[op]`] = filterParam.op; + acc[`${key}[value]`] = filterParam.value; + } + return acc; + }, params); + } const stocksRes = await axios.get( `api/stocks?${buildPaginationQuery({ page: page.value - 1, size: itemsPerPage.value, sort: sort(), - ...processedParams, })}`, + { params: params }, ); stocks.value = stocksRes.data; totalItems.value = stocksRes.headers['x-total-count'] || stocksRes.data.length;