From aecc30be4f72119829bf7f607aa6031e15fc3c0c Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期三, 30 七月 2025 08:01:28 +0800
Subject: [PATCH] 调拔单功能优化
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java | 7
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java | 90 ++++++++++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java | 112 +++++++++++-------
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java | 15 ++
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java | 30 +++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java | 4
rsf-admin/src/page/orders/transfer/ManualCreate.jsx | 7
rsf-admin/src/page/components/WarehouseSelect.jsx | 2
rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx | 44 ++----
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java | 4
rsf-admin/src/page/orders/transfer/TransferOrders.jsx | 18 ++
11 files changed, 243 insertions(+), 90 deletions(-)
diff --git a/rsf-admin/src/page/components/WarehouseSelect.jsx b/rsf-admin/src/page/components/WarehouseSelect.jsx
index 54a9613..33ead33 100644
--- a/rsf-admin/src/page/components/WarehouseSelect.jsx
+++ b/rsf-admin/src/page/components/WarehouseSelect.jsx
@@ -16,7 +16,7 @@
}, [dictTypeCode]);
const http = async () => {
- const res = await request.post('/warehouseAreas/page', {});
+ const res = await request.post('/warehouseAreas/page', {current: 1, pageSize: 100});
if (res?.data?.code === 200) {
setList(res.data.data.records.map((item) => {
return {
diff --git a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
index d61da62..78f7014 100644
--- a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
+++ b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
@@ -69,9 +69,8 @@
const reset = () => {
setFormData({
- name: '',
- code: '',
- groupId: 0
+ maktx: '',
+ matnrCode: '',
})
}
@@ -98,14 +97,14 @@
};
const getData = async () => {
- const res = await request.post(`/matnr/page`, {
+ const res = await request.post(`/transfer/locs/items`, {
...formData,
current: page,
pageSize: pageSize,
orderBy: "create_time desc"
});
if (res?.data?.code === 200) {
- const {data} = res.data;
+ const { data } = res.data;
setTableData(data?.records);
setRowCount(data?.total);
} else {
@@ -147,8 +146,8 @@
<Grid item md={3}>
<TextField
label={translate('table.field.matnr.name')}
- name="name"
- value={formData.name}
+ name="maktx"
+ value={formData.maktx}
onChange={handleChange}
size="small"
/>
@@ -156,20 +155,10 @@
<Grid item md={3}>
<TextField
label={translate('table.field.matnr.code')}
- name="code"
- value={formData.code}
+ name="matnrCode"
+ value={formData.matnrCode}
onChange={handleChange}
size="small"
- />
- </Grid>
- <Grid item md={3}>
- <TreeSelectInput
- label="table.field.matnr.groupId"
- value={formData.groupId}
- resource={'matnrGroup'}
- source="groupId"
- name="groupId"
- onChange={handleChange}
/>
</Grid>
<Grid item md={2} sx={{ margin: 'auto' }}>
@@ -208,24 +197,21 @@
export default CreateBySelectMats;
-const SelectMatsTableView = ({ tableData, page, pageSize,setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
+const SelectMatsTableView = ({ tableData, page, pageSize, setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
const translate = useTranslate();
const notify = useNotify();
const [extendColumns, setExtendColumns] = useState([]);
const [columns, setColumns] = useState([
- { field: 'name', headerName: translate('table.field.matnr.name'), width: 300 },
- { field: 'code', headerName: translate('table.field.matnr.code'), width: 200 },
- { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 },
+ { field: 'maktx', headerName: translate('table.field.matnr.name'), width: 300 },
+ { field: 'matnrCode', headerName: translate('table.field.matnr.code'), width: 200 },
+ // { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 },
{ field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 },
+ { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 },
{ field: 'model', headerName: translate('table.field.matnr.model'), width: 100 },
- { field: 'weight', headerName: translate('table.field.matnr.weight'), width: 100 },
- { field: 'describle', headerName: translate('table.field.matnr.describle'), width: 100 },
- { field: 'nromNum', headerName: translate('table.field.matnr.nromNum'), width: 100 },
+ { field: 'anfme', headerName: translate('table.field.locItem.anfme'), width: 100 },
{ field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 },
- { field: 'purchaseUnit', headerName: translate('table.field.matnr.purUnit'), width: 100 },
- { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 },
- { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false },
+ { field: 'wareArea', headerName: translate('table.field.locItem.wareArea'), width: 100, sortable: false },
])
const handleSelectionChange = (ids) => {
diff --git a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
index a74fe34..f774644 100644
--- a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
+++ b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
@@ -344,24 +344,22 @@
},
{
field: 'anfme',
- headerName: translate('table.field.outStockItem.anfme') + "*",
+ headerName: translate('table.field.outStockItem.anfme'),
type: 'number',
minWidth: 100,
flex: 1,
editable: true,
valueFormatter: (val) => val < 0 ? 0 : val,
- headerClassName: "custom",
},
{
field: 'splrCode',
- headerName: translate('table.field.outStockItem.splrCode') + "*",
+ headerName: translate('table.field.outStockItem.splrCode'),
minWidth: 100,
flex: 1,
editable: true,
renderEditCell: (params) => (
<SelectInputSplrCodeEditCell {...params} />
),
- headerClassName: "custom",
},
{
field: 'splrName',
@@ -372,7 +370,6 @@
renderEditCell: (params) => (
<SelectInputSplrNameEditCell {...params} />
),
- headerClassName: "custom",
},
{
field: 'batch',
diff --git a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
index 6ab3f0c..33835a6 100644
--- a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
+++ b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
@@ -11,6 +11,7 @@
WrapperField,
useRecordContext,
DatagridConfigurable,
+ useRedirect,
} from 'react-admin';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting.js';
@@ -40,6 +41,7 @@
}));
const TransferOrders = () => {
+ const redirct = useRedirect();
const record = useRecordContext();
if (!record) return null;
const translate = useTranslate();
@@ -65,12 +67,18 @@
perPage={DEFAULT_PAGE_SIZE}
>
<StyledDatagrid
- sx={{ width: '100%' }}
+ sx={{ margin: 'auto', width: '98%' }}
preferenceKey='outStock'
bulkActionButtons={false}
- rowClick={false}
+ rowClick={(id, resource, record) => {
+ if (record.type == 'out') {
+ redirct("/outStock")
+ } else if (record.type == 'in') {
+ redirct("/asnOrder")
+ }
+ }}
expandSingle={true}
- omit={['id', 'createTime', 'createBy$', 'memo']}
+ omit={['id', 'memo']}
>
<NumberField source="id" />
<TextField source="code" label="table.field.transferOrder.code" />
@@ -80,10 +88,10 @@
<NumberField source="anfme" label="table.field.transferOrder.anfme" />
<NumberField source="workQty" label="table.field.transferOrder.workQty" />
<NumberField source="qty" label="table.field.transferOrder.qty" />
- <TextField source="updateBy$" label="common.field.updateBy" />
- <DateField source="updateTime" label="common.field.updateTime" showTime />
<TextField source="createBy$" label="common.field.createBy" />
+ <TextField source="updateBy$" label="common.field.updateBy" />
<DateField source="createTime" label="common.field.createTime" showTime />
+ <DateField source="updateTime" label="common.field.updateTime" showTime />
<BillStatusField cellClassName="status" source="exceStatus" label="table.field.outStock.exceStatus" />
<TextField source="memo" label="common.field.memo" sortable={false} />
</StyledDatagrid>
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 3842fd6..526ab46 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
@@ -11,6 +11,7 @@
import com.vincent.rsf.server.common.domain.KeyValVo;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
+import com.vincent.rsf.server.manager.controller.params.OrgLocParams;
import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
import com.vincent.rsf.server.manager.entity.Transfer;
import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
@@ -154,7 +155,7 @@
@ApiOperation("鍗曟嵁淇℃伅淇敼")
@PostMapping("/transfer/items/update")
- @PreAuthorize("hasAuthority('manager:outStock:update')")
+ @PreAuthorize("hasAuthority('manager:transfer:update')")
public R orderAndrItemUpdate(@RequestBody TransferItemParams params) throws Exception {
if (Objects.isNull(params)) {
return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
@@ -163,6 +164,18 @@
}
+ @ApiOperation("鑾峰彇鍘熷簱鍖虹墿鏂欎俊鎭�")
+ @PostMapping("/transfer/locs/items")
+ @PreAuthorize("hasAuthority('manager:transfer:list')")
+ public R locsPage(@RequestBody OrgLocParams params) throws Exception {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ return R.ok().add(transferService.getLocsItems(params, getLoginUserId()));
+ }
+
+
+
/**
* @author Ryan
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java
new file mode 100644
index 0000000..8f327e6
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java
@@ -0,0 +1,30 @@
+package com.vincent.rsf.server.manager.controller.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "OrgLocParams", description = "鍘熷簱鍖虹墿鏂�")
+public class OrgLocParams implements Serializable {
+
+ @ApiModelProperty("鍘熷簱鍖篒D")
+ private Long orgAreaId;
+
+ @ApiModelProperty("褰撳墠椤�")
+ private Integer current;
+
+ @ApiModelProperty("鐗╂枡缂栫爜")
+ private String matnrCode;
+
+ @ApiModelProperty("鐗╂枡鍚嶇О")
+ private String maktx;
+
+ @ApiModelProperty("褰撳墠椤垫暟")
+ private Integer pageSize;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java
index 18eb434..38b9c5f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java
@@ -20,13 +20,12 @@
@TableId(value = "id", type = IdType.AUTO)
private Long id;
+ @ApiModelProperty("鍗曟嵁绫诲瀷锛歩n: 鍏ュ簱锛� out:鍑哄簱")
+ private String type;
+
@ApiModelProperty("璋冩嫈鍗旾D")
private Long transferId;
@ApiModelProperty("璁㈠崟ID")
private Long orderId;
-
- @ApiModelProperty("鎵ц鐘舵��")
- private Integer exceStatus;
-
}
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 8f8efb7..405ef34 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
@@ -57,6 +57,8 @@
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;
+ } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.desc)) {
+ return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type;
}
return null;
}
@@ -86,6 +88,8 @@
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;
+ } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)) {
+ return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.desc;
}
return null;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index d74fa92..cba0f0e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -13,8 +13,10 @@
import com.vincent.rsf.server.manager.service.impl.TransferOrderServiceImpl;
import com.vincent.rsf.server.manager.utils.LocManageUtil;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.entity.Config;
import com.vincent.rsf.server.system.service.ConfigService;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import com.vincent.rsf.server.system.utils.SystemAuthUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -92,6 +94,7 @@
* @version 1.0
*/
@Scheduled(cron = "0/5 * * * * ? ")
+ @Transactional(rollbackFor = Exception.class)
public void complateOutStock() throws Exception {
List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
.eq(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
@@ -118,7 +121,7 @@
* @version 1.0
*/
@Transactional(rollbackFor = Exception.class)
- public void genInStock(List<TaskItem> taskItems) {
+ public void genInStock(List<TaskItem> taskItems) throws Exception {
Set<Long> orderIds = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet());
List<WkOrder> wkOrders = outStockService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, orderIds));
wkOrders.forEach(wkOrder -> {
@@ -126,10 +129,21 @@
if (!orderItems.isEmpty()) {
WkOrder order = new WkOrder();
BeanUtils.copyProperties(wkOrder, order);
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, order);
+ if (StringUtils.isNotBlank(ruleCode)) {
+ throw new CoolException("鍏ュ簱鍗曞彿鐢熸垚澶辫触锛侊紒");
+ }
order.setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)
.setId(null)
- .setType(OrderType.ORDER_IN.type)
- .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val);
+ .setCode(ruleCode)
+ .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val)
+ .setType(OrderType.ORDER_IN.type);
+// Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.DIRECT_WAIT_PAKIN));
+// if (!Boolean.parseBoolean(config.getVal())) {
+// order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val);
+// } else {
+// order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val);
+// }
if (!asnOrderService.save(order)) {
throw new CoolException("鍏ュ簱鍗曠敓鎴愬け璐ワ紒锛�");
}
@@ -140,50 +154,60 @@
throw new CoolException("鍏ュ簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
}
});
+
+ Transfer transfer = transferService.getById(order.getPoId());
+
+ TransferOrder transferOrder = new TransferOrder();
+ transferOrder.setOrderId(order.getId())
+ .setType(OrderType.ORDER_IN.type)
+ .setTransferId(transfer.getId());
+ if (!transferOrderService.save(transferOrder)) {
+ throw new CoolException("鍏宠仈鍗曚繚瀛樺け璐ワ紒锛�");
+ }
}
});
- Set<Long> taskIds = taskItems.stream().map(TaskItem::getTaskId).collect(Collectors.toSet());
- List<Task> tasks = taskService.listByIds(taskIds);
- if (!tasks.isEmpty()) {
- tasks.forEach(task -> {
- TaskItem one = taskItemService.getOne(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()), false);
- if (Objects.isNull(one)) {
- throw new CoolException("鏁版嵁閿欒锛氫换鍔℃槑缁嗕涪澶憋紒锛�");
- }
- TransferOrder order = transferOrderService.getOne(new LambdaQueryWrapper<TransferOrder>().eq(TransferOrder::getOrderId, one.getOrderId()));
- if (Objects.isNull(order)) {
- throw new CoolException("鏁版嵁閿欒锛侊紒");
- }
- Transfer transfer = transferService.getById(order.getTransferId());
- Task task1 = new Task();
- BeanUtils.copyProperties(task, task1);
- String targetLoc = LocManageUtil.getTargetLoc(transfer.getTarAreaId());
- if (Objects.isNull(targetLoc)) {
- throw new CoolException("鏈兘鎵惧埌鏈夋晥搴撲綅");
- }
- task.setTaskType(TaskType.TASK_TYPE_IN.type)
- .setTargLoc(targetLoc)
- .setTargSite(null)
- .setId(null)
- .setTaskStatus(TaskStsType.GENERATE_IN.id);
- if (!taskService.save(task1)) {
- throw new CoolException("浠诲姟鐢熸垚澶辫触锛侊紒");
- }
- List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
- if (items.isEmpty()) {
- throw new CoolException("鏁版嵁閿欒锛侊紒");
- }
- items.forEach(taskItem -> {
- TaskItem item = new TaskItem();
- BeanUtils.copyProperties(taskItem, item);
- item.setTaskId(task1.getId()).setId(null);
- if (!taskItemService.save(item)) {
- throw new CoolException("鍏ュ簱浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒");
- }
- });
- });
- }
+// Set<Long> taskIds = taskItems.stream().map(TaskItem::getTaskId).collect(Collectors.toSet());
+// List<Task> tasks = taskService.listByIds(taskIds);
+// if (!tasks.isEmpty()) {
+// tasks.forEach(task -> {
+// TaskItem one = taskItemService.getOne(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()), false);
+// if (Objects.isNull(one)) {
+// throw new CoolException("鏁版嵁閿欒锛氫换鍔℃槑缁嗕涪澶憋紒锛�");
+// }
+// TransferOrder order = transferOrderService.getOne(new LambdaQueryWrapper<TransferOrder>().eq(TransferOrder::getOrderId, one.getOrderId()));
+// if (Objects.isNull(order)) {
+// throw new CoolException("鏁版嵁閿欒锛侊紒");
+// }
+// Transfer transfer = transferService.getById(order.getTransferId());
+// Task task1 = new Task();
+// BeanUtils.copyProperties(task, task1);
+// String targetLoc = LocManageUtil.getTargetLoc(transfer.getTarAreaId());
+// if (Objects.isNull(targetLoc)) {
+// throw new CoolException("鏈兘鎵惧埌鏈夋晥搴撲綅");
+// }
+// task.setTaskType(TaskType.TASK_TYPE_IN.type)
+// .setTargLoc(targetLoc)
+// .setTargSite(null)
+// .setId(null)
+// .setTaskStatus(TaskStsType.GENERATE_IN.id);
+// if (!taskService.save(task1)) {
+// throw new CoolException("浠诲姟鐢熸垚澶辫触锛侊紒");
+// }
+// List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+// if (items.isEmpty()) {
+// throw new CoolException("鏁版嵁閿欒锛侊紒");
+// }
+// items.forEach(taskItem -> {
+// TaskItem item = new TaskItem();
+// BeanUtils.copyProperties(taskItem, item);
+// item.setTaskId(task1.getId()).setId(null);
+// if (!taskItemService.save(item)) {
+// throw new CoolException("鍏ュ簱浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒");
+// }
+// });
+// });
+// }
}
/**
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 a1e37d4..8bfb44d 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
@@ -6,7 +6,9 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.controller.params.OrgLocParams;
import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
+import com.vincent.rsf.server.manager.entity.LocItem;
import com.vincent.rsf.server.manager.entity.Transfer;
import com.vincent.rsf.server.manager.entity.WkOrder;
@@ -23,5 +25,7 @@
Transfer genOutStock(Transfer transfer, Long loginUserId);
boolean removeTransfer(List<Long> list);
+
+ IPage<LocItem> getLocsItems(OrgLocParams params, 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 2a64db5..2749343 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
@@ -3,11 +3,13 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.common.domain.PageResult;
+import com.vincent.rsf.server.manager.controller.params.OrgLocParams;
import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.*;
@@ -40,6 +42,14 @@
private TransferOrderService transferOrderService;
@Autowired
private TransferService transferService;
+ @Autowired
+ private AsnOrderService asnOrderService;
+ @Autowired
+ private AsnOrderItemService asnOrderItemService;
+ @Autowired
+ private LocItemService locItemService;
+ @Autowired
+ private LocService locService;
/**
* @author Ryan
@@ -239,13 +249,66 @@
}
TransferOrder transferOrder = new TransferOrder();
- transferOrder.setTransferId(transfer.getId()).setOrderId(wkOrder.getId()).setExceStatus((int)CheckExceStatus.CHECK_ORDER_STATUS_INIT.val);
+ transferOrder.setTransferId(transfer.getId())
+ .setOrderId(wkOrder.getId())
+ .setType(OrderType.ORDER_OUT.type);
if (!transferOrderService.save(transferOrder)) {
throw new CoolException("鍗曟嵁鍏宠仈澶辫触锛侊紒");
}
+ try {
+ /**鐢熸垚鍏ュ簱鍗曟嵁淇℃伅*/
+ genInStock(wkOrder, orderItems);
+ } catch (Exception e) {
+ throw new CoolException(e.getMessage());
+ }
+
return transfer;
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/7/29
+ * @description: TODO
+ * @version 1.0
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void genInStock(WkOrder wkOrder, List<WkOrderItem> orderItems) throws Exception {
+ WkOrder order = new WkOrder();
+ BeanUtils.copyProperties(wkOrder, order);
+ order.setType(OrderType.ORDER_IN.type)
+ .setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)
+ .setId(null);
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, order);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("鍏ュ簱鍗曞彿鐢熸垚澶辫触锛侊紒");
+ }
+ order.setCode(ruleCode);
+
+ if (!asnOrderService.save(order)) {
+ throw new CoolException("鍗曟嵁淇濆瓨澶辫触锛侊紒");
+ }
+
+ orderItems.forEach(item -> {
+ item.setOrderId(order.getId())
+ .setOrderCode(order.getCode())
+ .setId(null);
+
+ if (!asnOrderItemService.save(item)) {
+ throw new CoolException("鍏ュ簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
+ }
+ });
+
+ TransferOrder transferOrder = new TransferOrder();
+ transferOrder.setTransferId(wkOrder.getPoId())
+ .setOrderId(order.getId())
+ .setType(OrderType.ORDER_IN.type);
+
+ if (!transferOrderService.save(transferOrder)) {
+ throw new CoolException("鍗曟嵁鍏宠仈澶辫触锛侊紒");
+ }
+
}
/**
@@ -273,4 +336,29 @@
transferItemService.remove(new LambdaQueryWrapper<TransferItem>().in(TransferItem::getTransferId, list));
return true;
}
+
+ /**
+ * @author Ryan
+ * @date 2025/7/29
+ * @description: 鑾峰彇鍘熷簱鍖虹墿鏂欎俊鎭�
+ * @version 1.0
+ */
+ @Override
+ public IPage<LocItem> getLocsItems(OrgLocParams params, Long loginUserId) {
+ List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>()
+ .eq(!Objects.isNull(params.getOrgAreaId()), Loc::getAreaId, params.getOrgAreaId()));
+
+ Page<LocItem> page = new Page<>(params.getCurrent(), params.getPageSize());
+ LambdaQueryWrapper<LocItem> wrapper = new LambdaQueryWrapper<>();
+
+ wrapper.eq(StringUtils.isNotBlank(params.getMatnrCode()), LocItem::getMatnrCode, params.getMatnrCode().trim())
+ .like(StringUtils.isNotBlank(params.getMaktx().trim()), LocItem::getMaktx, params.getMaktx().trim());
+ if (!locs.isEmpty()) {
+ Set<Long> locIds = locs.stream().map(Loc::getId).collect(Collectors.toSet());
+ wrapper.in(LocItem::getLocId, locIds);
+ return locItemService.page(page, wrapper);
+ } else {
+ return locItemService.page(page, wrapper);
+ }
+ }
}
--
Gitblit v1.9.1