diff --git a/ruoyi-admin/src/main/java/com/ruoyi/check/difference/controller/CheckDifferenceRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/check/difference/controller/CheckDifferenceRecordController.java index d4cc694..424bdb2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/check/difference/controller/CheckDifferenceRecordController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/check/difference/controller/CheckDifferenceRecordController.java @@ -193,7 +193,7 @@ public class CheckDifferenceRecordController extends BaseController { //查询是否存在空料箱库存数 BasStock queryStock = new BasStock(); queryStock.setTrayCode(record.getTrayCode()); - queryStock.setProductId("KTP000001"); + queryStock.setProductId("KTP0001"); List stocks = basStockService.selectBasStockList(queryStock); if (!stocks.isEmpty()){ basStockService.deleteBasStockByStockId(stocks.get(0).getStockId()); @@ -221,8 +221,8 @@ public class CheckDifferenceRecordController extends BaseController { BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(record.getWarehouseId()); if (stocks2.isEmpty() && ("1".equals(basWarehouse.getWarehouseType()) || "2".equals(basWarehouse.getWarehouseType()))) { BasStock basStock = stocks.get(0); - basStock.setProductId("KTP000001"); - basStock.setProductGuid("KTP000001"); + basStock.setProductId("KTP0001"); + basStock.setProductGuid("KTP0001"); basStock.setQuantity("1"); basStock.setStockStatus("1"); basStock.setOutQuantity("0"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/domain/MydoJob.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/domain/MydoJob.java index 6a0ca8c..c0f3870 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/domain/MydoJob.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/domain/MydoJob.java @@ -131,6 +131,26 @@ public class MydoJob extends BaseEntity private List inOutIds; + private String createLeftTime; + private String createRightTime; + + + public String getCreateLeftTime() { + return createLeftTime; + } + + public void setCreateLeftTime(String createLeftTime) { + this.createLeftTime = createLeftTime; + } + + public String getCreateRightTime() { + return createRightTime; + } + + public void setCreateRightTime(String createRightTime) { + this.createRightTime = createRightTime; + } + public List getInOutIds() { return inOutIds; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/kpi/controller/KpiController.java b/ruoyi-admin/src/main/java/com/ruoyi/kpi/controller/KpiController.java index 189e930..27c434e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/kpi/controller/KpiController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/kpi/controller/KpiController.java @@ -6,9 +6,11 @@ import com.ruoyi.kpi.service.KpiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * KPI 统计分析 - * + * * @author gw * @date 2025-05-21 */ @@ -20,7 +22,7 @@ public class KpiController extends BaseController { /** * 获取入库均匀分析数据 - * + * * @param warehouseId 仓库ID * @param yearMonth 年月,格式:yyyy-MM * @return 入库均匀分析数据 @@ -31,6 +33,19 @@ public class KpiController extends BaseController { return success(kpiService.getInAnalysis(warehouseId, yearMonth)); } + /** + * 按时间维度获取入库均匀分析数据 + * @param warehouseId + * @return + */ + @GetMapping("/inAnalysisByData") + public AjaxResult getInAnalysisByData(@RequestParam(required = false) String warehouseId, + @RequestParam String startTime, + @RequestParam String endTime, + @RequestParam String inOut) { + return kpiService.getInAnalysisByData(warehouseId, startTime,endTime,inOut); + } + /** * 获取出库均匀分析数据 * @@ -126,4 +141,4 @@ public class KpiController extends BaseController { return success(kpiService.getChartMag(warehouseId,theColumn,theFloor,thePlatoon)); } -} \ No newline at end of file +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/KpiService.java b/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/KpiService.java index 41444e6..74a2091 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/KpiService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/KpiService.java @@ -1,17 +1,20 @@ package com.ruoyi.kpi.service; +import com.ruoyi.common.core.domain.AjaxResult; + +import java.util.List; import java.util.Map; /** * KPI 统计分析服务 - * + * * @author gw * @date 2025-05-21 */ public interface KpiService { /** * 获取入库均匀分析数据 - * + * * @param warehouseId 仓库ID * @param yearMonth 年月,格式:yyyy-MM * @return 入库均匀分析数据,包含每个巷道的入库数量 @@ -22,7 +25,7 @@ public interface KpiService { /** * 获取巷道均匀分析数据 - * + * * @param warehouseId 仓库ID * @param startTime 开始时间,格式:yyyy-MM-dd HH:mm:ss * @param endTime 结束时间,格式:yyyy-MM-dd HH:mm:ss @@ -44,4 +47,5 @@ public interface KpiService { Map getChartMag(String warehouseId, String theColumn, String theFloor, String thePlatoon); -} \ No newline at end of file + AjaxResult getInAnalysisByData(String warehouseId, String startTime, String endTime,String inOut); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java index 9f6a4d7..047872e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/kpi/service/impl/KpiServiceImpl.java @@ -2,8 +2,14 @@ package com.ruoyi.kpi.service.impl; import java.util.*; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.ruoyi.bas.cargoSpace.domain.BasCargoSpace; import com.ruoyi.bas.cargoSpace.mapper.BasCargoSpaceMapper; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.job.mydojob.domain.MydoJob; import com.ruoyi.job.mydojobfinish.domain.MydoJobFinish; import com.ruoyi.job.mydojobfinish.mapper.MydoJobFinishMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -35,13 +41,13 @@ public class KpiServiceImpl implements KpiService @Override public Map getInAnalysis(String warehouseId, String yearMonth) { - MydoJobFinish mydoJobFinish = new MydoJobFinish(); + MydoJob mydoJob = new MydoJob(); - List list = mydoJobFinishMapper.selectMydoJobFinishList(mydoJobFinish); + List list = mydoJobFinishMapper.selectMydoJobFinishListByMydoJob(mydoJob); Map roadwayCount = new HashMap<>(); - for (MydoJobFinish job : list) { + for (MydoJob job : list) { // 检查入库作业标识是否小于10 if (job.getInOrOut() == null || Integer.parseInt(job.getInOrOut()) >= 20) { continue; @@ -281,12 +287,12 @@ public class KpiServiceImpl implements KpiService @Override public Map getRoadways(String warehouseId){ Map response = new HashMap<>(); - + // 查询指定仓库的巷道信息 BasCargoSpace queryParams = new BasCargoSpace(); queryParams.setWarehouseId(warehouseId); List list = basCargoSpaceMapper.selectBasCargoSpaceList(queryParams); - + // 使用Set去重并排序巷道ID Set roadwaySet = new TreeSet<>(); for (BasCargoSpace space : list) { @@ -294,7 +300,7 @@ public class KpiServiceImpl implements KpiService roadwaySet.add(space.getRoadwayId()); } } - + // 转换为前端下拉框所需的格式 List> roadways = new ArrayList<>(); for (String roadwayId : roadwaySet) { @@ -303,7 +309,7 @@ public class KpiServiceImpl implements KpiService roadway.put("label", "巷道" + roadwayId); roadways.add(roadway); } - + response.put("data", roadways); return response; } @@ -311,13 +317,13 @@ public class KpiServiceImpl implements KpiService @Override public Map getPlatoons(String warehouseId, String roadwayId){ Map response = new HashMap<>(); - + // 查询指定仓库和巷道的排号信息 BasCargoSpace queryParams = new BasCargoSpace(); queryParams.setWarehouseId(warehouseId); queryParams.setRoadwayId(roadwayId); List list = basCargoSpaceMapper.selectBasCargoSpaceList(queryParams); - + // 使用TreeSet去重并排序排号 Set platoonSet = new TreeSet<>(); for (BasCargoSpace space : list) { @@ -325,7 +331,7 @@ public class KpiServiceImpl implements KpiService platoonSet.add(space.getThePlatoon()); } } - + // 转换为前端下拉框所需的格式 List> platoons = new ArrayList<>(); for (Long platoon : platoonSet) { @@ -334,7 +340,7 @@ public class KpiServiceImpl implements KpiService platoonMap.put("label", platoon + "排"); platoons.add(platoonMap); } - + response.put("data", platoons); return response; } @@ -349,7 +355,7 @@ public class KpiServiceImpl implements KpiService queryParams.setThePlatoon(Long.parseLong(thePlatoon)); } List list = basCargoSpaceMapper.selectBasCargoSpaceList(queryParams); - + // 用于存储不同状态的货位坐标 String empty = ""; String full = ""; @@ -357,17 +363,17 @@ public class KpiServiceImpl implements KpiService String outAllot = ""; String inCheck = ""; String outCheck = ""; - + // 用于存储列和层的集合 Set columnSet = new TreeSet<>(); Set floorSet = new TreeSet<>(); - + // 处理每个货位的状态 for (BasCargoSpace space : list) { // 收集列和层信息 columnSet.add(space.getTheColumn()); floorSet.add(space.getTheFloor()); - + // 根据状态分类处理 if (space.getStatus() != null) { String coordinate = "[" + space.getTheColumn() + "," + space.getTheFloor() + "," + space.getStatus() + "],"; @@ -381,20 +387,20 @@ public class KpiServiceImpl implements KpiService } } } - + // 构建列和层的标签 StringBuilder columnLabels = new StringBuilder(); for (Long col : columnSet) { columnLabels.append("'").append(col).append("列',"); } String column = "[" + columnLabels.toString() + "]"; - + StringBuilder floorLabels = new StringBuilder(); for (Long floor : floorSet) { floorLabels.append("'").append(floor).append("层',"); } String floor = "[" + floorLabels.toString() + "]"; - + // 返回结果 Map map = new HashMap<>(); map.put("empty", "[" + empty + "]"); @@ -412,20 +418,20 @@ public class KpiServiceImpl implements KpiService @Override public Map getChartMag(String warehouseId,String theColumn,String theFloor,String thePlatoon){ Map response = new HashMap<>(); - + // 查询指定货位信息 BasCargoSpace queryParams = new BasCargoSpace(); queryParams.setWarehouseId(warehouseId); queryParams.setTheColumn(Long.parseLong(theColumn)); queryParams.setTheFloor(Long.parseLong(theFloor)); queryParams.setThePlatoon(Long.parseLong(thePlatoon)); - + List list = basCargoSpaceMapper.selectBasCargoSpaceList(queryParams); - + if (!list.isEmpty()) { BasCargoSpace space = list.get(0); StringBuilder info = new StringBuilder(); - + // 拼接货位信息 info.append("货位名称:").append(space.getCargoSpaceName()).append("
"); info.append("货位类型:").append(space.getTheTypeName()).append("
"); @@ -433,14 +439,36 @@ public class KpiServiceImpl implements KpiService info.append("托盘条码:").append(space.getTrayCode() != null ? space.getTrayCode() : "无").append("
"); info.append("货位高度:").append(space.getCargoHight() != null ? space.getCargoHight() : "无").append("
"); info.append("是否双伸:").append("Y".equals(space.getIssDouble()) ? "是" : "否").append("
"); - + response.put("msg", info.toString()); } else { response.put("msg", "未找到货位信息"); } - + return response; } + @Override + public AjaxResult getInAnalysisByData(String warehouseId, String startTime, String endTime,String inOut) { + Map res = new HashMap<>(); + MydoJob mydoJobParam = new MydoJob(); + mydoJobParam.setWarehouseId(warehouseId); + mydoJobParam.setCreateLeftTime(startTime); + mydoJobParam.setCreateRightTime(endTime); + mydoJobParam.setInOut(inOut); + List datesBetween = DateUtil.rangeToList(DateUtil.parseDate(mydoJobParam.getCreateLeftTime()), DateUtil.parseDate(mydoJobParam.getCreateRightTime()), DateField.DAY_OF_MONTH); + List list = mydoJobFinishMapper.selectMydoJobFinishListByMydoJob(mydoJobParam); + List x = new ArrayList<>(); + List y = new ArrayList<>(); + for (DateTime dateTime : datesBetween) { + //筛选每一日的数量 + x.add(DateUtil.format(dateTime, "yyyy-MM-dd")); + y.add(list.stream().filter(mydoJob -> DateUtil.isIn(mydoJob.getCreateTime(), DateUtil.beginOfDay(dateTime),DateUtil.endOfDay(dateTime))).count()); + } + res.put("xAxis",x); + res.put("series",y); + return AjaxResult.success(res); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java index 709352d..1bc7782 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java @@ -415,6 +415,7 @@ public class PdaServiceImp implements PdaService { checkCommitRecord.setStockId(mydoJobDetail.getStockId()); checkCommitRecord.setSpare1(mydoJobDetail.getInOrOutDId()); checkCommitRecord.setSpare2(mydoJobDetail.getProductId()); + checkCommitRecord.setSpare3(mydoJobDetail.getOutQuantity()); checkCommitRecordService.insertCheckCommitRecord(checkCommitRecord); mydoJobDetail.setSpare3("1"); diff --git a/ruoyi-ui/src/api/kpi/inAnalysis.js b/ruoyi-ui/src/api/kpi/inAnalysis.js index 9ae1450..430cf6d 100644 --- a/ruoyi-ui/src/api/kpi/inAnalysis.js +++ b/ruoyi-ui/src/api/kpi/inAnalysis.js @@ -7,3 +7,12 @@ export function getInAnalysisList(query) { params: query }) } + +// 获取入库数量统计数据 +export function getInAnalysisData(query) { + return request({ + url: '/kpi/inAnalysisByData', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/views/in/receive/add/index.vue b/ruoyi-ui/src/views/in/receive/add/index.vue index e044125..97a0209 100644 --- a/ruoyi-ui/src/views/in/receive/add/index.vue +++ b/ruoyi-ui/src/views/in/receive/add/index.vue @@ -332,12 +332,12 @@ export default { /** 确认选择物料 */ confirmSelectProduct() { // 检查选中的物料是否已存在于表单中 - const duplicateProducts = this.selectedProducts.filter(selected => + const duplicateProducts = this.selectedProducts.filter(selected => this.productList.some(existing => existing.productId === selected.productId) ); - + if (duplicateProducts.length > 0) { - this.$modal.msgError('以下物料已存在,请修改数量:\n' + duplicateProducts.map(p => p.productName).join('\n')); + this.$modal.msgError(this.$t('receiveStockinAdd.addProductError')+'\n' + duplicateProducts.map(p => p.productName).join('\n')); return; } diff --git a/ruoyi-ui/src/views/kpi/inAnalysis/indexByTime.vue b/ruoyi-ui/src/views/kpi/inAnalysis/indexByTime.vue new file mode 100644 index 0000000..3769ce3 --- /dev/null +++ b/ruoyi-ui/src/views/kpi/inAnalysis/indexByTime.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/ruoyi-ui/src/views/kpi/outAnalysis/indexByTime.vue b/ruoyi-ui/src/views/kpi/outAnalysis/indexByTime.vue new file mode 100644 index 0000000..3ff5611 --- /dev/null +++ b/ruoyi-ui/src/views/kpi/outAnalysis/indexByTime.vue @@ -0,0 +1,180 @@ + + + + +