refactor(coal): 重构仓库收据服务

- 优化了仓库收据查询逻辑,提高了代码可读性和性能
- 新增 defaultMaps 方法,用于处理空内容的情况
- 简化了数据处理流程,减少了冗余代码
- 优化了变量命名,提高了代码的可维护性
This commit is contained in:
2025-02-16 17:52:59 +08:00
parent 3eb8ee154e
commit 7e9e996d7d

View File

@@ -40,6 +40,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@@ -490,6 +491,35 @@ public class WarehouseReceiptService
@PersistenceContext EntityManager em; @PersistenceContext EntityManager em;
private static @NotNull List<HashMap<Object, Object>> defaultMaps(List<Object> ans) {
return ans.stream()
.map(
x -> {
if (x instanceof Map) {
HashMap<Object, Object> map = new HashMap<>();
map.putAll((Map) x);
map.put("prevNumber", 0.0);
map.put("prevAmount", 0.0);
map.put("prevPrice", 0.0);
map.put("currNumber", 0.0);
map.put("currAmount", 0.0);
map.put("currPrice", 0.0);
map.put("type0Number", 0.0);
map.put("type1Number", 0.0);
map.put("type0Amount", 0.0);
map.put("type1Amount", 0.0);
map.put("type0Price", 0.0);
map.put("type1Price", 0.0);
return map;
}
return null;
})
.toList();
}
public Object report(WarehouseReportRequest request) { public Object report(WarehouseReportRequest request) {
request.setOrganizationId(Ctx.currentUser().getOrganizationId()); request.setOrganizationId(Ctx.currentUser().getOrganizationId());
@@ -785,139 +815,94 @@ from (
newRequest.setEndTime(request.getStartTime().minusSeconds(1)); newRequest.setEndTime(request.getStartTime().minusSeconds(1));
content = ((PageImpl) report(newRequest)).getContent(); content = ((PageImpl) report(newRequest)).getContent();
} else { } else {
content = content = defaultMaps(ans);
ans.stream()
.map(
x -> {
if (x instanceof Map) {
HashMap<Object, Object> map = new HashMap<>();
map.putAll((Map) x);
map.put("prevNumber", 0.0);
map.put("prevAmount", 0.0);
map.put("prevPrice", 0.0);
map.put("currNumber", 0.0);
map.put("currAmount", 0.0);
map.put("currPrice", 0.0);
map.put("type0Number", 0.0);
map.put("type1Number", 0.0);
map.put("type0Amount", 0.0);
map.put("type1Amount", 0.0);
map.put("type0Price", 0.0);
map.put("type1Price", 0.0);
return map;
}
return null;
})
.toList();
} }
if (CollectionUtils.isEmpty(content)) { if (CollectionUtils.isEmpty(content)) {
content = content = defaultMaps(ans);
ans.stream()
.map(
x -> {
if (x instanceof Map) {
HashMap<Object, Object> map = new HashMap<>();
map.putAll((Map) x);
map.put("prevNumber", 0.0);
map.put("prevAmount", 0.0);
map.put("prevPrice", 0.0);
map.put("currNumber", 0.0);
map.put("currAmount", 0.0);
map.put("currPrice", 0.0);
map.put("type0Number", 0.0);
map.put("type1Number", 0.0);
map.put("type0Amount", 0.0);
map.put("type1Amount", 0.0);
map.put("type0Price", 0.0);
map.put("type1Price", 0.0);
return map;
}
return null;
})
.toList();
} }
for (Object o : content) { for (Object o : ans) {
if (o instanceof Map<?, ?> prevMap) { Map<String, Object> currMap = (Map<String, Object>) o;
String uid = currMap.get("uid").toString();
String uid = prevMap.get("uid").toString(); Map<String, Object> prevMap =
(Map<String, Object>)
content.stream()
.filter(
x ->
x instanceof Map
&& ((Map) x).get("uid").equals(uid))
.findFirst()
.orElseGet(() -> {
Map<String, Object> currMap = HashMap<Object, Object> map = new HashMap<>();
(Map<String, Object>)
ans.stream()
.filter(
x ->
x instanceof Map
&& ((Map) x).get("uid").equals(uid))
.findFirst()
.get();
Double prevType0Number =
NumberUtil.parseDouble(prevMap.get("type0Number") + "", 0.0);
Double prevType1Number =
NumberUtil.parseDouble(prevMap.get("type1Number") + "", 0.0);
Double prevType0Amount = map.put("prevNumber", 0.0);
NumberUtil.parseDouble(prevMap.get("type0Amount") + "", 0.0); map.put("prevAmount", 0.0);
map.put("prevPrice", 0.0);
map.put("currNumber", 0.0);
map.put("currAmount", 0.0);
map.put("currPrice", 0.0);
map.put("type0Number", 0.0);
map.put("type1Number", 0.0);
map.put("type0Amount", 0.0);
map.put("type1Amount", 0.0);
map.put("type0Price", 0.0);
map.put("type1Price", 0.0);
return map;
});
Double prevType1Amount = Double prevType0Number = NumberUtil.parseDouble(prevMap.get("type0Number") + "", 0.0);
NumberUtil.parseDouble(prevMap.get("type1Amount") + "", 0.0); Double prevType1Number = NumberUtil.parseDouble(prevMap.get("type1Number") + "", 0.0);
Double prevNumber = prevType0Number - prevType1Number; Double prevType0Amount = NumberUtil.parseDouble(prevMap.get("type0Amount") + "", 0.0);
Double prevAmount = prevType0Amount - prevType1Amount; Double prevType1Amount = NumberUtil.parseDouble(prevMap.get("type1Amount") + "", 0.0);
Double currType0Number = Double prevNumber = prevType0Number - prevType1Number;
NumberUtil.parseDouble(currMap.get("type0Number") + "", 0.0);
Double currType1Number = Double prevAmount = prevType0Amount - prevType1Amount;
NumberUtil.parseDouble(currMap.get("type1Number") + "", 0.0);
Double currType0Amount = Double currType0Number = NumberUtil.parseDouble(currMap.get("type0Number") + "", 0.0);
NumberUtil.parseDouble(currMap.get("type0Amount") + "", 0.0);
Double currType1Amount = Double currType1Number = NumberUtil.parseDouble(currMap.get("type1Number") + "", 0.0);
NumberUtil.parseDouble(currMap.get("type1Amount") + "", 0.0);
Double currNumber = prevNumber + currType0Number - currType1Number; Double currType0Amount = NumberUtil.parseDouble(currMap.get("type0Amount") + "", 0.0);
Double currAmount = prevAmount + currType0Amount - currType1Amount; Double currType1Amount = NumberUtil.parseDouble(currMap.get("type1Amount") + "", 0.0);
Double currPrice = Double currNumber = prevNumber + currType0Number - currType1Number;
NumberUtils.round2(currNumber == 0 ? 0 : currAmount / currNumber);
currMap.put("currNumber", currNumber); Double currAmount = prevAmount + currType0Amount - currType1Amount;
currMap.put("currAmount", currAmount); Double currPrice = NumberUtils.round2(currNumber == 0 ? 0 : currAmount / currNumber);
currMap.put("currPrice", currPrice); currMap.put("currNumber", currNumber);
currMap.put("prevNumber", prevNumber); currMap.put("currAmount", currAmount);
currMap.put("prevAmount", prevAmount); currMap.put("currPrice", currPrice);
currMap.put( currMap.put("prevNumber", prevNumber);
"prevPrice",
NumberUtils.round2(prevNumber == 0 ? 0 : prevAmount / prevNumber));
currMap.put("sum", sumAns.isEmpty() ? null : sumAns.get(0)); currMap.put("prevAmount", prevAmount);
for (String s : currMap.keySet()) { currMap.put(
"prevPrice", NumberUtils.round2(prevNumber == 0 ? 0 : prevAmount / prevNumber));
Object object = currMap.get(s); currMap.put("sum", sumAns.isEmpty() ? null : sumAns.get(0));
if (object instanceof Double) { for (String s : currMap.keySet()) {
currMap.put(s, NumberUtils.round2((Double) object));
} Object object = currMap.get(s);
if (object instanceof Double) {
currMap.put(s, NumberUtils.round2((Double) object));
} }
} }
} }