From d51f64c1f0105d4b18aa8344c11e47827730a40c Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 08 八月 2025 10:42:39 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockStatisticController.java | 104 ++++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocRevise.java | 2
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockController.java | 8
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java | 10
rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java | 4
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 19
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/StockStatisticService.java | 8
rsf-server/src/main/java/stockStatistic.sql | 31 ++
rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/StockStatisticMapper.java | 12 +
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java | 5
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/StockStatisticServiceImpl.java | 12 +
rsf-server/src/main/resources/mapper/manager/StockStatisticMapper.xml | 5
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemDeadController.java | 220 ++++++++++++++++++
rsf-admin/src/i18n/zh.js | 13 +
rsf-admin/src/i18n/en.js | 14 +
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/InStockNum.java | 38 +++
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockStatistic.java | 117 +++++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java | 82 ++++--
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItemDead.java | 13 +
19 files changed, 676 insertions(+), 41 deletions(-)
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 36d02b0..32dd056 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -214,6 +214,7 @@
locRevise: 'Loc Revise',
statisticReport: 'Statistical Report',
locDeadReport: 'Locs Dead Report',
+ stockStatistic: 'Stock Statistic',
},
table: {
field: {
@@ -825,6 +826,18 @@
startTime: "startTime",
endTime: "endTime",
},
+ stockStatistic: {
+ id: "id",
+ dayTime: "dayTime",
+ taskType: "taskType",
+ taskStatus: "taskStatus",
+ maktx: "maktx",
+ matnrCode: "matnrCode",
+ count: "count",
+ batch: "batch",
+ anfme: "anfme",
+ unit: "unit",
+ },
delivery: {
code: "code",
platId: "platId",
@@ -1032,7 +1045,6 @@
wkType: 'Work Type',
orderType: "orderType",
orderItemId: "orderItemId",
- sourceCode: "sourceCode",
matnrId: "matnrId",
maktx: "maktx",
matnrCode: "matnrCode",
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 7690056..e30ae5a 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -221,6 +221,7 @@
locRevise: '搴撳瓨璋冩暣',
statisticReport: '鏃ュ織鎶ヨ〃',
locDeadReport : '搴撳瓨鍋滄粸鎶ヨ〃',
+ stockStatistic: '鏃ュ簱瀛樼粺璁�',
},
table: {
field: {
@@ -479,6 +480,18 @@
useStatus: '搴撲綅鐘舵��',
locAreaId: '閫昏緫鍒嗗尯'
},
+ stockStatistic: {
+ id: "id",
+ dayTime: "鏃ユ湡",
+ taskType: "浠诲姟绫诲瀷",
+ taskStatus: "浠诲姟鐘舵��",
+ maktx: "鐗╂枡鍚嶇О",
+ matnrCode: "鐗╂枡缂栫爜",
+ count: "娆℃暟",
+ batch: "鎵规",
+ anfme: "鏁伴噺",
+ unit: "鍗曚綅",
+ },
locType: {
name: "搴撲綅绫诲瀷",
code: "缂栧彿",
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index 971f036..c6bec07 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -388,23 +388,20 @@
InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
- int sRow = deviceBind.getStartRow();
- int eRow = deviceBind.getEndRow();
int deviceQty = deviceBind.getDeviceQty();
// ===============>>>> 寮�濮嬫墽琛�
curRow = deviceBind.getCurrentRow();
- //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
- for (int i = times; i <= deviceQty * 2; i++) {
- int[] locNecessaryParameters = LocUtils.LocNecessaryParameters(deviceBind, curRow, deviceQty);
- curRow = locNecessaryParameters[1];
- channel = locNecessaryParameters[2];
- rowCount = locNecessaryParameters[0];
- nearRow = locNecessaryParameters[3];
- break;
- }
+ //鑾峰彇鎺�
+ int[] locNecessaryParameters = LocUtils.LocNecessaryParameters(deviceBind, curRow, deviceQty);
+ curRow = locNecessaryParameters[1];
+ channel = locNecessaryParameters[2];
+ rowCount = locNecessaryParameters[0];
+ nearRow = locNecessaryParameters[3];
+
+
if (nearRow == 0) {
throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
index 574305c..e8bbef4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
@@ -22,8 +22,8 @@
// generator.username="sa";
// generator.password="Zoneyung@zy56$";
- generator.table = "man_revise_log_item";
- generator.tableDesc = "搴撲綅璋冩暣鍘嗗彶";
+ generator.table = "view_stock_statistic";
+ generator.tableDesc = "鏃ュ簱瀛樼粺璁�";
generator.packagePath = "com.vincent.rsf.server.manager";
generator.build();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemDeadController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemDeadController.java
new file mode 100644
index 0000000..9dae6b5
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemDeadController.java
@@ -0,0 +1,220 @@
+package com.vincent.rsf.server.manager.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.common.annotation.OperationLog;
+import com.vincent.rsf.server.common.constant.Constants;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.KeyValVo;
+import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.common.utils.ExcelUtil;
+import com.vincent.rsf.server.common.utils.FieldsUtils;
+import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
+import com.vincent.rsf.server.manager.entity.LocItem;
+import com.vincent.rsf.server.manager.enums.LocStsType;
+import com.vincent.rsf.server.manager.enums.TaskResouceType;
+import com.vincent.rsf.server.manager.service.LocItemService;
+import com.vincent.rsf.server.manager.service.LocService;
+import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@RestController
+public class LocItemDeadController extends BaseController {
+
+ @Autowired
+ private LocItemService locItemService;
+ @Autowired
+ private LocService locService;
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @PostMapping("/locDeadReport/page")
+ public R page(@RequestBody Map<String, Object> map) {
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<LocItem, BaseParam> pageParam = new PageParam<>(baseParam, LocItem.class);
+ QueryWrapper<LocItem> wrapper = pageParam.buildWrapper(true);
+ /**鎷兼帴鎵╁睍瀛楁*/
+ PageParam<LocItem, BaseParam> page = locItemService.page(pageParam, wrapper);
+ List<LocItem> records = page.getRecords();
+ for (LocItem record : records) {
+ if (!Objects.isNull(record.getFieldsIndex())) {
+ Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
+ record.setExtendFields(fields);
+ }
+ }
+ page.setRecords(records);
+
+ return R.ok().add(page);
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @PostMapping("/locDeadReport/useO/page")
+ public R locUseOPage(@RequestBody Map<String, Object> map) {
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<LocItem, BaseParam> pageParam = new PageParam<>(baseParam, LocItem.class);
+ QueryWrapper<LocItem> locItemQueryWrapper = pageParam.buildWrapper(true);
+ String applySql = String.format(
+ "EXISTS (SELECT 1 FROM man_loc ml " +
+ "WHERE ml.use_status = '%s'" +
+ "AND ml.id = man_loc_item.loc_id " +
+ ")",
+ LocStsType.LOC_STS_TYPE_F.type
+ );
+ locItemQueryWrapper.apply(applySql);
+ /**鎷兼帴鎵╁睍瀛楁*/
+ PageParam<LocItem, BaseParam> page = locItemService.page(pageParam, locItemQueryWrapper);
+ List<LocItem> records = page.getRecords();
+ for (LocItem record : records) {
+ if (!Objects.isNull(record.getFieldsIndex())) {
+ Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
+ record.setExtendFields(fields);
+ }
+ }
+ page.setRecords(records);
+
+ return R.ok().add(page);
+ }
+
+ /**
+ * 鐢熸垚搴撳瓨鍑哄簱浠诲姟
+ * @param param
+ * @return
+ */
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @ApiOperation("鐢熸垚搴撳瓨鍑哄簱浠诲姟")
+ @PostMapping("/locDeadReport/generate/task")
+ public R generateTask(@RequestBody LocToTaskParams param) {
+ if (Objects.isNull(param)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ param.setType(Constants.TASK_TYPE_OUT_STOCK);
+ try {
+ locItemService.generateTask(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val, param, getLoginUserId());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return R.ok();
+ }
+
+ /**
+ * 鐢熸垚绉诲簱浠诲姟
+ * @param map
+ * @return
+ */
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @ApiOperation("鐢熸垚绉诲簱浠诲姟")
+ @PostMapping("/locDeadReport/move/task")
+ public R genMoveTask(@RequestBody LocToTaskParams map) {
+ if (Objects.isNull(map)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ return R.ok("浠诲姟鐢熸垚鎴愬姛").add(locItemService.genMoveTask(map, getLoginUserId()));
+ }
+
+ /**
+ * 鐢熸垚鐩樼偣鍑哄簱浠诲姟
+ * @param map
+ * @return
+ */
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @ApiOperation("鐢熸垚鐩樼偣鍑哄簱浠诲姟")
+ @PostMapping("/locDeadReport/check/task")
+ public R genStatisticalTask(@RequestBody LocToTaskParams map) {
+ if (Objects.isNull(map)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ map.setType(Constants.TASK_TYPE_OUT_CHECK);
+
+ try {
+ locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, map, getLoginUserId());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ return R.ok("浠诲姟鐢熸垚鎴愬姛");
+ }
+
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @PostMapping("/locDeadReport/list")
+ public R list(@RequestBody Map<String, Object> map) {
+ return R.ok().add(locItemService.list());
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @PostMapping({"/locDeadReport/many/{ids}", "/locDeadReport/many/{ids}"})
+ public R many(@PathVariable Long[] ids) {
+ return R.ok().add(locItemService.listByIds(Arrays.asList(ids)));
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @GetMapping("/locDeadReport/{id}")
+ public R get(@PathVariable("id") Long id) {
+ return R.ok().add(locItemService.getById(id));
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:save')")
+ @OperationLog("Create 搴撲綅鏄庣粏")
+ @PostMapping("/locDeadReport/save")
+ public R save(@RequestBody LocItem locItem) {
+ locItem.setCreateBy(getLoginUserId());
+ locItem.setCreateTime(new Date());
+ locItem.setUpdateBy(getLoginUserId());
+ locItem.setUpdateTime(new Date());
+ if (!locItemService.save(locItem)) {
+ return R.error("Save Fail");
+ }
+ return R.ok("Save Success").add(locItem);
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:update')")
+ @OperationLog("Update 搴撲綅鏄庣粏")
+ @PostMapping("/locDeadReport/update")
+ public R update(@RequestBody LocItem locItem) {
+ locItem.setUpdateBy(getLoginUserId());
+ locItem.setUpdateTime(new Date());
+ if (!locItemService.updateById(locItem)) {
+ return R.error("Update Fail");
+ }
+ return R.ok("Update Success").add(locItem);
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:remove')")
+ @OperationLog("Delete 搴撲綅鏄庣粏")
+ @PostMapping("/locDeadReport/remove/{ids}")
+ public R remove(@PathVariable Long[] ids) {
+ if (!locItemService.removeByIds(Arrays.asList(ids))) {
+ return R.error("Delete Fail");
+ }
+ return R.ok("Delete Success").add(ids);
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @PostMapping("/locDeadReport/query")
+ public R query(@RequestParam(required = false) String condition) {
+ List<KeyValVo> vos = new ArrayList<>();
+ LambdaQueryWrapper<LocItem> wrapper = new LambdaQueryWrapper<>();
+ if (!Cools.isEmpty(condition)) {
+ wrapper.like(LocItem::getId, condition);
+ }
+ locItemService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+ item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+ );
+ return R.ok().add(vos);
+ }
+
+ @PreAuthorize("hasAuthority('manager:statisticReport:list')")
+ @PostMapping("/locDeadReport/export")
+ public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+ ExcelUtil.build(ExcelUtil.create(locItemService.list(), LocItem.class), response);
+ }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockController.java
index 5d398c3..8f9ad32 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockController.java
@@ -36,6 +36,14 @@
}
@PreAuthorize("hasAuthority('manager:stock:list')")
+ @PostMapping("/inStock/num/page")
+ public R inStockpage(@RequestBody Map<String, Object> map) {
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<Stock, BaseParam> pageParam = new PageParam<>(baseParam, Stock.class);
+ return R.ok().add(stockService.page(pageParam, pageParam.buildWrapper(true)));
+ }
+
+ @PreAuthorize("hasAuthority('manager:stock:list')")
@PostMapping("/stock/list")
public R list(@RequestBody Map<String, Object> map) {
return R.ok().add(stockService.list());
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockStatisticController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockStatisticController.java
new file mode 100644
index 0000000..c9058d5
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/StockStatisticController.java
@@ -0,0 +1,104 @@
+package com.vincent.rsf.server.manager.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.common.utils.ExcelUtil;
+import com.vincent.rsf.server.common.annotation.OperationLog;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.KeyValVo;
+import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.entity.StockStatistic;
+import com.vincent.rsf.server.manager.service.StockStatisticService;
+import com.vincent.rsf.server.system.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@RestController
+public class StockStatisticController extends BaseController {
+
+ @Autowired
+ private StockStatisticService stockStatisticService;
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:list')")
+ @PostMapping("/stockStatistic/page")
+ public R page(@RequestBody Map<String, Object> map) {
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<StockStatistic, BaseParam> pageParam = new PageParam<>(baseParam, StockStatistic.class);
+ return R.ok().add(stockStatisticService.page(pageParam, pageParam.buildWrapper(true)));
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:list')")
+ @PostMapping("/stockStatistic/list")
+ public R list(@RequestBody Map<String, Object> map) {
+ return R.ok().add(stockStatisticService.list());
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:list')")
+ @PostMapping({"/stockStatistic/many/{ids}", "/stockStatistics/many/{ids}"})
+ public R many(@PathVariable Long[] ids) {
+ return R.ok().add(stockStatisticService.listByIds(Arrays.asList(ids)));
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:list')")
+ @GetMapping("/stockStatistic/{id}")
+ public R get(@PathVariable("id") Long id) {
+ return R.ok().add(stockStatisticService.getById(id));
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:save')")
+ @OperationLog("Create 鏃ュ簱瀛樼粺璁�")
+ @PostMapping("/stockStatistic/save")
+ public R save(@RequestBody StockStatistic stockStatistic) {
+ if (!stockStatisticService.save(stockStatistic)) {
+ return R.error("Save Fail");
+ }
+ return R.ok("Save Success").add(stockStatistic);
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:update')")
+ @OperationLog("Update 鏃ュ簱瀛樼粺璁�")
+ @PostMapping("/stockStatistic/update")
+ public R update(@RequestBody StockStatistic stockStatistic) {
+ if (!stockStatisticService.updateById(stockStatistic)) {
+ return R.error("Update Fail");
+ }
+ return R.ok("Update Success").add(stockStatistic);
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:remove')")
+ @OperationLog("Delete 鏃ュ簱瀛樼粺璁�")
+ @PostMapping("/stockStatistic/remove/{ids}")
+ public R remove(@PathVariable Long[] ids) {
+ if (!stockStatisticService.removeByIds(Arrays.asList(ids))) {
+ return R.error("Delete Fail");
+ }
+ return R.ok("Delete Success").add(ids);
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:list')")
+ @PostMapping("/stockStatistic/query")
+ public R query(@RequestParam(required = false) String condition) {
+ List<KeyValVo> vos = new ArrayList<>();
+ LambdaQueryWrapper<StockStatistic> wrapper = new LambdaQueryWrapper<>();
+ if (!Cools.isEmpty(condition)) {
+ wrapper.like(StockStatistic::getId, condition);
+ }
+ stockStatisticService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+ item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+ );
+ return R.ok().add(vos);
+ }
+
+ @PreAuthorize("hasAuthority('manager:stockStatistic:list')")
+ @PostMapping("/stockStatistic/export")
+ public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+ ExcelUtil.build(ExcelUtil.create(stockStatisticService.list(), StockStatistic.class), response);
+ }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/InStockNum.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/InStockNum.java
new file mode 100644
index 0000000..0e7c312
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/InStockNum.java
@@ -0,0 +1,38 @@
+package com.vincent.rsf.server.manager.entity;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "InStockNum", description = "鏃ュ叆搴撶粺璁�")
+public class InStockNum implements Serializable {
+
+ public static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("鐗╂枡鍚嶇О")
+ private String maktx;
+
+ @ApiModelProperty("鐗╂枡缂栫爜")
+ private String matnrCode;
+
+ @ApiModelProperty("鏁伴噺")
+ private Double anfme;
+
+ @ApiModelProperty("鍗曚綅")
+ private String unit;
+
+ @ApiModelProperty("鎵规")
+ private String batch;
+
+ @ApiModelProperty("鏃ユ湡")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date dayTime;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java
index 5191964..38ae934 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.vincent.rsf.framework.common.DateUtils;
import com.vincent.rsf.server.manager.service.LocService;
import com.vincent.rsf.server.manager.service.WarehouseAreasService;
import com.vincent.rsf.server.system.constant.DictTypeCode;
@@ -342,6 +343,10 @@
return dictData.getLabel();
}
+ public Double getReviseQty() {
+ return this.anfme;
+ }
+
public String getStatus$(){
if (null == this.status){ return null; }
switch (this.status){
@@ -354,6 +359,11 @@
}
}
+ public Integer getDeadTime() {
+ if (null == this.createTime){ return null; }
+ return DateUtils.diff(createTime, new Date());
+ }
+
public String getCreateBy$(){
UserService service = SpringUtils.getBean(UserService.class);
User user = service.getById(this.createBy);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItemDead.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItemDead.java
new file mode 100644
index 0000000..9f2979e
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItemDead.java
@@ -0,0 +1,13 @@
+package com.vincent.rsf.server.manager.entity;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "LocItemDead", description = "搴撳瓨鍋滄粸")
+public class LocItemDead {
+
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocRevise.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocRevise.java
index 0f998cd..fdca335 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocRevise.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocRevise.java
@@ -158,7 +158,7 @@
public String getType$(){
if (null == this.type){ return null; }
switch (this.type){
- case 0:
+ case 1:
return " 搴撳瓨璋冩暣";
case 2:
return " 鐩樼偣璋冩暣";
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockStatistic.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockStatistic.java
new file mode 100644
index 0000000..e92e213
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockStatistic.java
@@ -0,0 +1,117 @@
+package com.vincent.rsf.server.manager.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.SpringUtils;
+import com.vincent.rsf.server.system.service.UserService;
+import com.vincent.rsf.server.system.entity.User;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("view_stock_statistic")
+public class StockStatistic implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value= "ID")
+ private Long id;
+
+ @ApiModelProperty(value= "")
+ private String dayTime;
+
+ /**
+ * 浠诲姟绫诲瀷
+ */
+ @ApiModelProperty(value= "浠诲姟绫诲瀷")
+ private Integer taskType;
+
+ /**
+ * 浠诲姟鐘舵��
+ */
+ @ApiModelProperty(value= "浠诲姟鐘舵��")
+ private Integer taskStatus;
+
+ /**
+ * 鐗╂枡鍚嶇О
+ */
+ @ApiModelProperty(value= "鐗╂枡鍚嶇О")
+ private String maktx;
+
+ /**
+ * 鐗╂枡缂栫爜
+ */
+ @ApiModelProperty(value= "鐗╂枡缂栫爜")
+ private String matnrCode;
+
+ @ApiModelProperty(value= "")
+ private Long count;
+
+ /**
+ * 搴撳瓨鎵规
+ */
+ @ApiModelProperty(value= "搴撳瓨鎵规")
+ private String batch;
+
+ @ApiModelProperty(value= "")
+ private Double anfme;
+
+ /**
+ * 搴撳瓨鍗曚綅
+ */
+ @ApiModelProperty(value= "搴撳瓨鍗曚綅")
+ private String unit;
+
+ public StockStatistic() {}
+
+ public StockStatistic(Long id,String dayTime,Integer taskType,Integer taskStatus,String maktx,String matnrCode,Long count,String batch,Double anfme,String unit) {
+ this.id = id;
+ this.dayTime = dayTime;
+ this.taskType = taskType;
+ this.taskStatus = taskStatus;
+ this.maktx = maktx;
+ this.matnrCode = matnrCode;
+ this.count = count;
+ this.batch = batch;
+ this.anfme = anfme;
+ this.unit = unit;
+ }
+
+// StockStatistic stockStatistic = new StockStatistic(
+// null, // ID[闈炵┖]
+// null, //
+// null, // 浠诲姟绫诲瀷
+// null, // 浠诲姟鐘舵��
+// null, // 鐗╂枡鍚嶇О
+// null, // 鐗╂枡缂栫爜
+// null, // [闈炵┖]
+// null, // 搴撳瓨鎵规
+// null, //
+// null // 搴撳瓨鍗曚綅
+// );
+
+
+
+ public Boolean getStatusBool(){
+ if (null == this.status){ return null; }
+ switch (this.status){
+ case 1:
+ return true;
+ case 0:
+ return false;
+ default:
+ return null;
+ }
+ }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/StockStatisticMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/StockStatisticMapper.java
new file mode 100644
index 0000000..6b47bc4
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/StockStatisticMapper.java
@@ -0,0 +1,12 @@
+package com.vincent.rsf.server.manager.mapper;
+
+import com.vincent.rsf.server.manager.entity.StockStatistic;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface StockStatisticMapper extends BaseMapper<StockStatistic> {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/StockStatisticService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/StockStatisticService.java
new file mode 100644
index 0000000..d8cc395
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/StockStatisticService.java
@@ -0,0 +1,8 @@
+package com.vincent.rsf.server.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.server.manager.entity.StockStatistic;
+
+public interface StockStatisticService extends IService<StockStatistic> {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java
index 13530da..702845a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeliveryServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.exception.BusinessException;
+import com.vincent.rsf.server.manager.entity.DeliveryItem;
import com.vincent.rsf.server.manager.enums.AsnExceStatus;
import com.vincent.rsf.server.manager.mapper.DeliveryMapper;
import com.vincent.rsf.server.manager.entity.Delivery;
@@ -28,11 +29,11 @@
throw new BusinessException("鏁版嵁閿欒锛氬崟鎹俊鎭笉瀛樺湪锛侊紒");
}
deliveries.forEach(delivery -> {
- if (delivery.getExceStatus().equals(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)){
+ if (delivery.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val)){
if (!this.removeById(delivery.getId())) {
throw new CoolException("涓诲崟鍒犻櫎澶辫触锛侊紒");
}
- if (!deliveryItemService.removeById(delivery.getId())) {
+ if (!deliveryItemService.remove(new LambdaQueryWrapper<DeliveryItem>().eq(DeliveryItem::getDeliveryId,delivery.getId()))) {
throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛�1");
}
} else {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java
index df9136e..cf8c3b1 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogItemServiceImpl.java
@@ -1,17 +1,14 @@
package com.vincent.rsf.server.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.controller.params.ReviseLogItemParams;
-import com.vincent.rsf.server.manager.entity.Loc;
-import com.vincent.rsf.server.manager.entity.LocItem;
-import com.vincent.rsf.server.manager.entity.ReviseLog;
+import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.mapper.ReviseLogItemMapper;
-import com.vincent.rsf.server.manager.entity.ReviseLogItem;
-import com.vincent.rsf.server.manager.service.LocItemService;
-import com.vincent.rsf.server.manager.service.LocService;
-import com.vincent.rsf.server.manager.service.ReviseLogItemService;
+import com.vincent.rsf.server.manager.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vincent.rsf.server.manager.service.ReviseLogService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,20 +16,26 @@
import java.util.List;
import java.util.Objects;
+import java.util.stream.Collectors;
@Service("reviseLogItemService")
public class ReviseLogItemServiceImpl extends ServiceImpl<ReviseLogItemMapper, ReviseLogItem> implements ReviseLogItemService {
@Autowired
- private ReviseLogService reviseLogService;
+ private ReviseLogService reviseLogService;
@Autowired
private LocItemService locItemService;
@Autowired
private LocService locService;
+ @Autowired
+ private ReviseLogItemService reviseLogItemService;
+ @Autowired
+ private LocReviseService locReviseService;
/**
* 淇濆瓨搴撳瓨璋冩暣鍘嗗彶鍗曟槑缁�
+ *
* @param reviseLogItem
* @return
*/
@@ -43,42 +46,73 @@
if (Objects.isNull(reviseLog)) {
throw new RuntimeException("搴撳瓨鍘嗗彶鍗曟嵁涓嶅瓨鍦紒锛�");
}
- Loc locItem = locService.getOne(new LambdaQueryWrapper<Loc>()
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, reviseLog.getLocCode()));
- if (Objects.isNull(locItem)) {
+ if (Objects.isNull(loc)) {
throw new RuntimeException("搴撲綅搴撳瓨涓嶅瓨鍦紒锛�");
}
List<ReviseLogItem> items = reviseLogItem.getItems();
+
+ this.remove(new LambdaQueryWrapper<ReviseLogItem>()
+ .eq(ReviseLogItem::getLocId, loc.getId()));
+
items.forEach(item -> {
ReviseLogItem logItem = new ReviseLogItem();
BeanUtils.copyProperties(item, logItem);
logItem.setReviseLogId(reviseLogItem.getReviseLogId())
.setUpdateBy(userId)
.setCreateBy(userId)
- .setLocId(locItem.getId())
- .setLocCode(locItem.getCode());
+ .setLocId(loc.getId())
+ .setLocCode(loc.getCode());
if (Objects.isNull(item.getAnfme())) {
- item.setAnfme(0.0);
+ logItem.setAnfme(0.0);
}
- if (!this.save(logItem)) {
+ if (!this.saveOrUpdate(logItem)) {
throw new RuntimeException("搴撳瓨鏄庣粏璋冩暣澶辫触");
}
LocItem one = locItemService.getOne(new LambdaQueryWrapper<LocItem>()
.eq(LocItem::getMatnrId, logItem.getMatnrId())
- .eq(LocItem::getBatch, logItem.getBatch())
- .eq(LocItem::getFieldsIndex, logItem.getFieldsIndex())
+ .eq(StringUtils.isNotBlank(logItem.getBatch()), LocItem::getBatch, logItem.getBatch())
+ .eq(StringUtils.isNotBlank(logItem.getFieldsIndex()), LocItem::getFieldsIndex, logItem.getFieldsIndex())
.eq(LocItem::getLocCode, logItem.getLocCode()));
if (Objects.isNull(one)) {
- throw new RuntimeException("搴撳瓨鏄庣粏涓嶅瓨鍦紒锛�");
- }
-
- one.setAnfme(logItem.getReviseQty());
-
- if (!locItemService.updateById(one)) {
- throw new RuntimeException("搴撳瓨鏄庣粏淇敼澶辫触锛侊紒");
+ LocItem locDetl = new LocItem();
+ BeanUtils.copyProperties(logItem, locDetl);
+ locDetl.setLocId(loc.getId())
+ .setLocCode(loc.getCode())
+ .setAnfme(logItem.getReviseQty())
+ .setUpdateBy(userId)
+ .setId(null)
+ .setCreateBy(userId);
+ if (!locItemService.save(locDetl)) {
+ throw new CoolException("搴撳瓨鏄庣粏淇濆瓨澶辫触锛侊紒");
+ }
+ } else {
+ one.setAnfme(logItem.getReviseQty());
+ if (!locItemService.updateById(one)) {
+ throw new RuntimeException("搴撳瓨鏄庣粏淇敼澶辫触锛侊紒");
+ }
}
});
+
+ List<ReviseLog> list = reviseLogService.list(new LambdaQueryWrapper<ReviseLog>().eq(ReviseLog::getReviseId, reviseLog.getReviseId()));
+ if (Objects.isNull(list)) {
+ throw new RuntimeException("鏁版嵁閿欒锛氬簱瀛樿皟鏁村崟涓嶅瓨鍦紒锛�");
+ }
+ List<Long> reviseIds = list.stream().map(ReviseLog::getId).collect(Collectors.toList());
+ List<ReviseLogItem> logItems = reviseLogItemService.list(new LambdaQueryWrapper<ReviseLogItem>()
+ .in(ReviseLogItem::getReviseLogId, reviseIds));
+
+ Double anfems = logItems.stream().mapToDouble(ReviseLogItem::getAnfme).sum();
+ Double reviseQty = logItems.stream().mapToDouble(ReviseLogItem::getReviseQty).sum();
+
+ if (!locReviseService.update(new LambdaUpdateWrapper<LocRevise>()
+ .eq(LocRevise::getId, reviseLog.getReviseId())
+ .set(LocRevise::getAnfme, anfems)
+ .set(LocRevise::getReviseQty, reviseQty))) {
+ throw new RuntimeException("搴撳瓨璋冩暣鍗曚慨鏀瑰け璐ワ紒锛�");
+ }
return items;
}
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/StockStatisticServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/StockStatisticServiceImpl.java
new file mode 100644
index 0000000..280d0ed
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/StockStatisticServiceImpl.java
@@ -0,0 +1,12 @@
+package com.vincent.rsf.server.manager.service.impl;
+
+import com.vincent.rsf.server.manager.mapper.StockStatisticMapper;
+import com.vincent.rsf.server.manager.entity.StockStatistic;
+import com.vincent.rsf.server.manager.service.StockStatisticService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("stockStatisticService")
+public class StockStatisticServiceImpl extends ServiceImpl<StockStatisticMapper, StockStatistic> implements StockStatisticService {
+
+}
diff --git a/rsf-server/src/main/java/stockStatistic.sql b/rsf-server/src/main/java/stockStatistic.sql
new file mode 100644
index 0000000..b82b7b1
--- /dev/null
+++ b/rsf-server/src/main/java/stockStatistic.sql
@@ -0,0 +1,31 @@
+-- save stockStatistic record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.stockStatistic', '0', '/manager/stockStatistic', 'stockStatistic', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 鏃ュ簱瀛樼粺璁�', '', '1', 'manager:stockStatistic:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 鏃ュ簱瀛樼粺璁�', '', '1', 'manager:stockStatistic:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 鏃ュ簱瀛樼粺璁�', '', '1', 'manager:stockStatistic:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 鏃ュ簱瀛樼粺璁�', '', '1', 'manager:stockStatistic:remove', '3', '1', '1');
+
+-- locale menu name
+stockStatistic: 'StockStatistic',
+
+-- locale field
+stockStatistic: {
+ id: "id",
+ dayTime: "dayTime",
+ taskType: "taskType",
+ taskStatus: "taskStatus",
+ maktx: "maktx",
+ matnrCode: "matnrCode",
+ count: "count",
+ batch: "batch",
+ anfme: "anfme",
+ unit: "unit",
+},
+
+-- ResourceContent
+import stockStatistic from './stockStatistic';
+
+case 'stockStatistic':
+ return stockStatistic;
diff --git a/rsf-server/src/main/resources/mapper/manager/StockStatisticMapper.xml b/rsf-server/src/main/resources/mapper/manager/StockStatisticMapper.xml
new file mode 100644
index 0000000..f7a4309
--- /dev/null
+++ b/rsf-server/src/main/resources/mapper/manager/StockStatisticMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vincent.rsf.server.manager.mapper.StockStatisticMapper">
+
+</mapper>
--
Gitblit v1.9.1