Browse Source

feat(all): 报表模块

1 增加配送质量报表
fix-sign
zhaoqiaobo 5 months ago
parent
commit
ae41caa394
  1. 4
      blade-service/logpm-report/src/main/java/com/logpm/report/mapper/QualityDispatchNumberMapper.java
  2. 88
      blade-service/logpm-report/src/main/java/com/logpm/report/mapper/QualityDispatchNumberMapper.xml
  3. 79
      blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/QualityDispatchNumberServiceImpl.java

4
blade-service/logpm-report/src/main/java/com/logpm/report/mapper/QualityDispatchNumberMapper.java

@ -18,4 +18,8 @@ public interface QualityDispatchNumberMapper {
List<QualityDispatchNumberVO> number(@Param("page") IPage<QualityDispatchNumberVO> page, @Param("query") QualityDispatchNumberQuery query);
List<QualityDispatchTaskVO> task(@Param("page") IPage<QualityDispatchTaskVO> page, @Param("query") QualityDispatchTaskQuery query);
List<QualityDispatchNumberVO> exceptionNumber(@Param("query") QualityDispatchNumberQuery query);
List<QualityDispatchTaskVO> exceptionTask(QualityDispatchTaskQuery query);
}

88
blade-service/logpm-report/src/main/java/com/logpm/report/mapper/QualityDispatchNumberMapper.xml

@ -191,4 +191,92 @@
</where>
group by t.plan_reservation_code
</select>
<select id="exceptionNumber" resultType="com.logpm.report.vo.qulity.dispatch.QualityDispatchNumberVO">
select t.warehouse_name
<if test="query.deliveryType != null and query.deliveryType != ''">
,t.type
</if>
,sum(t.num)
from (select dl.warehouse_name,
<if test="query.deliveryType != null and query.deliveryType != ''">
case when dl.type = 1 then '商配' else '市配' end type,
</if>
count(*) num
from logpm_distribution_loadscan_abnormal t
left join logpm_distribution_delivery_list dl on dl.id = t.delivery_list_id
where t.abnormal_type in (2, 3) and t.auditing_status = 2
<if test="query.startTaskTime != null and query.startTaskTime != ''">
and dl.task_time >= #{query.startTaskTime}
</if>
<if test="query.endTaskTime != null and query.endTaskTime != ''">
and dl.task_time &lt;= #{query.endTaskTime}
</if>
<if test="query.warehouseName != null and query.warehouseName != ''">
and t.warehouse_name in
<foreach collection="query.warehouseName.split(',')" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="query.deliveryType != null and query.deliveryType != ''">
and t.delivery_type in
<foreach collection="query.deliveryType.split(',')" item="item" separator="," open="(" close=")">
<if test="item == '商配'">
1
</if>
<if test="item == '市配'">
2
</if>
</foreach>
</if>
group by dl.warehouse_name
<if test="query.deliveryType != null and query.deliveryType != ''">
, dl.type
</if>
) t
group by t.warehouse_name
<if test="query.deliveryType != null and query.deliveryType != ''">
, t.type
</if>
</select>
<select id="exceptionTask" resultType="com.logpm.report.vo.qulity.dispatch.QualityDispatchTaskVO">
select t.reservation_code planReservationCode,
ifnull(sum(case when t.abnormal_type = 2 then t.num end),0) exceptionLoadNum,
ifnull(sum(case when t.abnormal_type = 3 then t.num end),0) exceptionSignNum
from (select
dr.reservation_code,
t.abnormal_type,
count(*) num
from logpm_distribution_loadscan_abnormal t
left join logpm_distribution_delivery_list dl on dl.id = t.delivery_list_id
left join logpm_distribution_reservation dr on dr.id = t.reservation_id
where t.abnormal_type in (2, 3) and t.auditing_status = 2
<if test="query.startTaskTime != null and query.startTaskTime != ''">
and dl.task_time >= #{query.startTaskTime}
</if>
<if test="query.endTaskTime != null and query.endTaskTime != ''">
and dl.task_time &lt;= #{query.endTaskTime}
</if>
<if test="query.warehouseName != null and query.warehouseName != ''">
and t.warehouse_name in
<foreach collection="query.warehouseName.split(',')" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="query.deliveryType != null and query.deliveryType != ''">
and t.delivery_type in
<foreach collection="query.deliveryType.split(',')" item="item" separator="," open="(" close=")">
<if test="item == '商配'">
1
</if>
<if test="item == '市配'">
2
</if>
</foreach>
</if>
group by t.abnormal_type, dr.reservation_code) t
group by t.reservation_code
</select>
</mapper>

79
blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/QualityDispatchNumberServiceImpl.java

