diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.java index bb8e90d..519c09a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.java @@ -7,6 +7,9 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.nl.wms.basedata_manage.service.dao.BsrealStorattr; import org.nl.wms.basedata_manage.service.dao.BsrealStorattrDto; +import org.nl.wms.bigscreen_manage.service.dto.IvtAnalyse; + +import java.util.List; /** * @author dsh @@ -16,4 +19,6 @@ import org.nl.wms.basedata_manage.service.dao.BsrealStorattrDto; public interface BsrealStorattrMapper extends BaseMapper { IPage queryAllByPage(Page page, @Param("search") String search); + + List sumMaterQty(String storCode); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.xml index e7e5217..9d312b9 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.xml +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/BsrealStorattrMapper.xml @@ -14,4 +14,23 @@ ORDER BY stor.update_time Desc + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/controller/BigScreenController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/controller/BigScreenController.java index 536ee2e..922f436 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/controller/BigScreenController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/controller/BigScreenController.java @@ -2,10 +2,13 @@ package org.nl.wms.bigscreen_manage.controller; import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; import org.nl.common.logging.annotation.Log; import org.nl.wms.bigscreen_manage.service.BigScreenService; +import org.nl.wms.pda_manage.util.PdaResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -14,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.List; /** @@ -30,14 +34,17 @@ import java.util.List; @Slf4j public class BigScreenController { -// @Autowired + @Autowired private BigScreenService bigScreenService; @PostMapping("/getData") @Log("大屏数据") @SaIgnore - public ResponseEntity getData(@RequestBody List stors) { - return new ResponseEntity<>(bigScreenService.getData(stors), HttpStatus.OK); + public ResponseEntity getData(@RequestBody JSONObject stors) { + List list = new ArrayList<>(); + list.add("GW"); + List data = bigScreenService.getData(list); + return new ResponseEntity<>(PdaResponse.requestParamOk(data.get(0)), HttpStatus.OK); } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/dto/IvtAnalyse.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/dto/IvtAnalyse.java new file mode 100644 index 0000000..737f752 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/dto/IvtAnalyse.java @@ -0,0 +1,11 @@ +package org.nl.wms.bigscreen_manage.service.dto; + +import lombok.Data; + +@Data +public class IvtAnalyse { + private String stor_code; + private String material_id; + private String material_name; + private Integer sum_qty; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java index cd45595..e2be301 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java @@ -1,383 +1,365 @@ -//package org.nl.wms.bigscreen_manage.service.impl; +package org.nl.wms.bigscreen_manage.service.impl; + +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import org.nl.wms.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.basedata_manage.service.dao.mapper.BsrealStorattrMapper; +import org.nl.wms.bigscreen_manage.service.BigScreenService; +import org.nl.wms.bigscreen_manage.service.dto.IvtAnalyse; +import org.nl.wms.sch_manage.enums.TaskStatus; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; +import org.nl.wms.warehouse_manage.enums.IOSConstant; +import org.nl.wms.warehouse_manage.enums.IOSEnum; +import org.nl.wms.warehouse_manage.service.IOutBillService; +import org.nl.wms.warehouse_manage.service.dao.IOStorInv; +import org.nl.wms.warehouse_manage.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_manage.service.dao.mapper.IOStorInvDisMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 大屏显示 实现类 + *

+ * + * @author Liuxy + * @since 2025-06-24 + */ +@Service +public class BigScreenServiceImpl implements BigScreenService { + + @Autowired + private IStructattrService iStructattrService; + + @Resource + private IOutBillService iOutBillService; + + @Resource + private BsrealStorattrMapper screenMapper; + + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + + @Autowired + private ISchBaseTaskService iSchBaseTaskService; + + @Override + public List getData(List stors) { +// String storCode = "GW"; + List result = new ArrayList<>(); + if (CollectionUtils.isEmpty(stors)){ + return result; + } + for (String storCode : stors) { + JSONObject item = new JSONObject(); + //1.【货位使用】数据 + item.put("pointUse", pointUse(storCode)); +// //2.【实时库存分析】数据 + item.put("ivtAnalyse", ivtAnalyse(storCode)); + //3.【出入库趋势】数据 + item.put("inAndOutTrend", inAndOutTrend(storCode)); +// //4.【今日出入库】数据 + item.put("toDayInAndOut", toDayInAndOut(storCode)); +// //5.【今日出入库】数据 + item.put("realTask", realTask(storCode)); + //6.【未完成单据】数据 + item.put("unIos", unIos(storCode)); + result.add(item); + } + return result; + } + /** // -//import cn.hutool.core.date.DateField; -//import cn.hutool.core.date.DateTime; -//import cn.hutool.core.date.DateUtil; -//import cn.hutool.core.util.NumberUtil; -//import cn.hutool.core.util.ObjectUtil; -//import com.alibaba.fastjson.JSONObject; -//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -//import org.nl.common.utils.MapOf; -//import org.nl.wms.basedata_manage.service.IStructattrService; -//import org.nl.wms.basedata_manage.service.dao.Structattr; -//import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto; -//import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; -//import org.nl.wms.bigscreen_manage.service.BigScreenService; -//import org.nl.wms.pda_manage.util.PdaResponse; -//import org.nl.wms.sch_manage.enums.TaskStatus; -//import org.nl.wms.sch_manage.service.ISchBaseTaskService; -//import org.nl.wms.sch_manage.service.dao.SchBaseTask; -//import org.nl.wms.system_manage.service.dict.dao.mapper.SysDictMapper; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Service; -//import org.springframework.util.CollectionUtils; -// -//import java.util.ArrayList; -//import java.util.List; -//import java.util.stream.Collectors; -// -///** -// *

-// * 大屏显示 实现类 -// *

-// * -// * @author Liuxy -// * @since 2025-06-24 -// */ -//@Service -//public class BigScreenServiceImpl implements BigScreenService { -// -// /** -// * 仓位服务 -// */ -// @Autowired -// private IStructattrService iStructattrService; -// -// /** -// * 载具扩展属性mapper服务 -// */ -// @Autowired -// private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper; -// -// /** -// * 任务服务 -// */ -// @Autowired -// private ISchBaseTaskService iSchBaseTaskService; -// -// @Override -// public List getData(List stors) { -//// String storCode = "GW"; -// List result = new ArrayList<>(); -// if (CollectionUtils.isEmpty(stors)){ -// return result; -// } -// for (String storCode : stors) { -// JSONObject item = new JSONObject(); -// //1.【货位使用】数据 -// item.put("pointUse", pointUse(storCode)); -//// //2.【实时库存分析】数据 -// item.put("ivtAnalyse", ivtAnalyse(storCode)); -// //3.【出入库趋势】数据 -// item.put("inAndOutTrend", inAndOutTrend(storCode)); -//// //4.【今日出入库】数据 -// item.put("toDayInAndOut", toDayInAndOut(storCode)); -//// //5.【今日出入库】数据 -// item.put("realTask", realTask(storCode)); -// //6.【未完成单据】数据 -// item.put("unIos", unIos(storCode)); -// } -// return result; -// } -// /** -//// -//// * 货位使用 -//// * -//// * @return JSONObject { -//// * total_qty: 总货位数 -//// * use_qty: 已用货位 -//// * emp_qty: 空余货位 -//// * use_percentage: 百分比(使用货位百分比) -//// * } -//// */ -// private JSONObject pointUse(String storCode) { -// // 返回数据 -// JSONObject result = new JSONObject(); -// // 查询所有未删除且启用仓位 -// int emp_qty = iStructattrService.count( -// new QueryWrapper().lambda() -// .eq(Structattr::getIs_used, Boolean.TRUE) -// .eq(Structattr::getStor_code, storCode) -// .isNull(Structattr::getStoragevehicle_code)); -// int use_qty = iStructattrService.count( -// new QueryWrapper().lambda() -// .eq(Structattr::getIs_used, Boolean.TRUE) -// .eq(Structattr::getStor_code, storCode) -// .isNotNull(Structattr::getStoragevehicle_code)); -// int total_qty = iStructattrService.count( -// new QueryWrapper().lambda() -// .eq(Structattr::getIs_used, Boolean.TRUE) -// .eq(Structattr::getStor_code, storCode)); -// // 总货位数 -// result.put("total_qty", total_qty); -// // 已用货位数 -// result.put("use_qty", use_qty); -// // 空余货位 -// result.put("emp_qty", emp_qty); -// // 使用货位百分比 -// double use_percentage = NumberUtil.mul(NumberUtil.div(use_qty, total_qty), 100); -// result.put("use_percentage", NumberUtil.round(use_percentage, 2)); -// return result; -// } -// -// /** -// * 实时库存分析 -// * -// * @return JSONObject { -// * total_qty: 总数 -// * data: [ -// * material_name: 物料名称 -// * ivt_qty: 库存数量 -// * percentage: 百分比 -// * ] -// * } -// */ -// private JSONObject ivtAnalyse(String storCode) { -// // 返回数据 -// JSONObject result = new JSONObject(); -// // 查询所有库存 -// List vechielDtos = iStructattrService.collectVechicle(MapOf.of("stor_code", storCode)); -// // 总数 -// double total_qty = ivtList.stream() -// .map(row -> row.getDoubleValue("canuse_qty")) -// .reduce(Double::sum).orElse(0.0); -// result.put("total_qty", NumberUtil.round(total_qty, 2)); -// -// // 查询排名前五的物料库存 -// List topFiveList; -// List otherList = null; -// if (ivtList.size() < 5) { -// topFiveList = ivtList; -// } else { -// topFiveList = ivtList.subList(0, 5); -// otherList = ivtList.subList(5, ivtList.size()); -// } -// // 组织数据(物料前五) -// for (JSONObject json : topFiveList) { -// // 库存数量 -// json.put("ivt_qty", NumberUtil.round(json.getDoubleValue("canuse_qty"), 2)); -// // 百分比 -// double percentage = NumberUtil.mul(NumberUtil.div(json.getDoubleValue("canuse_qty"), total_qty), 100); -// json.put("percentage", NumberUtil.round(percentage, 2)); -// } -// -// // 计算其他物料 -// if (ObjectUtil.isNotEmpty(otherList)) { -// JSONObject jsonOther = new JSONObject(); -// jsonOther.put("material_name", "其他"); -// double ivt_qty = otherList.stream() -// .map(row -> row.getDoubleValue("canuse_qty")) -// .reduce(Double::sum).orElse(0.0); -// jsonOther.put("ivt_qty", NumberUtil.round(ivt_qty, 2)); -// // 百分比 -// double percentage = NumberUtil.mul(NumberUtil.div(ivt_qty, total_qty), 100); -// jsonOther.put("percentage", NumberUtil.round(percentage, 2)); -// topFiveList.add(jsonOther); -// } -// -// result.put("data", topFiveList); -// return result; -// } -// -// /** -// * 出入库趋势 -// * -// * @return JSONObject { -// * in: [{date:日期,qty:数量}] -// * out: [{date:日期,qty:数量}] -// * } -// */ -// private JSONObject inAndOutTrend() { -// // 获取七天天数集合 -// DateTime dateTime = DateUtil.offsetDay(DateUtil.parseDate(DateUtil.today()), -6); -// List dateList = DateUtil.rangeToList(dateTime, DateUtil.parse(DateUtil.today()), DateField.DAY_OF_YEAR).stream() -// .map(DateTime::toString) -// .map(row -> row.substring(0, 10)) -// .collect(Collectors.toList()); -// // 查询七天内的出入库数据 -// List allIosList = iOutBillService.list( -// new QueryWrapper().lambda() -// .in(IOStorInv::getBiz_date, dateList) -// .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) -// .eq(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) -// ); -// -// // 查询入库单据 -// List inIosList = allIosList.stream() -// .filter(row -> row.getIo_type().equals(IOSEnum.IO_TYPE.code("入库"))) -// .collect(Collectors.toList()); -// // 查询出库单据 -// List outIosList = allIosList.stream() -// .filter(row -> row.getIo_type().equals(IOSEnum.IO_TYPE.code("出库"))) -// .collect(Collectors.toList()); -// // 组织数据 -// List inList = new ArrayList<>(); -// List outList = new ArrayList<>(); -// for (String date : dateList) { -// // 处理入库数量 -// JSONObject jsonIn = new JSONObject(); -// jsonIn.put("date", date); -// double in_qty = inIosList.stream() -// .filter(row -> row.getBiz_date().equals(date)) -// .map(row -> row.getTotal_qty().doubleValue()) -// .reduce(Double::sum).orElse(0.00); -// jsonIn.put("qty", NumberUtil.round(in_qty, 2)); -// inList.add(jsonIn); -// -// // 处理出库数据 -// JSONObject jsonOut = new JSONObject(); -// jsonOut.put("date", date); -// double out_qty = outIosList.stream() -// .filter(row -> row.getBiz_date().equals(date)) -// .map(row -> row.getTotal_qty().doubleValue()) -// .reduce(Double::sum).orElse(0.00); -// jsonOut.put("qty", NumberUtil.round(out_qty, 2)); -// outList.add(jsonOut); -// } -// -// JSONObject result = new JSONObject(); -// result.put("in", inList); -// result.put("out", outList); -// return result; -// } -// -// /** -// * 今日出入库 +// * 货位使用 // * // * @return JSONObject { -// * in: {total_qty:总数量,vehicle_qty:托盘数量} -// * out: {total_qty:总数量,vehicle_qty:托盘数量} -// * } -// */ -// private JSONObject toDayInAndOut() { -// // 查询今天出入库单据 -// List inList = iOutBillService.list( -// new QueryWrapper().lambda() -// .eq(IOStorInv::getBiz_date, DateUtil.today()) -// .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) -// .eq(IOStorInv::getIo_type, IOSEnum.IO_TYPE.code("入库")) -// .eq(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) -// ); -// // 查询今天出库单据 -// List outList = iOutBillService.list( -// new QueryWrapper().lambda() -// .eq(IOStorInv::getBiz_date, DateUtil.today()) -// .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) -// .eq(IOStorInv::getIo_type, IOSEnum.IO_TYPE.code("出库")) -// .eq(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) -// ); -// -// // 入库 -// JSONObject jsonIn = new JSONObject(); -// // 总数量 -// double total_qty_in = inList.stream() -// .map(row -> row.getTotal_qty().doubleValue()) -// .reduce(Double::sum).orElse(0.0); -// jsonIn.put("total_qty", NumberUtil.round(total_qty_in, 2)); -// -// // 托盘数 -// List inDisList = new ArrayList<>(); -// if (ObjectUtil.isNotEmpty(inList)) { -// inDisList = ioStorInvDisMapper.selectList( -// new QueryWrapper().lambda() -// .in(IOStorInvDis::getIostorinv_id, inList.stream() -// .map(IOStorInv::getIostorinv_id) -// .collect(Collectors.toList()) -// ) -// ); -// } -// jsonIn.put("vehicle_qty", inDisList.size()); -// -// // 出库 -// JSONObject jsonOut = new JSONObject(); -// // 总数量 -// double total_qty_out = outList.stream() -// .map(row -> row.getTotal_qty().doubleValue()) -// .reduce(Double::sum).orElse(0.0); -// jsonOut.put("total_qty", NumberUtil.round(total_qty_out, 2)); -// // 托盘数 -// List outDisList = new ArrayList<>(); -// if (ObjectUtil.isNotEmpty(outList)) { -// outDisList = ioStorInvDisMapper.selectList( -// new QueryWrapper().lambda() -// .in(IOStorInvDis::getIostorinv_id, outList.stream() -// .map(IOStorInv::getIostorinv_id) -// .collect(Collectors.toList()) -// ) -// ); -// } -// jsonOut.put("vehicle_qty", outDisList.size()); -// -// JSONObject result = new JSONObject(); -// result.put("in", jsonIn); -// result.put("out", jsonOut); -// return result; -// } -// -// /** -// * 实时任务 -// * -// * @return List { -// * 任务实体列 -// * } -// */ -// private List realTask() { -// List list = iSchBaseTaskService.list( -// new QueryWrapper().lambda() -// .in(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode() -// , TaskStatus.ISSUED.getCode(), TaskStatus.EXECUTING.getCode() -// ) -// .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) -// ); -// list.stream().forEach(item -> { -// if (item.getTask_status().equals(TaskStatus.CREATE.getCode())) { -// item.setTask_status(TaskStatus.CREATE.getName()); -// } -// if (item.getTask_status().equals(TaskStatus.ISSUED.getCode())) { -// item.setTask_status(TaskStatus.ISSUED.getName()); -// } -// if (item.getTask_status().equals(TaskStatus.EXECUTING.getCode())) { -// item.setTask_status(TaskStatus.EXECUTING.getName()); -// } -// }); -// -// return list; -// } -// -// /** -// * 未完成单据 -// * -// * @return List{ -// * 出入库实体类 +// * total_qty: 总货位数 +// * use_qty: 已用货位 +// * emp_qty: 空余货位 +// * use_percentage: 百分比(使用货位百分比) // * } // */ -// private List unIos() { -// List dicts = sysDictMapper.selectList( -// new QueryWrapper().lambda() -// .in(Dict::getCode, "ST_INV_IN_TYPE", "ST_INV_OUT_TYPE") -// ); -// -// List list = iOutBillService.list( -// new QueryWrapper().lambda() -// .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) -// .ne(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) -// ); -// list.stream().forEach(item -> { -// item.setIo_type(item.getIo_type().equals(IOSEnum.IO_TYPE.code("入库")) ? IOSConstant.IOS_IO_TYPE_IN : IOSConstant.IOS_IO_TYPE_OUT); -// if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成"))) { -// item.setBill_status("生成"); -// } -// if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配中"))) { -// item.setBill_status("分配中"); -// } -// if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完"))) { -// item.setBill_status("分配完"); -// } -// Dict dict = dicts.stream() -// .filter(row -> row.getValue().equals(item.getBill_type())) -// .findFirst().orElse(null); -// item.setBill_type(dict.getLabel()); -// }); -// return list; -// } -//} + private JSONObject pointUse(String storCode) { + // 返回数据 + JSONObject result = new JSONObject(); + // 查询所有未删除且启用仓位 + int emp_qty = iStructattrService.count( + new QueryWrapper().lambda() + .eq(Structattr::getIs_used, Boolean.TRUE) + .eq(Structattr::getStor_code, storCode) + .isNull(Structattr::getStoragevehicle_code)); + int use_qty = iStructattrService.count( + new QueryWrapper().lambda() + .eq(Structattr::getIs_used, Boolean.TRUE) + .eq(Structattr::getStor_code, storCode) + .isNotNull(Structattr::getStoragevehicle_code)); + int total_qty = iStructattrService.count( + new QueryWrapper().lambda() + .eq(Structattr::getIs_used, Boolean.TRUE) + .eq(Structattr::getStor_code, storCode)); + // 总货位数 + result.put("total_qty", total_qty); + // 已用货位数 + result.put("use_qty", use_qty); + // 空余货位 + result.put("emp_qty", emp_qty); + // 使用货位百分比 + double use_percentage = NumberUtil.mul(NumberUtil.div(use_qty, total_qty), 100); + result.put("use_percentage", NumberUtil.round(use_percentage, 2)); + return result; + } + + /** + * 实时库存分析 + * + * @return JSONObject { + * total_qty: 总数 + * data: [ + * material_name: 物料名称 + * ivt_qty: 库存数量 + * percentage: 百分比 + * ] + * } + */ + private JSONObject ivtAnalyse(String storCode) { + JSONObject result = new JSONObject(); + List list = screenMapper.sumMaterQty(storCode); + int sum = list.stream().mapToInt(IvtAnalyse::getSum_qty).sum(); + result.put("total_qty", sum); + List topFiveList = new ArrayList<>(); + int i = 0; + int top5 = 0; + for (IvtAnalyse json : list) { + if (i==5){break;} + JSONObject item = new JSONObject(); + item.put("ivt_qty", json.getSum_qty()); + item.put("material_name", json.getMaterial_name()); + double percentage = NumberUtil.mul(json.getSum_qty()/sum, 100); + item.put("percentage", NumberUtil.round(percentage, 2)); + topFiveList.add(item); + i++; + top5 = top5+json.getSum_qty(); + } + if (sum>top5){ + JSONObject other = new JSONObject(); + other.put("ivt_qty", sum-top5); + other.put("material_name", "其他物料"); + other.put("percentage", NumberUtil.round(1-top5/sum, 2)); + topFiveList.add(other); + } + result.put("data", topFiveList); + return result; + } + + /** + * 出入库趋势 + * + * @return JSONObject { + * in: [{date:日期,qty:数量}] + * out: [{date:日期,qty:数量}] + * } + */ + private JSONObject inAndOutTrend(String storCode) { + // 获取七天天数集合 + DateTime dateTime = DateUtil.offsetDay(DateUtil.parseDate(DateUtil.today()), -6); + List dateList = DateUtil.rangeToList(dateTime, DateUtil.parse(DateUtil.today()), DateField.DAY_OF_YEAR).stream() + .map(DateTime::toString) + .map(row -> row.substring(0, 10)) + .collect(Collectors.toList()); + // 查询七天内的出入库数据 + List allIosList = iOutBillService.list( + new QueryWrapper().lambda() + .in(IOStorInv::getBiz_date, dateList) + .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) + .eq(IOStorInv::getStor_code, storCode) + .eq(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) + ); + // 查询入库单据 + List inIosList = allIosList.stream() + .filter(row -> row.getIo_type().equals(IOSEnum.IO_TYPE.code("入库"))) + .collect(Collectors.toList()); + // 查询出库单据 + List outIosList = allIosList.stream() + .filter(row -> row.getIo_type().equals(IOSEnum.IO_TYPE.code("出库"))) + .collect(Collectors.toList()); + // 组织数据 + List inList = new ArrayList<>(); + List outList = new ArrayList<>(); + for (String date : dateList) { + // 处理入库数量 + JSONObject jsonIn = new JSONObject(); + jsonIn.put("date", date); + double in_qty = inIosList.stream() + .filter(row -> row.getBiz_date().equals(date)) + .map(row -> row.getTotal_qty().doubleValue()) + .reduce(Double::sum).orElse(0.00); + jsonIn.put("qty", NumberUtil.round(in_qty, 2)); + inList.add(jsonIn); + + // 处理出库数据 + JSONObject jsonOut = new JSONObject(); + jsonOut.put("date", date); + double out_qty = outIosList.stream() + .filter(row -> row.getBiz_date().equals(date)) + .map(row -> row.getTotal_qty().doubleValue()) + .reduce(Double::sum).orElse(0.00); + jsonOut.put("qty", NumberUtil.round(out_qty, 2)); + outList.add(jsonOut); + } + + JSONObject result = new JSONObject(); + result.put("in", inList); + result.put("out", outList); + return result; + } + + /** + * 今日出入库 + * + * @return JSONObject { + * in: {total_qty:总数量,vehicle_qty:托盘数量} + * out: {total_qty:总数量,vehicle_qty:托盘数量} + * } + */ + private JSONObject toDayInAndOut(String storCode) { + // 查询今天出入库单据 + List inList = iOutBillService.list( + new QueryWrapper().lambda() + .eq(IOStorInv::getBiz_date, DateUtil.today()) + .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) + .eq(IOStorInv::getStor_code, storCode) + .eq(IOStorInv::getIo_type, IOSEnum.IO_TYPE.code("入库")) + .eq(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) + ); + // 查询今天出库单据 + List outList = iOutBillService.list( + new QueryWrapper().lambda() + .eq(IOStorInv::getBiz_date, DateUtil.today()) + .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) + .eq(IOStorInv::getStor_code, storCode) + .eq(IOStorInv::getIo_type, IOSEnum.IO_TYPE.code("出库")) + .eq(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) + ); + + // 入库 + JSONObject jsonIn = new JSONObject(); + // 总数量 + double total_qty_in = inList.stream() + .map(row -> row.getTotal_qty().doubleValue()) + .reduce(Double::sum).orElse(0.0); + jsonIn.put("total_qty", NumberUtil.round(total_qty_in, 2)); + + // 托盘数 + List inDisList = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(inList)) { + inDisList = ioStorInvDisMapper.selectList( + new QueryWrapper().lambda() + .in(IOStorInvDis::getIostorinv_id, inList.stream() + .map(IOStorInv::getIostorinv_id) + .collect(Collectors.toList()) + ) + ); + } + jsonIn.put("vehicle_qty", inDisList.size()); + + // 出库 + JSONObject jsonOut = new JSONObject(); + // 总数量 + double total_qty_out = outList.stream() + .map(row -> row.getTotal_qty().doubleValue()) + .reduce(Double::sum).orElse(0.0); + jsonOut.put("total_qty", NumberUtil.round(total_qty_out, 2)); + // 托盘数 + List outDisList = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(outList)) { + outDisList = ioStorInvDisMapper.selectList( + new QueryWrapper().lambda() + .in(IOStorInvDis::getIostorinv_id, outList.stream() + .map(IOStorInv::getIostorinv_id) + .collect(Collectors.toList()) + ) + ); + } + jsonOut.put("vehicle_qty", outDisList.size()); + + JSONObject result = new JSONObject(); + result.put("in", jsonIn); + result.put("out", jsonOut); + return result; + } + + /** + * 实时任务 + * + * @return List { + * 任务实体列 + * } + */ + private List realTask(String storCode) { + List list = iSchBaseTaskService.list( + new QueryWrapper().lambda() + .in(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode() + , TaskStatus.ISSUED.getCode(), TaskStatus.EXECUTING.getCode() + ) + .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) + ); + list.stream().forEach(item -> { + if (item.getTask_status().equals(TaskStatus.CREATE.getCode())) { + item.setTask_status(TaskStatus.CREATE.getName()); + } + if (item.getTask_status().equals(TaskStatus.ISSUED.getCode())) { + item.setTask_status(TaskStatus.ISSUED.getName()); + } + if (item.getTask_status().equals(TaskStatus.EXECUTING.getCode())) { + item.setTask_status(TaskStatus.EXECUTING.getName()); + } + }); + + return list; + } + + /** + * 未完成单据 + * + * @return List{ + * 出入库实体类 + * } + */ + private List unIos(String storCode) { + + List list = iOutBillService.list( + new QueryWrapper().lambda() + .eq(IOStorInv::getIs_delete, IOSConstant.IS_DELETE_NO) + .eq(IOStorInv::getStor_code, storCode) + .ne(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成")) + ); + list.stream().forEach(item -> { + item.setIo_type(item.getIo_type().equals(IOSEnum.IO_TYPE.code("入库"))?"入库":"出库"); + if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成"))) { + item.setBill_status("生成"); + } + if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配中"))) { + item.setBill_status("分配中"); + } + if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完"))) { + item.setBill_status("分配完"); + } + item.setBill_type("dict.getLabel()"); + }); + return list; + } +} diff --git a/nladmin-ui/src/views/wms/basedata/storagevehicleinfo/index2.vue b/nladmin-ui/src/views/wms/basedata/storagevehicleinfo/index2.vue new file mode 100644 index 0000000..a42d80f --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/storagevehicleinfo/index2.vue @@ -0,0 +1,280 @@ + + + + +