feat():首页统计前后端代码提交;

master
jiyufei 3 months ago
parent 2ae18cb581
commit 0343e0135f

@ -36,4 +36,11 @@ public interface RecycleBucketService extends IService<RecycleBucketEntity> {
String saveOrUpdate(RecycleBucketForm recycleBucketForm, String id, boolean isSave);
/**
*
*
* @param deviceCodes
* @return list
*/
List<RecycleBucketEntity> getByDeviceCodes(List<String> deviceCodes);
}

@ -1,15 +1,15 @@
package jnpf.service;
import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.base.vo.DownloadVO;
import jnpf.entity.RecycleCleanOrderEntity;
import jnpf.model.recyclecleanorder.*;
import jnpf.entity.*;
import java.util.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jnpf.model.recycledeliveryorder.OrderStatisticsRequest;
import jnpf.model.recycledeliveryorder.OrderStatisticsResponse;
import jnpf.model.recycledeliveryorder.OrderStatisticsVO;
import java.util.List;
/**
*
* V3.5
@ -54,4 +54,12 @@ public interface RecycleCleanOrderService extends IService<RecycleCleanOrderEnti
* @return vo
*/
DownloadVO export(List<OrderStatisticsVO> dataList);
/**
*
*
* @param companyId id
* @return entity
*/
CleanOrderResponse deliveryOrderCount(String companyId);
}

@ -70,4 +70,12 @@ public interface RecycleDeliveryOrderService extends IService<RecycleDeliveryOrd
* @return vo
*/
DownloadVO export(List<OrderStatisticsVO> dataList);
/**
*
*
* @param companyId id
* @return entity
*/
DeliveryOrderResponse deliveryOrderCount(String companyId);
}

@ -61,4 +61,12 @@ public interface RecycleDeviceService extends IService<RecycleDeviceEntity> {
* @param companyId id
*/
List<String> getStationByCompanyId(String companyId);
/**
*
*
* @param companyId id
* @return entity
*/
RecycleDeviceResponse deviceCount(String companyId);
}

@ -45,4 +45,12 @@ public interface RecycleOrderService extends IService<RecycleOrderEntity> {
* @return list
*/
List<RecycleOrderResponse> compute(RecycleOrderRequest request);
/**
*
*
* @param companyId id
* @return entity
*/
RecycleOrderCountResponse orderCount(String companyId);
}