@ -1,8 +1,10 @@
package com.logpm.report.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -17,6 +19,7 @@ import com.logpm.report.vo.qulity.dispatch.QualityDispatchNumberVO;
import com.logpm.report.vo.qulity.dispatch.QualityDispatchTaskVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
@ -24,8 +27,11 @@ import org.springblade.core.tool.utils.BeanUtil;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -64,6 +70,40 @@ public class QualityDispatchNumberServiceImpl implements QualityDispatchNumberSe
}
List<QualityDispatchNumberVO> list = numberMapper.number(page, query);
// 查询异常数
List<QualityDispatchNumberVO> exceptionList = numberMapper.exceptionNumber(query);
Map<String, Integer> exceptionMap = new HashMap<>();
if (CollUtil.isNotEmpty(exceptionList)) {
if (StrUtil.isEmpty(query.getDeliveryType())) {
exceptionMap = exceptionList.stream().collect(Collectors.toMap(t -> t.getWarehouseName(), t -> Convert.toInt(t.getExceptionNum())));
} else {
exceptionMap = exceptionList.stream().collect(Collectors.toMap(t -> t.getWarehouseName() + t.getDeliveryType(), t -> Convert.toInt(t.getExceptionNum())));
}
}
for (QualityDispatchNumberVO qualityDispatchTaskVO : list) {
String planNum = qualityDispatchTaskVO.getPlanNum();
qualityDispatchTaskVO.setPlanAccuracy("0%");
String key = qualityDispatchTaskVO.getWarehouseName();
if (StrUtil.isNotEmpty(query.getDeliveryType())) {
key = key + qualityDispatchTaskVO.getDeliveryType();
}
if (exceptionMap.containsKey(key)) {
qualityDispatchTaskVO.setExceptionNum(Convert.toStr(exceptionMap.get(key)));
} else {
qualityDispatchTaskVO.setExceptionNum("0");
}
String exceptionNum = qualityDispatchTaskVO.getExceptionNum();
if(StrUtil.isNotEmpty(planNum)){
// 计算 ((planNum-exceptionNum)/planNum)*100 保留两位小数
int planNumInt = Convert.toInt(planNum);
if (planNumInt > 0) {
BigDecimal div = NumberUtil.div(NumberUtil.sub(planNum, exceptionNum), new BigDecimal(planNum), 2);
String replace = Convert.toStr(div).replace(".00", "");
qualityDispatchTaskVO.setPlanAccuracy(replace +"%");
} else {
qualityDispatchTaskVO.setPlanAccuracy("0%");
}
}
}
return page.setRecords(list);
}
@ -90,6 +130,8 @@ public class QualityDispatchNumberServiceImpl implements QualityDispatchNumberSe
}
}
List<QualityDispatchNumberVO> list = numberMapper.number(page, query);
//
if (StrUtil.isEmpty(query.getDeliveryType())) {
List<QualityDispatchNumberExcelVO> excelVOS = new ArrayList<>();
if (CollUtil.isNotEmpty(list)) {
@ -108,6 +150,11 @@ public class QualityDispatchNumberServiceImpl implements QualityDispatchNumberSe
@Override
public IPage<QualityDispatchTaskVO> task(QualityDispatchTaskQuery query) {
IPage<QualityDispatchTaskVO> page = Condition.getPage(query);
List<QualityDispatchTaskVO> list = getQualityDispatchTaskVOS(query, page);
return page.setRecords(list);
}
private @NotNull List<QualityDispatchTaskVO> getQualityDispatchTaskVOS(QualityDispatchTaskQuery query, IPage<QualityDispatchTaskVO> page) {
if (StrUtil.isEmpty(query.getWarehouseName())) {
BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse();
if (ObjectUtil.isNotEmpty(myCurrentWarehouse)) {
@ -119,7 +166,26 @@ public class QualityDispatchNumberServiceImpl implements QualityDispatchNumberSe
}
List<QualityDispatchTaskVO> list = numberMapper.task(page, query);
// 查询异常数
return page.setRecords(list);
List<QualityDispatchTaskVO> exceptionList = numberMapper.exceptionTask(query);
Map<String, Integer> exceptionMap = new HashMap<>();
Map<String, Integer> exceptionMap1 = new HashMap<>();
if (CollUtil.isNotEmpty(exceptionList)) {
exceptionMap = exceptionList.stream().collect(Collectors.toMap(QualityDispatchTaskVO::getPlanReservationCode, t -> Convert.toInt(t.getExceptionLoadNum())));
exceptionMap1 = exceptionList.stream().collect(Collectors.toMap(QualityDispatchTaskVO::getPlanReservationCode, t -> Convert.toInt(t.getExceptionSignNum())));
}
for (QualityDispatchTaskVO qualityDispatchTaskVO : list) {
if (exceptionMap.containsKey(qualityDispatchTaskVO.getPlanReservationCode())) {
qualityDispatchTaskVO.setExceptionLoadNum(Convert.toStr(exceptionMap.get(qualityDispatchTaskVO.getPlanReservationCode())));
} else {
qualityDispatchTaskVO.setExceptionLoadNum("0");
}
if (exceptionMap1.containsKey(qualityDispatchTaskVO.getPlanReservationCode())) {
qualityDispatchTaskVO.setExceptionSignNum(Convert.toStr(exceptionMap1.get(qualityDispatchTaskVO.getPlanReservationCode())));
} else {
qualityDispatchTaskVO.setExceptionSignNum("0");
}
}
return list;
}
@Override
@ -127,16 +193,7 @@ public class QualityDispatchNumberServiceImpl implements QualityDispatchNumberSe
IPage<QualityDispatchTaskVO> page = Condition.getPage(query);
page.setPages(1);
page.setSize(-1);
if (StrUtil.isEmpty(query.getWarehouseName())) {
BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse();
if (ObjectUtil.isNotEmpty(myCurrentWarehouse)) {
query.setWarehouseName(myCurrentWarehouse.getName());
} else {
List<BasicdataWarehouseEntity> warehouseEntities = warehouseClient.getMyWarehouseList();
query.setWarehouseName(warehouseEntities.stream().map(BasicdataWarehouseEntity::getName).collect(Collectors.joining(",")));
}
}
List<QualityDispatchTaskVO> list = numberMapper.task(page, query);
List<QualityDispatchTaskVO> list = getQualityDispatchTaskVOS(query, page);
ExcelUtil.export(response, list, QualityDispatchTaskVO.class);
}

Loading…
Cancel
Save