From 474103da0c9793ec9cd7559f109491ece282e269 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 28 七月 2025 17:03:16 +0800
Subject: [PATCH] 调拔单功能优化
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java | 80 +++++++++++++++++++++++---
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java | 12 ++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java | 2
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java | 2
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java | 24 ++++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java | 2
rsf-admin/src/page/orders/transfer/TransferList.jsx | 38 +++++++++++-
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java | 1
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java | 7 ++
rsf-admin/src/page/orders/transfer/TransferOrders.jsx | 4
10 files changed, 153 insertions(+), 19 deletions(-)
diff --git a/rsf-admin/src/page/orders/transfer/TransferList.jsx b/rsf-admin/src/page/orders/transfer/TransferList.jsx
index 8bce57d..46a80ea 100644
--- a/rsf-admin/src/page/orders/transfer/TransferList.jsx
+++ b/rsf-admin/src/page/orders/transfer/TransferList.jsx
@@ -20,9 +20,11 @@
TextField,
NumberField,
DateField,
+ useRefresh,
BooleanField,
ReferenceField,
TextInput,
+ Button,
DateTimeInput,
DateInput,
SelectInput,
@@ -33,18 +35,22 @@
DeleteButton,
} from 'react-admin';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting.js';
+import { Box, Typography, Card, Stack, } from '@mui/material';
import MyCreateButton from "../../components/MyCreateButton.jsx";
import MyExportButton from '../../components/MyExportButton.jsx';
import PageEditDrawer from "../../components/PageEditDrawer";
-import { Box, Typography, Card, Stack } from '@mui/material';
+import ConfirmButton from '../../components/ConfirmButton';
import PageDrawer from "../../components/PageDrawer.jsx";
import EmptyData from "../../components/EmptyData.jsx";
+import AddTaskIcon from '@mui/icons-material/AddTask';
import MyField from "../../components/MyField.jsx";
+import TransferOrders from "./TransferOrders.jsx";
import TransferCreate from "./TransferCreate.jsx";
-import { styled } from '@mui/material/styles';
-import TransferPanel from "./TransferPanel.jsx";
-import * as Common from '@/utils/common.js';
import ManualCreate from "./ManualCreate.jsx";
+import { styled } from '@mui/material/styles';
+import * as Common from '@/utils/common.js';
+import request from '@/utils/request';
+
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
@@ -105,6 +111,7 @@
const translate = useTranslate();
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
+ const [select, setSelect] = useState({});
return (
<Box display="flex">
@@ -135,7 +142,7 @@
preferenceKey='transfer'
bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
rowClick={(id, resource, record) => false}
- expand={() => <TransferPanel />}
+ expand={() => <TransferOrders />}
expandSingle={true}
omit={['id', 'createTime', 'createBy$', 'memo', 'orgWareId', 'tarWareId', 'orgAreaId', 'tarAreaId']}
>
@@ -160,6 +167,7 @@
<WrapperField cellClassName="opt" label="common.field.opt">
<EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
<DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+ <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} />
</WrapperField>
</StyledDatagrid>
</List>
@@ -175,3 +183,23 @@
}
export default TransferList;
+
+//涓嬪彂鎵ц
+const PublicButton = ({ setDrawerVal, setSelect }) => {
+ const record = useRecordContext();
+ const refresh = useRefresh();
+ const taskEvent = async () => {
+ const { data: { code, data, msg } } = await request.post(`/transfer/pub/outStock`, record);
+ if (code === 200) {
+ notify(msg);
+ refresh()
+ } else {
+ notify(msg);
+ }
+ refresh();
+ }
+
+ return (
+ <ConfirmButton label={"toolbar.publicWorking"} startIcon={<AddTaskIcon />} onConfirm={taskEvent} size={"small"} />
+ )
+}
diff --git a/rsf-admin/src/page/orders/transfer/TransferPanel.jsx b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
similarity index 98%
rename from rsf-admin/src/page/orders/transfer/TransferPanel.jsx
rename to rsf-admin/src/page/orders/transfer/TransferOrders.jsx
index 5d3abe4..8d58600 100644
--- a/rsf-admin/src/page/orders/transfer/TransferPanel.jsx
+++ b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
@@ -39,7 +39,7 @@
},
}));
-const TransferPanel = () => {
+const TransferOrders = () => {
const record = useRecordContext();
if (!record) return null;
const translate = useTranslate();
@@ -95,4 +95,4 @@
);
};
-export default TransferPanel;
+export default TransferOrders;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
index 138a4f0..8e6ff49 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
@@ -58,7 +58,7 @@
BaseParam baseParam = buildParam(map, BaseParam.class);
PageParam<WkOrder, BaseParam> pageParam = new PageParam<>(baseParam, WkOrder.class);
QueryWrapper<WkOrder> queryWrapper = pageParam.buildWrapper(true);
- List<String> list = Arrays.asList(OrderType.ORDER_OUT.type);
+ List<String> list = Arrays.asList(OrderType.ORDER_OUT.type, OrderType.ORDER_TRANSFER.type);
queryWrapper.in("type", list);
return R.ok().add(outStockService.page(pageParam, queryWrapper));
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
index fd23a4e..dcc9f81 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
@@ -4,6 +4,7 @@
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.framework.exception.CoolException;
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.common.annotation.OperationLog;
import com.vincent.rsf.server.common.domain.BaseParam;
@@ -41,6 +42,7 @@
return R.ok().add(transferService.page(pageParam, pageParam.buildWrapper(true)));
}
+ @ApiOperation("鑾峰彇璋冩嫈鍗曞叧鑱旇鍗�")
@PreAuthorize("hasAuthority('manager:transfer:list')")
@PostMapping("/transfer/orders/page")
public R getTransferInfo(@RequestBody Map<String, Object> map) {
@@ -49,6 +51,16 @@
return R.ok().add(transferService.transfersPage(pageParam, pageParam.buildWrapper(true)));
}
+ @ApiOperation("璋冩嫈鍗曠敓鎴愬嚭搴撳崟")
+ @PreAuthorize("hasAuthority('manager:transfer:list')")
+ @PostMapping("/transfer/pub/outStock")
+ public R genOutstock(@RequestBody Transfer transfer) {
+ if (Objects.isNull(transfer)) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ return R.ok(transferService.genOutStock(transfer, getLoginUserId()));
+ }
+
@PreAuthorize("hasAuthority('manager:transfer:list')")
@PostMapping("/transfer/list")
public R list(@RequestBody Map<String, Object> map) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java
index c81c788..25985bd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java
@@ -5,6 +5,7 @@
import java.text.SimpleDateFormat;
import java.util.Date;
+import com.vincent.rsf.server.manager.service.CompanysService;
import lombok.experimental.Accessors;
import org.checkerframework.checker.units.qual.A;
import org.springframework.format.annotation.DateTimeFormat;
@@ -21,6 +22,7 @@
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
import java.util.Date;
+import java.util.Objects;
@Data
@Accessors(chain = true)
@@ -264,6 +266,28 @@
// null // 澶囨敞
// );
+ public String getSplrName() {
+ if (null == this.splrId) { return null; }
+ CompanysService companysService = SpringUtils.getBean(CompanysService.class);
+ Companys companys = companysService.getById(this.splrId);
+ if (Objects.isNull(companys)) {
+ return null;
+ } else {
+ return companys.getName();
+ }
+ }
+
+ public String getSplrCode() {
+ if (null == this.splrId) { return null; }
+ CompanysService companysService = SpringUtils.getBean(CompanysService.class);
+ Companys companys = companysService.getById(this.splrId);
+ if (Objects.isNull(companys)) {
+ return null;
+ } else {
+ return companys.getCode();
+ }
+ }
+
public String getStatus$(){
if (null == this.status){ return null; }
switch (this.status){
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java
index e9f3519..7093ef6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java
@@ -2,7 +2,7 @@
public enum CheckExceStatus {
- //鐩樼偣鍗曟墽琛岀姸鎬�
+ //鐩樼偣鍗曟墽琛岀姸鎬� /璋冩嫈鍗曟墽琛岀姸鎬�
CHECK_ORDER_STATUS_UN_EXCE("0", "鏈墽琛�"),
CHECK_ORDER_STATUS_INIT("1", "鍒濆鍖�"),
CHECK_ORDER_STATUS_EXCE_ING("2", "鎵ц涓�"),
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
index 15a0a35..b3e6b75 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
@@ -11,6 +11,7 @@
//璁㈠崟绫诲瀷
ORDER_OUT("out", "鍑哄簱鍗�"),
ORDER_IN("in", "鍏ュ簱鍗�"),
+ ORDER_TRANSFER("transfer", "璋冩嫈鍗�"),
ORDER_CHECK("check", "鐩樼偣鍗�");
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
index d131121..8f8efb7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
@@ -14,12 +14,13 @@
ORDER_WORK_TYPE_PURCHASE("3", "棰嗘枡閫�鍥炲叆搴撳崟"),
ORDER_WORK_TYPE_SALE("4", "閿�鍞��鍥炲叆搴撳崟"),
ORDER_WORK_TYPE_OTHER_IN("5", "鍏跺畠鍏ュ簱鍗�"),
+ ORDER_WORK_TYPE_OTHER_TERANSFER("6", "璋冩嫈鍏ュ簱鍗�"),
ORDER_WORK_TYPE_SUPPLIER("11", "閿�鍞嚭搴撳崟"),
ORDER_WORK_TYPE_RETURN_ORDER("12", "棰嗘枡鍑哄簱鍗�"),
ORDER_WORK_TYPE_PURCHASE_RETURN("13", "閲囪喘閫�鍥炲嚭搴撳崟"),
ORDER_WORK_TYPE_STOCK_OUT("15", "搴撳瓨鍑哄簱"),
ORDER_WORK_TYPE_STOCK_CHECK("16", "鐩樼偣鍑哄簱"),
-
+ ORDER_WORK_TYPE_STOCK_TERANSFER("17", "璋冩嫈鍑哄簱鍗�"),
ORDER_WORK_TYPE_OTHER("14", "鍏跺畠鍑哄簱鍗�");
@@ -54,6 +55,8 @@
return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type;
} else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc)) {
return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type;
+ } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc)) {
+ return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type;
}
return null;
}
@@ -81,6 +84,8 @@
return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.desc;
} else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type)) {
return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc;
+ } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)) {
+ return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc;
}
return null;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
index 07d37f4..4757941 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
@@ -19,5 +19,7 @@
R updateTransfer(TransferItemParams params, Long loginUserId);
IPage<WkOrder> transfersPage(PageParam<Transfer, BaseParam> pageParam, QueryWrapper<Transfer> transferQueryWrapper);
+
+ Transfer genOutStock(Transfer transfer, Long loginUserId);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
index e31cddf..29d4a58 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -10,23 +10,19 @@
import com.vincent.rsf.server.common.domain.PageResult;
import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
import com.vincent.rsf.server.manager.entity.*;
-import com.vincent.rsf.server.manager.enums.AsnExceStatus;
-import com.vincent.rsf.server.manager.enums.CheckExceStatus;
-import com.vincent.rsf.server.manager.enums.OrderSourceType;
-import com.vincent.rsf.server.manager.enums.OrderType;
+import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.mapper.TransferMapper;
-import com.vincent.rsf.server.manager.service.AsnOrderItemService;
-import com.vincent.rsf.server.manager.service.TransferItemService;
-import com.vincent.rsf.server.manager.service.TransferService;
+import com.vincent.rsf.server.manager.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vincent.rsf.server.manager.service.WarehouseAreasService;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -36,9 +32,12 @@
@Autowired
private TransferItemService transferItemService;
-
@Autowired
private WarehouseAreasService warehouseAreasService;
+ @Autowired
+ private OutStockService outStockService;
+ @Autowired
+ private OutStockItemService outStockItemService;
/**
* @author Ryan
@@ -171,4 +170,67 @@
}
return this.baseMapper.transfersPage(pageParam, one.getId());
}
+
+ /**
+ * @author Ryan
+ * @date 2025/7/28
+ * @description: 璋冩嫈鍗曠敓鎴愬嚭搴撳崟
+ * @version 1.0
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Transfer genOutStock(Transfer param, Long loginUserId) {
+ Transfer transfer = this.getById(param.getId());
+ if (Objects.isNull(transfer)) {
+ throw new CoolException("鏁版嵁閿欒锛氬崟鎹笉瀛樺湪锛侊紒");
+ }
+ List<TransferItem> items = transferItemService.list(new LambdaQueryWrapper<TransferItem>().eq(TransferItem::getTransferId, transfer.getId()));
+ if (items.isEmpty()) {
+ throw new CoolException("鏁版嵁閿欒锛氳皟鎷斿崟鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+ WkOrder wkOrder = new WkOrder();
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, transfer);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("璋冩嫈鍗曞彿鐢熸垚澶辫触锛侊紒");
+ }
+
+ Double anfmes = items.stream().mapToDouble(TransferItem::getAnfme).sum();
+ wkOrder.setCode(ruleCode)
+ .setAnfme(anfmes)
+ .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val)
+ .setType(OrderType.ORDER_TRANSFER.type)
+ .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId)
+ .setCreateTime(new Date())
+ .setUpdateTime(new Date())
+ .setPoCode(transfer.getCode())
+ .setPoId(transfer.getId());
+ if (!outStockService.saveOrUpdate(wkOrder)) {
+ throw new CoolException("鍑哄簱鍗曚繚瀛樺け璐ワ紒锛�");
+ }
+
+ List<WkOrderItem> orderItems = new ArrayList<>();
+ items.forEach(item -> {
+ WkOrderItem orderItem = new WkOrderItem();
+ BeanUtils.copyProperties(item, orderItem);
+ orderItem.setOrderCode(wkOrder.getCode())
+ .setSplrBatch(item.getBatch())
+ .setSplrCode(item.getSplrCode())
+ .setSplrName(item.getSplrName())
+ .setOrderId(wkOrder.getId());
+ orderItems.add(orderItem);
+ });
+
+ if (!outStockItemService.saveBatch(orderItems)) {
+ throw new CoolException("鍑哄簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
+ }
+
+ transfer.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val);
+
+ if (!this.updateById(transfer)) {
+ throw new CoolException("璋冩嫈鍗曟洿鏂板け璐ワ紒锛�");
+ }
+ return transfer;
+ }
}
--
Gitblit v1.9.1