@ -365,6 +365,14 @@ public class RecycleBucketServiceImpl extends ServiceImpl<RecycleBucketMapper, R
return "操作失败";
}
@Override
public List<RecycleBucketEntity> getByDeviceCodes(List<String> deviceCodes) {
QueryWrapper<RecycleBucketEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().in(RecycleBucketEntity::getDeviceCode, deviceCodes);
queryWrapper.lambda().isNull(RecycleBucketEntity::getDeleteMark);
return this.list(queryWrapper);
}
@Override
public List<RecycleBucketEntity> getByDeviceCode(String deviceCode) {
QueryWrapper<RecycleBucketEntity> queryWrapper = new QueryWrapper<>();

@ -1,60 +1,43 @@
package jnpf.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.base.UserInfo;
import jnpf.base.model.ColumnDataModel;
import jnpf.base.vo.DownloadVO;
import jnpf.entity.*;
import jnpf.database.model.superQuery.SuperJsonModel;
import jnpf.entity.RecycleCleanOrderEntity;
import jnpf.mapper.RecycleCleanOrderMapper;
import jnpf.model.QueryModel;
import jnpf.model.recyclecleanorder.*;
import jnpf.model.recycledeliveryorder.OrderStatisticsRequest;
import jnpf.model.recycledeliveryorder.OrderStatisticsResponse;
import jnpf.model.recycledeliveryorder.OrderStatisticsVO;
import jnpf.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.model.recyclecleanorder.*;
import java.math.BigDecimal;
import cn.hutool.core.util.ObjectUtil;
import jnpf.permission.model.authorize.AuthorizeConditionModel;
import jnpf.util.GeneraterSwapUtil;
import jnpf.database.model.superQuery.SuperQueryJsonModel;
import jnpf.database.model.superQuery.ConditionJsonModel;
import jnpf.database.model.superQuery.SuperQueryConditionModel;
import java.lang.reflect.Field;
import com.baomidou.mybatisplus.annotation.TableField;
import java.time.LocalDateTime;
import java.util.regex.Pattern;
import jnpf.model.QueryModel;
import java.util.stream.Collectors;
import jnpf.base.model.ColumnDataModel;
import jnpf.permission.entity.UserEntity;
import jnpf.service.RecycleCleanOrderService;
import jnpf.service.RecycleDeviceService;
import jnpf.util.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jnpf.database.model.superQuery.SuperJsonModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import jnpf.util.*;
import java.time.LocalDateTime;
import java.util.*;
import jnpf.base.UserInfo;
import jnpf.permission.entity.UserEntity;
import javax.annotation.Resource;
import java.util.stream.Collectors;
/**
*
@ -401,7 +384,8 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderM
}
Date[] date = recycleDeliveryOrderService.getMonthStartAndEndDate(request.getYear(), request.getMonth());
LambdaQueryWrapper<RecycleCleanOrderEntity> wrapper = new LambdaQueryWrapper<>(RecycleCleanOrderEntity.class)
.between(RecycleCleanOrderEntity::getCreatorTime, date[0], date[1]);
.between(RecycleCleanOrderEntity::getCreatorTime, date[0], date[1])
.isNull(RecycleCleanOrderEntity::getDeleteMark);
wrapper.in(RecycleCleanOrderEntity::getDeviceCode, finalDeviceCodes);
if (ObjectUtil.isNotEmpty(request.getAuditStatus())) {
wrapper.eq(RecycleCleanOrderEntity::getAdjustStatus, request.getAuditStatus());
@ -430,4 +414,39 @@ public class RecycleCleanOrderServiceImpl extends ServiceImpl<RecycleCleanOrderM
public DownloadVO export(List<OrderStatisticsVO> dataList) {
return recycleDeliveryOrderService.exportUtil("date,weight,adjustWeight,price,adjustPrice", "清运清单统计", dataList);
}
@Override
public CleanOrderResponse deliveryOrderCount(String companyId) {
CleanOrderResponse response = new CleanOrderResponse();
//如果是管理员并且companyId为空 则直接返回空
if (userProvider.get().getIsAdministrator() && StringUtil.isEmpty(companyId)) {
return response;
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonth = calendar.getTime();
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date lastDayOfMonth = calendar.getTime();
//默认查询当月数据
LambdaQueryWrapper<RecycleCleanOrderEntity> wrapper = new LambdaQueryWrapper<>(RecycleCleanOrderEntity.class)
.isNull(RecycleCleanOrderEntity::getDeleteMark)
.between(RecycleCleanOrderEntity::getCreatorTime, firstDayOfMonth, lastDayOfMonth);
if (StringUtil.isNotEmpty(companyId)) {
wrapper.eq(RecycleCleanOrderEntity::getCompanyId, companyId);
} else {
wrapper.eq(RecycleCleanOrderEntity::getCompanyId, userProvider.get().getOrganizeId());
}
List<RecycleCleanOrderEntity> list = this.list(wrapper);
if (CollectionUtils.isEmpty(list)) {
return response;
}
response.setOrders(list.size());
response.setTotalWeight(list.stream().map(RecycleCleanOrderEntity::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
response.setAuditedOrders((int) list.stream().filter(obj -> obj.getAdjustStatus().equals(1)).count());
response.setAuditedWeight(list.stream().filter(obj -> obj.getAdjustStatus().equals(1)).map(RecycleCleanOrderEntity::getAdjustWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
response.setUnauditedOrders((int) list.stream().filter(obj -> obj.getAdjustStatus().equals(0)).count());
response.setUnauditedWeight(list.stream().filter(obj -> obj.getAdjustStatus().equals(0)).map(RecycleCleanOrderEntity::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
return response;
}
}

@ -24,7 +24,6 @@ import jnpf.mapper.RecycleDeliveryOrderMapper;
import jnpf.model.QueryModel;
import jnpf.model.recycledeliveryorder.*;
import jnpf.permission.entity.UserEntity;
import jnpf.permission.model.user.vo.UserExportVO;
import jnpf.service.*;
import jnpf.util.*;
import lombok.Cleanup;
@ -696,7 +695,8 @@ public class RecycleDeliveryOrderServiceImpl extends ServiceImpl<RecycleDelivery
//处理时间查询条件
Date[] date = this.getMonthStartAndEndDate(request.getYear(), request.getMonth());
LambdaQueryWrapper<RecycleDeliveryOrderEntity> wrapper = new LambdaQueryWrapper<>(RecycleDeliveryOrderEntity.class)
.between(RecycleDeliveryOrderEntity::getCreatorTime, date[0], date[1]);
.between(RecycleDeliveryOrderEntity::getCreatorTime, date[0], date[1])
.isNull(RecycleDeliveryOrderEntity::getDeleteMark);
wrapper.in(RecycleDeliveryOrderEntity::getDeviceCode, finalDeviceCodes);
//查询条件
if (ObjectUtil.isNotEmpty(request.getAuditStatus())) {
@ -727,6 +727,43 @@ public class RecycleDeliveryOrderServiceImpl extends ServiceImpl<RecycleDelivery
return exportUtil("date,weight,adjustWeight,price,adjustPrice", "投递清单统计", dataList);
}
@Override
public DeliveryOrderResponse deliveryOrderCount(String companyId) {
DeliveryOrderResponse response = new DeliveryOrderResponse();
//如果是管理员并且companyId为空 则直接返回空
if (userProvider.get().getIsAdministrator() && StringUtil.isEmpty(companyId)) {
return response;
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonth = calendar.getTime();
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date lastDayOfMonth = calendar.getTime();
//默认查询当月数据
LambdaQueryWrapper<RecycleDeliveryOrderEntity> wrapper = new LambdaQueryWrapper<>(RecycleDeliveryOrderEntity.class)
.isNull(RecycleDeliveryOrderEntity::getDeleteMark)
.between(RecycleDeliveryOrderEntity::getCreatorTime, firstDayOfMonth, lastDayOfMonth);
if (StringUtil.isNotEmpty(companyId)) {
wrapper.eq(RecycleDeliveryOrderEntity::getCompanyId, companyId);
} else {
wrapper.eq(RecycleDeliveryOrderEntity::getCompanyId, userProvider.get().getOrganizeId());
}
List<RecycleDeliveryOrderEntity> list = this.list(wrapper);
if (CollectionUtils.isEmpty(list)) {
return response;
}
//查询商户余额
CompanyEntity company = companyService.getById(companyId);
if (ObjectUtil.isNotEmpty(company)) {
response.setFund(company.getFund());
}
response.setPrice(list.stream().filter(obj -> obj.getAdjustStatus().equals(1)).map(RecycleDeliveryOrderEntity::getAdjustPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
response.setOrders((int) list.stream().filter(obj -> obj.getAdjustStatus().equals(1)).count());
response.setErrorOrders((int) list.stream().filter(obj -> obj.getReportWeight().compareTo(BigDecimal.ZERO) <= 0).count());
return response;
}
public DownloadVO exportUtil(String selectKey, String explain, List<OrderStatisticsVO> modeList) {
List<OrderStatisticsVO> list = JsonUtil.listToJsonField(JsonUtil.getJsonToList(modeList, OrderStatisticsVO.class));
List<ExcelExportEntity> entitys = new ArrayList<>();

@ -15,16 +15,21 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.base.UserInfo;
import jnpf.base.model.ColumnDataModel;
import jnpf.database.model.superQuery.SuperJsonModel;
import jnpf.entity.RecycleBucketEntity;
import jnpf.entity.RecycleDeliveryOrderEntity;
import jnpf.entity.RecycleDeviceConfigEntity;
import jnpf.entity.RecycleDeviceEntity;
import jnpf.mapper.RecycleDeviceMapper;
import jnpf.model.QueryModel;
import jnpf.model.recycledevice.RecycleDeviceConstant;
import jnpf.model.recycledevice.RecycleDeviceForm;
import jnpf.model.recycledevice.RecycleDevicePagination;
import jnpf.model.recycledevice.RecycleDeviceResponse;
import jnpf.permission.entity.UserEntity;
import jnpf.service.RecycleBucketService;
import jnpf.service.RecycleDeviceService;
import jnpf.util.*;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
@ -39,6 +44,7 @@ import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -49,6 +55,7 @@ import java.util.stream.Collectors;
* 2024-06-22
*/
@Service
@Slf4j
public class RecycleDeviceServiceImpl extends ServiceImpl<RecycleDeviceMapper, RecycleDeviceEntity> implements RecycleDeviceService {
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@ -57,6 +64,8 @@ public class RecycleDeviceServiceImpl extends ServiceImpl<RecycleDeviceMapper, R
private UserProvider userProvider;
@Resource
private RecycleDeviceMapper recycleDeviceMapper;
@Resource
private RecycleBucketService recycleBucketService;
@Value("${nxhs.url}")
private String wx_url;
@ -501,4 +510,37 @@ public class RecycleDeviceServiceImpl extends ServiceImpl<RecycleDeviceMapper, R
}
return list.stream().map(RecycleDeviceEntity::getBeLongStationId).distinct().collect(Collectors.toList());
}
@Override
public RecycleDeviceResponse deviceCount(String companyId) {
log.info("首页查询设备统计companyId{}", companyId);
RecycleDeviceResponse response = new RecycleDeviceResponse();
//如果是管理员并且companyId为空 则直接返回空
if (userProvider.get().getIsAdministrator() && StringUtil.isEmpty(companyId)) {
return response;
}
LambdaQueryWrapper<RecycleDeviceEntity> wrapper = new LambdaQueryWrapper<>(RecycleDeviceEntity.class)
.isNull(RecycleDeviceEntity::getDeleteMark);
if (StringUtil.isNotEmpty(companyId)) {
wrapper.eq(RecycleDeviceEntity::getBeLongCompanyId, companyId);
} else {
wrapper.eq(RecycleDeviceEntity::getBeLongCompanyId, userProvider.get().getOrganizeId());
}
List<RecycleDeviceEntity> list = this.list(wrapper);
if (CollectionUtils.isEmpty(list)) {
return response;
}
//查询回收桶 获取烟雾报警以及满溢报警数
List<RecycleBucketEntity> bucketEntities = recycleBucketService.getByDeviceCodes(list.stream().map(RecycleDeviceEntity::getDeviceCode).collect(Collectors.toList()));
//满溢状态
Map<String, RecycleBucketEntity> fullCollect = bucketEntities.stream().filter(obj -> obj.getFullStatus() == 1).collect(Collectors.toMap(RecycleBucketEntity::getDeviceCode, Function.identity()));
//烟雾状态
Map<String, RecycleBucketEntity> sogCollect = bucketEntities.stream().filter(obj -> obj.getSmogStatus() == 1).collect(Collectors.toMap(RecycleBucketEntity::getDeviceCode, Function.identity()));
response.setDeviceNums(list.size());
response.setOnlineNums((int) list.stream().filter(obj -> obj.getStatus() == 1).count());
response.setOfflineNums((int) list.stream().filter(obj -> obj.getStatus() == 0).count());
response.setFullNums((int) list.stream().filter(obj -> fullCollect.containsKey(obj.getDeviceCode())).count());
response.setSogNums((int) list.stream().filter(obj -> sogCollect.containsKey(obj.getDeviceCode())).count());
return response;
}
}

