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