|
|
@@ -0,0 +1,489 @@
|
|
|
+package com.sckw.report.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.sckw.core.model.enums.EntTypeEnum;
|
|
|
+import com.sckw.core.web.context.LoginEntHolder;
|
|
|
+import com.sckw.core.web.response.result.PageDataResult;
|
|
|
+import com.sckw.excel.utils.ExcelUtil;
|
|
|
+import com.sckw.report.entity.KwrRecordOrder;
|
|
|
+import com.sckw.report.model.export.KwrCustomLedgerExport;
|
|
|
+import com.sckw.report.model.export.KwrDailySummaryExport;
|
|
|
+import com.sckw.report.model.export.KwrMonthLedgerExport;
|
|
|
+import com.sckw.report.model.export.KwrTaskListExport;
|
|
|
+import com.sckw.report.model.query.KwrDailySummaryQuery;
|
|
|
+import com.sckw.report.model.query.KwrRecordOrderBaseQuery;
|
|
|
+import com.sckw.report.model.query.KwrTaskListQuery;
|
|
|
+import com.sckw.report.model.vo.KwrDailySummaryRowVo;
|
|
|
+import com.sckw.report.model.vo.KwrFilterOptionsVo;
|
|
|
+import com.sckw.report.model.vo.KwrLedgerSummaryVo;
|
|
|
+import com.sckw.report.model.vo.KwrMonthLedgerRowVo;
|
|
|
+import com.sckw.report.model.vo.KwrSelectOptionVo;
|
|
|
+import com.sckw.report.service.KwrReportService;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class KwrReportServiceImpl implements KwrReportService {
|
|
|
+
|
|
|
+ private static final DateTimeFormatter DAY_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+
|
|
|
+ private final KwrRecordOrderService kwrRecordOrderService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageDataResult<KwrRecordOrder> customLedgerPage(KwrRecordOrderBaseQuery query) {
|
|
|
+ Page<KwrRecordOrder> page = new Page<>(query.getPageNum(), query.getPageSize());
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ Page<KwrRecordOrder> result = kwrRecordOrderService.page(page, wrapper);
|
|
|
+ return PageDataResult.of(result, result.getRecords());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public KwrLedgerSummaryVo customLedgerSummary(KwrRecordOrderBaseQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ wrapper.select("COALESCE(SUM(net_amount),0) AS netAmountTotal", "COUNT(1) AS truckCount");
|
|
|
+ Map<String, Object> map = firstMap(kwrRecordOrderService.listMaps(wrapper));
|
|
|
+ KwrLedgerSummaryVo vo = new KwrLedgerSummaryVo();
|
|
|
+ vo.setNetAmountTotal(toBigDecimal(map.get("netAmountTotal")));
|
|
|
+ vo.setTruckCount(toLong(map.get("truckCount")));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<KwrCustomLedgerExport> customLedgerExport(KwrRecordOrderBaseQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ wrapper.orderByDesc("success_time", "id");
|
|
|
+ List<KwrRecordOrder> list = kwrRecordOrderService.list(wrapper);
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return list.stream().map(e -> {
|
|
|
+ KwrCustomLedgerExport export = new KwrCustomLedgerExport();
|
|
|
+ BeanUtils.copyProperties(e, export);
|
|
|
+ return export;
|
|
|
+ }).toList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageDataResult<KwrMonthLedgerRowVo> monthLedgerPage(KwrRecordOrderBaseQuery query) {
|
|
|
+ Page<Map<String, Object>> page = new Page<>(query.getPageNum(), query.getPageSize());
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ wrapper.select(
|
|
|
+ "goods_name AS goodsName",
|
|
|
+ "goods_type_name AS goodsTypeName",
|
|
|
+ "goods_spec_name AS goodsSpecName",
|
|
|
+ "sup_ent_name AS supEntName",
|
|
|
+ "agent_ent_name AS agentEntName",
|
|
|
+ "GROUP_CONCAT(DISTINCT t_order_no) AS tOrderNos",
|
|
|
+ "GROUP_CONCAT(DISTINCT pro_ent_name) AS proEntNames",
|
|
|
+ "COALESCE(SUM(gross_amount),0) AS grossAmountTotal",
|
|
|
+ "COALESCE(SUM(tare_amount),0) AS tareAmountTotal",
|
|
|
+ "COALESCE(SUM(net_amount),0) AS netAmountTotal",
|
|
|
+ "COUNT(1) AS truckCount"
|
|
|
+ );
|
|
|
+ wrapper.groupBy("goods_name", "goods_type_name", "goods_spec_name", "sup_ent_name", "agent_ent_name");
|
|
|
+ wrapper.orderByDesc("netAmountTotal");
|
|
|
+ Page<Map<String, Object>> result = kwrRecordOrderService.pageMaps(page, wrapper);
|
|
|
+ List<KwrMonthLedgerRowVo> rows = result.getRecords().stream().map(this::mapToMonthRow).toList();
|
|
|
+ return PageDataResult.of(result, rows);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public KwrMonthLedgerRowVo monthLedgerTotal(KwrRecordOrderBaseQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ wrapper.select(
|
|
|
+ "COALESCE(SUM(gross_amount),0) AS grossAmountTotal",
|
|
|
+ "COALESCE(SUM(tare_amount),0) AS tareAmountTotal",
|
|
|
+ "COALESCE(SUM(net_amount),0) AS netAmountTotal",
|
|
|
+ "COUNT(1) AS truckCount"
|
|
|
+ );
|
|
|
+ Map<String, Object> map = firstMap(kwrRecordOrderService.listMaps(wrapper));
|
|
|
+ KwrMonthLedgerRowVo vo = new KwrMonthLedgerRowVo();
|
|
|
+ vo.setGrossAmountTotal(toBigDecimal(map.get("grossAmountTotal")));
|
|
|
+ vo.setTareAmountTotal(toBigDecimal(map.get("tareAmountTotal")));
|
|
|
+ vo.setNetAmountTotal(toBigDecimal(map.get("netAmountTotal")));
|
|
|
+ vo.setTruckCount(toLong(map.get("truckCount")));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<KwrMonthLedgerExport> monthLedgerExport(KwrRecordOrderBaseQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ wrapper.select(
|
|
|
+ "goods_name AS goodsName",
|
|
|
+ "goods_type_name AS goodsTypeName",
|
|
|
+ "goods_spec_name AS goodsSpecName",
|
|
|
+ "sup_ent_name AS supEntName",
|
|
|
+ "agent_ent_name AS agentEntName",
|
|
|
+ "GROUP_CONCAT(DISTINCT t_order_no) AS tOrderNos",
|
|
|
+ "GROUP_CONCAT(DISTINCT pro_ent_name) AS proEntNames",
|
|
|
+ "COALESCE(SUM(gross_amount),0) AS grossAmountTotal",
|
|
|
+ "COALESCE(SUM(tare_amount),0) AS tareAmountTotal",
|
|
|
+ "COALESCE(SUM(net_amount),0) AS netAmountTotal",
|
|
|
+ "COUNT(1) AS truckCount"
|
|
|
+ );
|
|
|
+ wrapper.groupBy("goods_name", "goods_type_name", "goods_spec_name", "sup_ent_name", "agent_ent_name");
|
|
|
+ wrapper.orderByDesc("netAmountTotal");
|
|
|
+ List<Map<String, Object>> records = kwrRecordOrderService.listMaps(wrapper);
|
|
|
+ if (records.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return records.stream().map(m -> {
|
|
|
+ KwrMonthLedgerRowVo row = mapToMonthRow(m);
|
|
|
+ KwrMonthLedgerExport export = new KwrMonthLedgerExport();
|
|
|
+ BeanUtils.copyProperties(row, export);
|
|
|
+ return export;
|
|
|
+ }).toList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageDataResult<KwrDailySummaryRowVo> dailySummaryPage(KwrDailySummaryQuery query) {
|
|
|
+ Page<Map<String, Object>> page = new Page<>(query.getPageNum(), query.getPageSize());
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+
|
|
|
+ String entNameCol = Objects.equals(query.getGroupType(), 2) ? "agent_ent_name" : "pro_ent_name";
|
|
|
+ String entIdCol = Objects.equals(query.getGroupType(), 2) ? "agent_ent_id" : "pro_ent_id";
|
|
|
+
|
|
|
+ wrapper.select(
|
|
|
+ "DATE_FORMAT(success_time,'%Y-%m-%d') AS day",
|
|
|
+ entNameCol + " AS targetEntName",
|
|
|
+ "goods_name AS goodsName",
|
|
|
+ "goods_type_name AS goodsTypeName",
|
|
|
+ "goods_spec_name AS goodsSpecName",
|
|
|
+ "sup_ent_name AS supEntName",
|
|
|
+ "agent_ent_name AS agentEntName",
|
|
|
+ "COUNT(1) AS truckCount",
|
|
|
+ "COALESCE(SUM(CASE WHEN weigh_count <> 2 OR net_amount <= 0 THEN 1 ELSE 0 END),0) AS abnormalTruckCount",
|
|
|
+ "COALESCE(SUM(gross_amount),0) AS grossAmountTotal",
|
|
|
+ "COALESCE(SUM(tare_amount),0) AS tareAmountTotal",
|
|
|
+ "COALESCE(SUM(net_amount),0) AS netAmountTotal"
|
|
|
+ );
|
|
|
+ wrapper.groupBy("DATE_FORMAT(success_time,'%Y-%m-%d')", entIdCol, "goods_name", "goods_type_name", "goods_spec_name", "sup_ent_name", "agent_ent_name");
|
|
|
+ wrapper.orderByDesc("day");
|
|
|
+
|
|
|
+ Page<Map<String, Object>> result = kwrRecordOrderService.pageMaps(page, wrapper);
|
|
|
+ List<KwrDailySummaryRowVo> rows = result.getRecords().stream().map(this::mapToDailyRow).toList();
|
|
|
+ return PageDataResult.of(result, rows);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public KwrLedgerSummaryVo dailySummaryTotal(KwrDailySummaryQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ wrapper.select("COALESCE(SUM(net_amount),0) AS netAmountTotal", "COUNT(1) AS truckCount");
|
|
|
+ Map<String, Object> map = firstMap(kwrRecordOrderService.listMaps(wrapper));
|
|
|
+ KwrLedgerSummaryVo vo = new KwrLedgerSummaryVo();
|
|
|
+ vo.setNetAmountTotal(toBigDecimal(map.get("netAmountTotal")));
|
|
|
+ vo.setTruckCount(toLong(map.get("truckCount")));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<KwrDailySummaryExport> dailySummaryExport(KwrDailySummaryQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+
|
|
|
+ String entNameCol = Objects.equals(query.getGroupType(), 2) ? "agent_ent_name" : "pro_ent_name";
|
|
|
+ String entIdCol = Objects.equals(query.getGroupType(), 2) ? "agent_ent_id" : "pro_ent_id";
|
|
|
+
|
|
|
+ wrapper.select(
|
|
|
+ "DATE_FORMAT(success_time,'%Y-%m-%d') AS day",
|
|
|
+ entNameCol + " AS targetEntName",
|
|
|
+ "goods_name AS goodsName",
|
|
|
+ "goods_type_name AS goodsTypeName",
|
|
|
+ "goods_spec_name AS goodsSpecName",
|
|
|
+ "sup_ent_name AS supEntName",
|
|
|
+ "agent_ent_name AS agentEntName",
|
|
|
+ "COUNT(1) AS truckCount",
|
|
|
+ "COALESCE(SUM(CASE WHEN weigh_count <> 2 OR net_amount <= 0 THEN 1 ELSE 0 END),0) AS abnormalTruckCount",
|
|
|
+ "COALESCE(SUM(gross_amount),0) AS grossAmountTotal",
|
|
|
+ "COALESCE(SUM(tare_amount),0) AS tareAmountTotal",
|
|
|
+ "COALESCE(SUM(net_amount),0) AS netAmountTotal"
|
|
|
+ );
|
|
|
+ wrapper.groupBy("DATE_FORMAT(success_time,'%Y-%m-%d')", entIdCol, "goods_name", "goods_type_name", "goods_spec_name", "sup_ent_name", "agent_ent_name");
|
|
|
+ wrapper.orderByDesc("day");
|
|
|
+
|
|
|
+ List<Map<String, Object>> records = kwrRecordOrderService.listMaps(wrapper);
|
|
|
+ if (records.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return records.stream().map(m -> {
|
|
|
+ KwrDailySummaryRowVo row = mapToDailyRow(m);
|
|
|
+ KwrDailySummaryExport export = new KwrDailySummaryExport();
|
|
|
+ BeanUtils.copyProperties(row, export);
|
|
|
+ return export;
|
|
|
+ }).toList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageDataResult<KwrRecordOrder> taskListPage(KwrTaskListQuery query) {
|
|
|
+ Page<KwrRecordOrder> page = new Page<>(query.getPageNum(), query.getPageSize());
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ if (StrUtil.isNotBlank(query.getAxes())) {
|
|
|
+ wrapper.eq("axes", query.getAxes());
|
|
|
+ }
|
|
|
+ Page<KwrRecordOrder> result = kwrRecordOrderService.page(page, wrapper);
|
|
|
+ return PageDataResult.of(result, result.getRecords());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public KwrLedgerSummaryVo taskListTotal(KwrTaskListQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ if (StrUtil.isNotBlank(query.getAxes())) {
|
|
|
+ wrapper.eq("axes", query.getAxes());
|
|
|
+ }
|
|
|
+ wrapper.select("COALESCE(SUM(net_amount),0) AS netAmountTotal", "COUNT(1) AS truckCount");
|
|
|
+ Map<String, Object> map = firstMap(kwrRecordOrderService.listMaps(wrapper));
|
|
|
+ KwrLedgerSummaryVo vo = new KwrLedgerSummaryVo();
|
|
|
+ vo.setNetAmountTotal(toBigDecimal(map.get("netAmountTotal")));
|
|
|
+ vo.setTruckCount(toLong(map.get("truckCount")));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<KwrTaskListExport> taskListExport(KwrTaskListQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = buildListWrapper(query);
|
|
|
+ if (StrUtil.isNotBlank(query.getAxes())) {
|
|
|
+ wrapper.eq("axes", query.getAxes());
|
|
|
+ }
|
|
|
+ wrapper.orderByDesc("success_time", "id");
|
|
|
+ List<KwrRecordOrder> list = kwrRecordOrderService.list(wrapper);
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return list.stream().map(e -> {
|
|
|
+ KwrTaskListExport export = new KwrTaskListExport();
|
|
|
+ BeanUtils.copyProperties(e, export);
|
|
|
+ return export;
|
|
|
+ }).toList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public KwrFilterOptionsVo filterOptions() {
|
|
|
+ QueryWrapper<KwrRecordOrder> base = new QueryWrapper<>();
|
|
|
+ applyEntScope(base);
|
|
|
+ base.isNotNull("success_time");
|
|
|
+
|
|
|
+ KwrFilterOptionsVo vo = new KwrFilterOptionsVo();
|
|
|
+ vo.setCustomers(distinctEntOptions(base, "pro_ent_id", "pro_ent_name"));
|
|
|
+ vo.setSuppliers(distinctEntOptions(base, "sup_ent_id", "sup_ent_name"));
|
|
|
+ vo.setAgents(distinctEntOptions(base, "agent_ent_id", "agent_ent_name"));
|
|
|
+ vo.setGoodsTypes(distinctStringOptions(base, "goods_type", "goods_type_name"));
|
|
|
+ vo.setGoodsSpecs(distinctStringOptions(base, "goods_spec", "goods_spec_name"));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private QueryWrapper<KwrRecordOrder> buildListWrapper(KwrRecordOrderBaseQuery query) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = new QueryWrapper<>();
|
|
|
+ applyEntScope(wrapper);
|
|
|
+
|
|
|
+ if (StrUtil.isNotBlank(query.getTOrderNo())) {
|
|
|
+ wrapper.like("t_order_no", query.getTOrderNo());
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(query.getLOrderNo())) {
|
|
|
+ wrapper.like("l_order_no", query.getLOrderNo());
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(query.getWOrderNo())) {
|
|
|
+ wrapper.like("w_order_no", query.getWOrderNo());
|
|
|
+ }
|
|
|
+ if (query.getProEntId() != null) {
|
|
|
+ wrapper.eq("pro_ent_id", query.getProEntId());
|
|
|
+ }
|
|
|
+ if (query.getSupEntId() != null) {
|
|
|
+ wrapper.eq("sup_ent_id", query.getSupEntId());
|
|
|
+ }
|
|
|
+ if (query.getAgentEntId() != null) {
|
|
|
+ wrapper.eq("agent_ent_id", query.getAgentEntId());
|
|
|
+ }
|
|
|
+ if (query.getGoodsId() != null) {
|
|
|
+ wrapper.eq("goods_id", query.getGoodsId());
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(query.getGoodsType())) {
|
|
|
+ wrapper.eq("goods_type", query.getGoodsType());
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(query.getGoodsSpec())) {
|
|
|
+ wrapper.eq("goods_spec", query.getGoodsSpec());
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(query.getTruckNo())) {
|
|
|
+ wrapper.like("truck_no", query.getTruckNo());
|
|
|
+ }
|
|
|
+ if (query.getDataType() != null) {
|
|
|
+ wrapper.eq("data_type", query.getDataType());
|
|
|
+ }
|
|
|
+
|
|
|
+ LocalDateTime start = parseTime(query.getSuccessTimeStart());
|
|
|
+ if (start != null) {
|
|
|
+ wrapper.ge("success_time", start);
|
|
|
+ }
|
|
|
+ LocalDateTime end = parseTime(query.getSuccessTimeEnd());
|
|
|
+ if (end != null) {
|
|
|
+ wrapper.le("success_time", end);
|
|
|
+ }
|
|
|
+
|
|
|
+ wrapper.orderByDesc("success_time", "id");
|
|
|
+ return wrapper;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void applyEntScope(QueryWrapper<KwrRecordOrder> wrapper) {
|
|
|
+ String entTypes = LoginEntHolder.getEntTypes();
|
|
|
+ Long entId = LoginEntHolder.getEntId();
|
|
|
+ if (entId == null || StrUtil.isBlank(entTypes)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (entTypes.contains(String.valueOf(EntTypeEnum.SUPPLIER.getCode()))) {
|
|
|
+ wrapper.eq("sup_ent_id", entId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (entTypes.contains(String.valueOf(EntTypeEnum.PURCHASER.getCode()))) {
|
|
|
+ wrapper.eq("pro_ent_id", entId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (entTypes.contains(String.valueOf(EntTypeEnum.PROXY.getCode()))) {
|
|
|
+ wrapper.eq("agent_ent_id", entId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDateTime parseTime(String text) {
|
|
|
+ if (StrUtil.isBlank(text)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return DateUtil.parse(text).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
+ } catch (Exception ignore) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> firstMap(List<Map<String, Object>> list) {
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
+ return Collections.emptyMap();
|
|
|
+ }
|
|
|
+ Map<String, Object> map = list.get(0);
|
|
|
+ return map == null ? Collections.emptyMap() : map;
|
|
|
+ }
|
|
|
+
|
|
|
+ private KwrMonthLedgerRowVo mapToMonthRow(Map<String, Object> map) {
|
|
|
+ KwrMonthLedgerRowVo vo = new KwrMonthLedgerRowVo();
|
|
|
+ vo.setGoodsName(toString(map.get("goodsName")));
|
|
|
+ vo.setGoodsTypeName(toString(map.get("goodsTypeName")));
|
|
|
+ vo.setGoodsSpecName(toString(map.get("goodsSpecName")));
|
|
|
+ vo.setSupEntName(toString(map.get("supEntName")));
|
|
|
+ vo.setAgentEntName(toString(map.get("agentEntName")));
|
|
|
+ vo.setTOrderNos(toString(map.get("tOrderNos")));
|
|
|
+ vo.setProEntNames(toString(map.get("proEntNames")));
|
|
|
+ vo.setGrossAmountTotal(toBigDecimal(map.get("grossAmountTotal")));
|
|
|
+ vo.setTareAmountTotal(toBigDecimal(map.get("tareAmountTotal")));
|
|
|
+ vo.setNetAmountTotal(toBigDecimal(map.get("netAmountTotal")));
|
|
|
+ vo.setTruckCount(toLong(map.get("truckCount")));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private KwrDailySummaryRowVo mapToDailyRow(Map<String, Object> map) {
|
|
|
+ KwrDailySummaryRowVo vo = new KwrDailySummaryRowVo();
|
|
|
+ vo.setDay(toString(map.get("day")));
|
|
|
+ vo.setTargetEntName(toString(map.get("targetEntName")));
|
|
|
+ vo.setGoodsName(toString(map.get("goodsName")));
|
|
|
+ vo.setGoodsTypeName(toString(map.get("goodsTypeName")));
|
|
|
+ vo.setGoodsSpecName(toString(map.get("goodsSpecName")));
|
|
|
+ vo.setSupEntName(toString(map.get("supEntName")));
|
|
|
+ vo.setAgentEntName(toString(map.get("agentEntName")));
|
|
|
+ Long truckCount = toLong(map.get("truckCount"));
|
|
|
+ Long abnormalTruckCount = toLong(map.get("abnormalTruckCount"));
|
|
|
+ vo.setTruckCount(truckCount);
|
|
|
+ vo.setAbnormalTruckCount(abnormalTruckCount);
|
|
|
+ vo.setAbnormalRate(calcRate(abnormalTruckCount, truckCount));
|
|
|
+ vo.setGrossAmountTotal(toBigDecimal(map.get("grossAmountTotal")));
|
|
|
+ vo.setTareAmountTotal(toBigDecimal(map.get("tareAmountTotal")));
|
|
|
+ vo.setNetAmountTotal(toBigDecimal(map.get("netAmountTotal")));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal calcRate(Long abnormal, Long total) {
|
|
|
+ if (abnormal == null || total == null || total == 0L) {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ return BigDecimal.valueOf(abnormal)
|
|
|
+ .multiply(BigDecimal.valueOf(100))
|
|
|
+ .divide(BigDecimal.valueOf(total), 2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<KwrSelectOptionVo> distinctEntOptions(QueryWrapper<KwrRecordOrder> base, String idCol, String nameCol) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = base.clone();
|
|
|
+ wrapper.select(idCol + " AS id", nameCol + " AS name");
|
|
|
+ wrapper.isNotNull(idCol);
|
|
|
+ wrapper.isNotNull(nameCol);
|
|
|
+ wrapper.groupBy(idCol, nameCol);
|
|
|
+ wrapper.orderByAsc(nameCol);
|
|
|
+ List<Map<String, Object>> maps = kwrRecordOrderService.listMaps(wrapper);
|
|
|
+ if (maps == null || maps.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return maps.stream()
|
|
|
+ .map(m -> new KwrSelectOptionVo(toString(m.get("id")), toString(m.get("name"))))
|
|
|
+ .filter(o -> StrUtil.isNotBlank(o.getValue()) && StrUtil.isNotBlank(o.getLabel()))
|
|
|
+ .toList();
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<KwrSelectOptionVo> distinctStringOptions(QueryWrapper<KwrRecordOrder> base, String valueCol, String labelCol) {
|
|
|
+ QueryWrapper<KwrRecordOrder> wrapper = base.clone();
|
|
|
+ wrapper.select(valueCol + " AS value", labelCol + " AS label");
|
|
|
+ wrapper.isNotNull(valueCol);
|
|
|
+ wrapper.isNotNull(labelCol);
|
|
|
+ wrapper.groupBy(valueCol, labelCol);
|
|
|
+ wrapper.orderByAsc(labelCol);
|
|
|
+ List<Map<String, Object>> maps = kwrRecordOrderService.listMaps(wrapper);
|
|
|
+ if (maps == null || maps.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return maps.stream()
|
|
|
+ .map(m -> new KwrSelectOptionVo(toString(m.get("value")), toString(m.get("label"))))
|
|
|
+ .filter(o -> StrUtil.isNotBlank(o.getValue()) && StrUtil.isNotBlank(o.getLabel()))
|
|
|
+ .toList();
|
|
|
+ }
|
|
|
+
|
|
|
+ private String toString(Object obj) {
|
|
|
+ return obj == null ? "" : String.valueOf(obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Long toLong(Object obj) {
|
|
|
+ if (obj == null) {
|
|
|
+ return 0L;
|
|
|
+ }
|
|
|
+ if (obj instanceof Number n) {
|
|
|
+ return n.longValue();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return Long.parseLong(String.valueOf(obj));
|
|
|
+ } catch (Exception e) {
|
|
|
+ return 0L;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal toBigDecimal(Object obj) {
|
|
|
+ if (obj == null) {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ if (obj instanceof BigDecimal b) {
|
|
|
+ return b;
|
|
|
+ }
|
|
|
+ if (obj instanceof Number n) {
|
|
|
+ return BigDecimal.valueOf(n.doubleValue());
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return new BigDecimal(String.valueOf(obj));
|
|
|
+ } catch (Exception e) {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|