@ -14,6 +14,7 @@ import jnpf.base.model.ColumnDataModel;
import jnpf.constant.PermissionConst;
import jnpf.database.model.superQuery.SuperJsonModel;
import jnpf.entity.EnterpriserecyclestationEntity;
import jnpf.entity.RecycleCleanOrderEntity;
import jnpf.entity.RecycleOrderEntity;
import jnpf.entity.RecycleOrderProductEntity;
import jnpf.mapper.RecycleOrderMapper;
@ -572,7 +573,8 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
.eq(RecycleOrderEntity::getOrderTypeId, OrderTypeEnum.SH_ORDER.getCode())
.in(RecycleOrderEntity::getRecycleStationId, Lists.newArrayList(stationMap.keySet()))
.ge(RecycleOrderEntity::getCreatorTime, request.getCreatStartTime())
.le(RecycleOrderEntity::getCreatorTime, request.getCreatEndTime()));
.le(RecycleOrderEntity::getCreatorTime, request.getCreatEndTime())
.isNull(RecycleOrderEntity::getDeleteMark));
List<RecycleOrderResponse> result = Lists.newArrayList();
//总接单数
int takeOrders = 0;
@ -618,4 +620,45 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
}
return result;
}
@Override
public RecycleOrderCountResponse orderCount(String companyId) {
RecycleOrderCountResponse response = new RecycleOrderCountResponse();
//如果是管理员并且companyId为空 则直接返回空
if (userProvider.get().getIsAdministrator() && StringUtil.isEmpty(companyId)) {
return response;
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonth = calendar.getTime();
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date lastDayOfMonth = calendar.getTime();
//默认查询当月数据
LambdaQueryWrapper<RecycleOrderEntity> wrapper = new LambdaQueryWrapper<>(RecycleOrderEntity.class)
.isNull(RecycleOrderEntity::getDeleteMark)
.between(RecycleOrderEntity::getCreatorTime, firstDayOfMonth, lastDayOfMonth);
if (StringUtil.isNotEmpty(companyId)) {
wrapper.eq(RecycleOrderEntity::getCompanyId, companyId);
} else {
wrapper.eq(RecycleOrderEntity::getCompanyId, userProvider.get().getOrganizeId());
}
List<RecycleOrderEntity> list = this.list(wrapper);
if (CollectionUtils.isEmpty(list)) {
return response;
}
//散户下单
response.setDoorRecycleOrders((int) list.stream().filter(obj -> obj.getOrderTypeId().equals(OrderTypeEnum.SH_ORDER.getCode())).count());
response.setDoorRecyclePrice(list.stream().filter(obj -> obj.getOrderTypeId().equals(OrderTypeEnum.SH_ORDER.getCode()))
.map(RecycleOrderEntity::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
//定时回收
response.setRegularRecycleOrders((int) list.stream().filter(obj -> obj.getOrderTypeId().equals(OrderTypeEnum.TM_RECOVERY.getCode())).count());
response.setRegularRecyclePrice(list.stream().filter(obj -> obj.getOrderTypeId().equals(OrderTypeEnum.TM_RECOVERY.getCode()))
.map(RecycleOrderEntity::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
//到站回收
response.setInboundRecycleOrders((int) list.stream().filter(obj -> obj.getOrderTypeId().equals(OrderTypeEnum.DZ_RECOVERY.getCode())).count());
response.setInboundRecyclePrice(list.stream().filter(obj -> obj.getOrderTypeId().equals(OrderTypeEnum.DZ_RECOVERY.getCode()))
.map(RecycleOrderEntity::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
return response;
}
}

@ -252,4 +252,10 @@ public class RecycleCleanOrderController {
return ActionResult.success(vo);
}
@Operation(summary = "首页清运订单统计")
@GetMapping("/cleanOrderCount/{companyId}")
public ActionResult cleanOrderCount(@PathVariable String companyId) {
return ActionResult.success(recycleCleanOrderService.deliveryOrderCount(companyId));
}
}

@ -243,4 +243,10 @@ public class RecycleDeliveryOrderController {
return ActionResult.success(vo);
}
@Operation(summary = "首页投递订单统计")
@GetMapping("/deliveryOrderCount/{companyId}")
public ActionResult deliveryOrderCount(@PathVariable String companyId) {
return ActionResult.success(recycleDeliveryOrderService.deliveryOrderCount(companyId));
}
}

@ -399,4 +399,10 @@ public class RecycleDeviceController {
}
return ActionResult.success(list);
}
@Operation(summary = "首页设备信息统计")
@GetMapping("/deviceCount/{companyId}")
public ActionResult deviceCount(@PathVariable String companyId) {
return ActionResult.success(recycleDeviceService.deviceCount(companyId));
}
}

@ -214,4 +214,10 @@ public class RecycleOrderController {
return ActionResult.success(recycleOrderService.compute(request));
}
@Operation(summary = "首页回收订单统计")
@GetMapping("/orderCount/{companyId}")
public ActionResult orderCount(@PathVariable String companyId) {
return ActionResult.success(recycleOrderService.orderCount(companyId));
}
}

@ -0,0 +1,39 @@
package jnpf.model.recyclecleanorder;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class CleanOrderResponse implements Serializable {
/**
*
*/
private int orders;
/**
*
*/
private BigDecimal totalWeight;
/**
*
*/
private int auditedOrders;
/**
*
*/
private BigDecimal auditedWeight;
/**
*
*/
private int unauditedOrders;
/**
*
*/
private BigDecimal unauditedWeight;
}

@ -0,0 +1,29 @@
package jnpf.model.recycledeliveryorder;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class DeliveryOrderResponse implements Serializable {
/**
*
*/
private int orders;
/**
*
*/
private BigDecimal price;
/**
*
*/
private int errorOrders;
/**
*
*/
private BigDecimal fund;
}

@ -0,0 +1,28 @@
package jnpf.model.recycledeliveryorder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderValue implements Serializable {
/**
*
*/
private String description;
/**
*
*/
private String nums;
public OrderValue(OrderValue orderValue) {
this.description = orderValue.getDescription();
this.nums = orderValue.getNums();
}
}

@ -0,0 +1,35 @@
package jnpf.model.recycledevice;
import lombok.Data;
import java.io.Serializable;
@Data
public class RecycleDeviceResponse implements Serializable {
/**
*
*/
private int deviceNums;
/**
* 线
*/
private int onlineNums;
/**
* 线
*/
private int offlineNums;
/**
*
*/
private int fullNums;
/**
*
*/
private int sogNums;
}

@ -0,0 +1,42 @@
package jnpf.model.recycleorder;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class RecycleOrderCountResponse implements Serializable {
/**
*
*/
private int doorRecycleOrders;
/**
*
*/
private BigDecimal doorRecyclePrice;
/**
*
*/
private int regularRecycleOrders;
/**
*
*/
private BigDecimal regularRecyclePrice;
/**
*
*/
private int inboundRecycleOrders;
/**
*
*/
private BigDecimal inboundRecyclePrice;
}

@ -0,0 +1,836 @@
<template>
<div class="dashboard-editor-container">
<el-row class="JNPF-common-search-box" :gutter="16">
<el-form @submit.native.prevent>
<el-col :span="6">
<el-form-item label="商户">
<JnpfSelect v-model="dataForm.beLongCompanyId" placeholder="请选择要查询的商户" clearable
:options="beLongCompanyIdOptions" :props="beLongCompanyIdProps">
</JnpfSelect>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="search()"></el-button>
<el-button icon="el-icon-refresh-right" @click="reset()"></el-button>
</el-form-item>
</el-col>
</el-form>
</el-row>
<div class="sale">
<div class="sale_title">
<span>设备信息</span>
</div>
<ul class="sale_items">
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>设备数量</span>
<p class="nums">
<count-to :start-val="0" :end-val="deviceNums" :duration="2600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>在线</span>
<p class="nums">
<count-to :start-val="0" :end-val="onlineNums" :duration="3600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>离线</span>
<p class="nums">
<count-to :start-val="0" :end-val="offlineNums" :duration="3600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>满溢报警</span>
<p class="nums">
<count-to :start-val="0" :end-val="fullNums" :duration="2600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>烟雾报警</span>
<p class="nums">
<count-to :start-val="0" :end-val="sogNums" :duration="2600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
</ul>
</div>
<div class="sale">
<div class="sale_title">
<span>投递订单信息本月</span>
<span>已审核</span>
</div>
<ul class="sale_items">
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>订单总数</span>
<p class="nums">
<count-to :start-val="0" :end-val="orders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span>总金额</span>
<p class="nums">
{{ price.toFixed(2) }}
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>异常重量</span>
<p class="nums">
<count-to :start-val="0" :end-val="errorOrders" :duration="3600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
</ul>
</div>
<div class="sale">
<div class="sale_title">
<span>清运订单信息本月</span>
<span>已审核</span>
</div>
<ul class="sale_items">
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>订单总数</span>
<p class="nums">
<count-to :start-val="0" :end-val="cleanOrders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span>总重量</span>
<p class="nums">
<count-to :start-val="0" :end-val="totalWeight" :duration="3600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>审核后总订单</span>
<p class="nums">
<count-to :start-val="0" :end-val="auditedOrders" :duration="3600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span>审核后总重量</span>
<p class="nums">
<count-to :start-val="0" :end-val="auditedWeight" :duration="3600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>未审核总订单</span>
<p class="nums">
<count-to :start-val="0" :end-val="unauditedOrders" :duration="3600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span>未审核总重量</span>
<p class="nums">
<count-to :start-val="0" :end-val="unauditedWeight" :duration="3600" class="card-panel-num" />
</p>
</li>
</div>
</el-card>
</ul>
</div>
<div class="sale">
<div class="sale_title">
<span>回收订单信息本月</span>
</div>
<ul class="sale_items">
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>上门回收订单数</span>
<p class="nums">
<count-to :start-val="0" :end-val="doorRecycleOrders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span> 上门回收金额</span>
<p class="nums">
{{ doorRecyclePrice.toFixed(2) }}
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>定时回收订单数</span>
<p class="nums">
<count-to :start-val="0" :end-val="regularRecycleOrders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span> 定时回收金额</span>
<p class="nums">
{{ regularRecyclePrice.toFixed(2) }}
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>定时回收订单数</span>
<p class="nums">
<count-to :start-val="0" :end-val="inboundRecycleOrders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span> 定时回收金额</span>
<p class="nums">
{{ inboundRecyclePrice.toFixed(2) }}
</p>
</li>
</div>
</el-card>
</ul>
</div>
<div class="sale">
<div class="sale_title">
<span>财务信息本月</span>
</div>
<ul class="sale_items">
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span> 账户余额</span>
<p class="nums">
{{ fund.toFixed(2) }}
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>投递单订单数</span>
<p class="nums">
<count-to :start-val="0" :end-val="orders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span> 投递单总金额</span>
<p class="nums">
{{ price.toFixed(2) }}
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>上门回收订单数</span>
<p class="nums">
<count-to :start-val="0" :end-val="doorRecycleOrders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span> 上门回收金额</span>
<p class="nums">
{{ doorRecyclePrice.toFixed(2) }}
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>定时回收订单数</span>
<p class="nums">
<count-to :start-val="0" :end-val="regularRecycleOrders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span> 定时回收金额</span>
<p class="nums">
{{ regularRecyclePrice.toFixed(2) }}
</p>
</li>
</div>
</el-card>
<el-card class="box-card">
<div class="card-items">
<li class="card-item">
<span>定时回收订单数</span>
<p class="nums">
<count-to :start-val="0" :end-val="inboundRecycleOrders" :duration="2600" class="card-panel-num" />
</p>
</li>
<li class="card-item">
<span> 定时回收金额</span>
<p class="nums">
{{ inboundRecyclePrice.toFixed(2) }}
</p>
</li>
</div>
</el-card>
</ul>
</div>
<panel-group />
</div>
</template>
<script>
import request from '@/utils/request';
import { getCompanyList } from "@/api/device";
import CountTo from 'vue-count-to';
import { getDataInterfaceRes } from "@/api/systemData/dataInterface";
import { Card } from 'element-ui';
export default {
name: 'DashboardAdmin',
components: {
CountTo,
[Card.name]: Card
},
data() {
return {
intervalId: null,
beLongCompanyIdOptions: [],
beLongCompanyIdProps: { label: "enterpriseName", value: "id" },
deviceNums: 0,
onlineNums: 0,
offlineNums: 0,
fullNums: 0,
sogNums: 0,
orders: 0,
price: 0,
errorOrders: 0,
fund: 0,
cleanOrders: 0,
totalWeight: 0,
auditedOrders: 0,
auditedWeight: 0,
unauditedOrders: 0,
unauditedWeight: 0,
doorRecycleOrders: 0,
doorRecyclePrice: 0,
regularRecycleOrders: 0,
regularRecyclePrice: 0,
inboundRecycleOrders: 0,
inboundRecyclePrice: 0,
dataForm: {
beLongCompanyId: undefined
},
query: {
beLongCompanyId: undefined
},
interfaceRes: {
beLongCompanyId: []
},
queryData: {},
}
},
mounted() {
this.startNumberAnimation();
},
beforeDestroy() {
if (this.intervalId) {
clearInterval(this.intervalId);
this.intervalId = null;
}
},
created() {
this.initDeviceData();
this.initDeliveryOrderData();
this.initCleanOrderData();
this.orderData();
this.getbeLongCompanyIdOptions();
this.queryData = JSON.parse(JSON.stringify(this.query));
},
computed: {
},
methods: {
initDeviceData() {
if (this.dataForm.beLongCompanyId == undefined) {
this.$message.error('请选择需要查询的商户');
return;
}
request({
url: `/api/scm/RecycleDevice/deviceCount/` + this.dataForm.beLongCompanyId,
method: 'get',
}).then(res => {
this.deviceNums = res.data.deviceNums;
this.onlineNums = res.data.onlineNums;
this.offlineNums = res.data.offlineNums;
this.fullNums = res.data.fullNums;
this.sogNums = res.data.sogNums;
})
},
initDeliveryOrderData() {
if (this.dataForm.beLongCompanyId == undefined) {
this.$message.error('请选择需要查询的商户');
return;
}
request({
url: `/api/scm/RecycleDeliveryOrder/deliveryOrderCount/` + this.dataForm.beLongCompanyId,
method: 'get',
}).then(res => {
this.orders = res.data.orders;
this.price = res.data.price;
this.errorOrders = res.data.errorOrders;
this.fund = res.data.fund;
})
},
initCleanOrderData() {
if (this.dataForm.beLongCompanyId == undefined) {
this.$message.error('请选择需要查询的商户');
return;
}
request({
url: `/api/scm/RecycleCleanOrder/cleanOrderCount/` + this.dataForm.beLongCompanyId,
method: 'get',
}).then(res => {
this.cleanOrders = res.data.orders;
this.totalWeight = res.data.totalWeight;
this.auditedOrders = res.data.auditedOrders;
this.auditedWeight = res.data.auditedWeight;
this.unauditedOrders = res.data.unauditedOrders;
this.unauditedWeight = res.data.unauditedWeight;
})
},
orderData() {
if (this.dataForm.beLongCompanyId == undefined) {
this.$message.error('请选择需要查询的商户');
return;
}
request({
url: `/api/scm/RecycleOrder/orderCount/` + this.dataForm.beLongCompanyId,
method: 'get',
}).then(res => {
this.doorRecycleOrders = res.data.doorRecycleOrders;
this.doorRecyclePrice = res.data.doorRecyclePrice;
this.regularRecycleOrders = res.data.regularRecycleOrders;
this.regularRecyclePrice = res.data.regularRecyclePrice;
this.inboundRecycleOrders = res.data.inboundRecycleOrders;
this.inboundRecyclePrice = res.data.inboundRecyclePrice;
})
},
changeDataFormData(type, data, model, index, defaultValue) {
if (type == 2) {
for (let i = 0; i < this.dataForm[data].length; i++) {
if (index == -1) {
this.dataForm[data][i][model] = defaultValue;
} else if (index == i) {
this.dataForm[data][i][model] = defaultValue;
}
}
} else {
this.dataForm[data] = defaultValue;
}
},
getbeLongCompanyIdOptions() {
// const index = this.childIndex;
// let templateJsonList = JSON.parse(
// JSON.stringify(this.dataForm.beLongCompanyId)
// );
// for (let i = 0; i < templateJsonList.length; i++) {
// let json = templateJsonList[i];
// if (json.relationField) {
// let relationFieldAll = json.relationField.split("-");
// let val = json.defaultValue;
// if (relationFieldAll.length > 1 && index > -1) {
// val =
// this.dataForm[relationFieldAll[0] + "List"] &&
// this.dataForm[relationFieldAll[0] + "List"].length
// ? this.dataForm[relationFieldAll[0] + "List"][index][
// relationFieldAll[1]
// ]
// : "";
// } else {
// val = this.dataForm[relationFieldAll];
// }
// json.defaultValue = val;
// }
// }
// let template = {
// paramList: templateJsonList
// };
getCompanyList().then(res => {
let data = res.data;
this.beLongCompanyIdOptions = data;
this.changeDataFormData(
1,
"beLongCompanyId",
"beLongCompanyId",
index,
""
);
});
},
search() {
this.initDeviceData();
this.initDeliveryOrderData();
this.initCleanOrderData();
this.orderData();
},
reset() {
this.query = JSON.parse(JSON.stringify(this.queryData));
this.search();
},
startNumberAnimation() {
this.intervalId = setInterval(() => {
const step = (this.doorRecyclePrice - this.animatedNumber) / 100;
this.animatedNumber += step;
if (Math.abs(this.doorRecyclePrice - this.animatedNumber) < 0.01) {
this.animatedNumber = this.doorRecyclePrice;
clearInterval(this.intervalId);
this.intervalId = null;
}
}, 10);
},
},
}
</script>
<style lang="scss" scoped>
.sale {
.box-card {
width: 300px;
margin: 20px;
}
.nums {
font-size: 26px;
color: #1890ff;
font-weight: 600;
}
.card-items {
display: flex;
justify-content: space-between;
align-items: center;
}
.card-item {
margin-right: 10px;
}
.card-item:last-child {
margin-right: 0;
}
background: #fff;
margin-bottom: 10px;
border-radius: 4px;
.sale_title {
padding-top: 16px;
padding-left: 22px;
span {
&:first-child {
font-size: 16px;
font-weight: bold;
color: #333333;
margin-right: 10px;
}
&:nth-child(2) {
color: #999;
font-size: 12px;
}
}
}
.sale_items {
display: flex;
justify-content: space-around;
padding: 34px 0;
li {
display: flex;
flex-direction: column;
text-align: center;
.nums {
font-size: 26px !important;
padding-top: 13px;
padding-bottom: 9px;
color: #1890ff;
font-weight: 600;
span {
font-size: 26px !important;
padding-top: 13px;
padding-bottom: 9px;
color: #1890ff !important;
font-weight: 600;
}
}
.lastnums {
font-size: 26px !important;
padding-top: 13px;
padding-bottom: 9px;
font-weight: 600;
color: #333;
}
&:first-child {
span:last-child {
color: #08b41f;
}
}
&:nth-child(4) {
span {
&:last-child {
color: #08b41f;
}
}
}
&:nth-child(2) {
span {
&:last-child {
color: #b40808;
}
}
}
&:nth-child(3) {
span {
&:last-child {
color: #999;
}
}
}
&:last-child {
span {
&:last-child {
color: #000;
}
}
}
span {
&:nth-child(2) {
font-size: 26px !important;
padding-top: 13px;
padding-bottom: 9px;
color: #1890ff;
font-weight: 600;
}
&:nth-child(3) {
font-size: 12px;
}
}
}
}
}
.notice {
padding-bottom: 20px;
.notice_title {
display: flex;
justify-content: space-between;
align-items: center;
height: 60px;
padding: 0 25px;
.title_left {
display: flex;
align-items: center;
span {
font-size: 16px;
font-weight: bold;
color: #333;
}
}
.title_right {
font-size: 12px;
color: #999;
line-height: 30px;
}
}
.notice_right {
background: #fff;
height: 400px;
border-radius: 4px;
overflow: hidden;
.no_right_massage {
li {
display: flex;
background: #fff;
border: 1;
height: 170px;
border-top: 1px solid #f2f2f5;
.right_item {
width: 50%;
padding: 16px 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
.right-top {
font-size: 14px;
display: flex;
align-items: center;
img {
margin-right: 10px;
}
}
p {
font-size: 14px;
line-height: 22px;
padding: 20px 0;
color: #999;
display: -webkit-box;
line-clamp: 3;
-webkit-line-clamp: 3;
overflow: hidden;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
/* autoprefixer: on */
}
.bt {
display: flex;
justify-content: space-between;
font-size: 12px;
color: #999;
}
}
.linet {
border-left: 1px solid #f2f2f5;
}
}
}
}
.notice_left {
background: #fff;
height: 400px;
border-radius: 4px;
overflow: hidden;
.no_left_massage {
height: 340px;
padding: 10px 20px;
border-top: 1px solid #f2f2f5;
ul {
li {
display: flex;
justify-content: space-between;
font-size: 14px;
color: #303133;
padding: 10px 0;
cursor: pointer;
p {
width: calc(100% - 80px);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.time {
width: 80px;
display: inline-block;
text-align: right;
color: #999999;
}
}
}
}
}
}
.componey {
font-size: 14px;
text-align: center;
color: #999;
padding-bottom: 10px;
}
.dashboard-editor-container {
background-color: #ebeef5;
position: relative;
width: 100%;
overflow: hidden;
.github-corner {
position: absolute;
top: 0px;
border: 0;
right: 0;
}
.chart-wrapper {
background: #fff;
padding: 16px 16px 0;
margin-bottom: 20px;
}
}
.dateSelect {
position: absolute;
right: 67px;
top: 38px;
z-index: 100;
.el-date-editor {
width: 160px;
}
}
@media (max-width: 1024px) {
.chart-wrapper {
padding: 8px;
}
}
</style>
Loading…
Cancel
Save