From 866601517e00f9f4ecf43855f28169c66b548412 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 28 三月 2025 14:19:35 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
---
rsf-admin/src/page/asnOrder/AsnOrderList.jsx | 76 ++++++++++++--
rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx | 168 +++++++++++++++------------------
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java | 3
rsf-admin/vite.config.js | 1
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java | 1
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java | 4
rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java | 9 +
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java | 37 +++++++
rsf-admin/src/page/basicInfo/loc/LocList.jsx | 1
9 files changed, 189 insertions(+), 111 deletions(-)
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
index cd9fdb1..8862faa 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
@@ -15,6 +15,7 @@
useRecordContext,
useTranslate,
useNotify,
+ useRefresh,
useListContext,
FunctionField,
TextField,
@@ -47,7 +48,7 @@
import ConstructionIcon from "@mui/icons-material/Construction";
import FileDownloadIcon from '@mui/icons-material/FileDownload';
import EditIcon from '@mui/icons-material/Edit';
-
+import request from '@/utils/request';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
@@ -107,13 +108,6 @@
navigate(`/asnOrderItem?asnId=${record.id}`);
};
-
- const inspection = () => { };
-
- const print = () => {
- };
-
-
return (
<Box display="flex">
<List
@@ -132,9 +126,6 @@
actions={(
<TopToolbar>
- <Button onClick={inspection} label={"toolbar.inspection"}>
- <ConstructionIcon />
- </Button>
<FilterButton />
<MyCreateButton onClick={() => { setCreateDialog(true); setmodalType(0) }} />
<SelectColumnsButton preferenceKey='asnOrder' />
@@ -146,7 +137,7 @@
>
<StyledDatagrid
preferenceKey='asnOrder'
- bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ bulkActionButtons={<> <InspectionsButton /><BulkDeleteButton mutationMode={OPERATE_MODE} /></>}
rowClick={(id, resource, record) => false}
expand={(e) => <AsnOrderPanel key={Math.floor(Math.random() * 100)} />}
expandSingle={true}
@@ -188,6 +179,7 @@
label={'ra.action.edit'}
>
</Button> */}
+ <InspectionButton />
<DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
</WrapperField>
</StyledDatagrid>
@@ -227,3 +219,63 @@
</Button>
)
}
+
+const InspectionButton = () => {
+ const record = useRecordContext();
+ const notify = useNotify();
+ const refresh = useRefresh();
+ const inspection = () => {
+ requestInspect([record])
+ };
+
+ const requestInspect = async (rows) => {
+ const { data: { code, data, msg } } = await request.post(`/asnOrder/inspect`, rows);
+
+ if (code === 200) {
+ notify(msg);
+ refresh()
+ } else {
+ notify(msg);
+ }
+ }
+
+
+ return (
+ <Button onClick={inspection} label={"toolbar.inspection"}>
+ <ConstructionIcon />
+ </Button>
+ )
+}
+
+const InspectionsButton = () => {
+ const { selectedIds, onUnselectItems, data } = useListContext();
+ const notify = useNotify();
+ const refresh = useRefresh();
+ const inspection = () => {
+ if (selectedIds.length === 0) {
+ notify('璇烽�夋嫨閫氱煡鍗�');
+ return;
+ } else {
+ const rows = data.filter((item) => selectedIds.includes(item.id))
+ requestInspect(rows)
+ }
+ };
+
+ const requestInspect = async (rows) => {
+ const { data: { code, data, msg } } = await request.post(`/asnOrder/inspect`, rows);
+
+ if (code === 200) {
+ notify(msg);
+ refresh()
+ } else {
+ notify(msg);
+ }
+ }
+
+
+ return (
+ <Button onClick={inspection} label={"toolbar.inspection"}>
+ <ConstructionIcon />
+ </Button>
+ )
+}
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
index 36e5df2..5d1eeb6 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
@@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect, useMemo } from "react";
-import { Box, Card, CardContent, Grid, Typography, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
+import { Box, Card, CardContent, Grid, Typography, Button, TextField, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
import {
useTranslate,
useRecordContext,
@@ -9,20 +9,24 @@
import * as Common from '@/utils/common'
import { styled } from "@mui/material/styles";
import request from '@/utils/request';
+import debounce from 'lodash/debounce';
+import { DataGrid } from '@mui/x-data-grid';
const AsnOrderPanel = () => {
const record = useRecordContext();
if (!record) return null;
const translate = useTranslate();
const notify = useNotify();
const [rows, setRows] = useState([]);
+ const [maktx, setMaktx] = useState('');
const asnId = record.id;
useEffect(() => {
- http();
- }, [asnId]);
+ debouncedHttp({ maktx });
+ }, [asnId, maktx]);
- const http = async () => {
- const res = await request.post('/asnOrderItem/page', { asnId });
+
+ const http = async (parmas) => {
+ const res = await request.post('/asnOrderItem/page', { ...parmas, asnId });
if (res?.data?.code === 200) {
setRows(res.data.data.records)
} else {
@@ -30,6 +34,7 @@
}
}
+ const debouncedHttp = useMemo(() => debounce(http, 300), []);
const StyledTableRow = styled(TableRow)(({ theme }) => ({
"& .MuiButtonBase-root.": {
@@ -49,130 +54,113 @@
const columns = [
{
- id: 'asnId',
- label: 'table.field.asnOrderItem.asnId',
- minWidth: 100,
+ field: 'asnId',
+ headerName: translate('table.field.asnOrderItem.asnId')
},
{
- id: 'asnCode',
- label: 'table.field.asnOrderItem.asnCode',
- minWidth: 100,
+ field: 'asnCode',
+ headerName: translate('table.field.asnOrderItem.asnCode')
},
{
- id: 'poDetlId',
- label: 'table.field.asnOrderItem.poDetlId',
- minWidth: 100,
+ field: 'poDetlId',
+ headerName: translate('table.field.asnOrderItem.poDetlId')
},
{
- id: 'poDetlCode',
- label: 'table.field.asnOrderItem.poDetlCode',
- minWidth: 100,
+ field: 'poDetlCode',
+ headerName: translate('table.field.asnOrderItem.poDetlCode')
},
{
- id: 'matnrId',
- label: 'table.field.asnOrderItem.matnrId',
- minWidth: 100,
+ field: 'matnrId',
+ headerName: translate('table.field.asnOrderItem.matnrId')
},
{
- id: 'maktx',
- label: 'table.field.asnOrderItem.maktx',
- minWidth: 100,
+ field: 'maktx',
+ headerName: translate('table.field.asnOrderItem.maktx')
},
{
- id: 'anfme',
- label: 'table.field.asnOrderItem.anfme',
- minWidth: 100,
+ field: 'anfme',
+ headerName: translate('table.field.asnOrderItem.anfme')
},
{
- id: 'stockUnit',
- label: 'table.field.asnOrderItem.stockUnit',
- minWidth: 100,
+ field: 'stockUnit',
+ headerName: translate('table.field.asnOrderItem.stockUnit')
},
{
- id: 'purQty',
- label: 'table.field.asnOrderItem.purQty',
- minWidth: 100,
+ field: 'purQty',
+ headerName: translate('table.field.asnOrderItem.purQty')
},
{
- id: 'purUnit',
- label: 'table.field.asnOrderItem.purUnit',
- minWidth: 100,
+ field: 'purUnit',
+ headerName: translate('table.field.asnOrderItem.purUnit')
},
{
- id: 'qty',
- label: 'table.field.asnOrderItem.qty',
- minWidth: 100,
+ field: 'qty',
+ headerName: translate('table.field.asnOrderItem.qty')
},
{
- id: 'splrCode',
- label: 'table.field.asnOrderItem.splrCode',
- minWidth: 100,
+ field: 'splrCode',
+ headerName: translate('table.field.asnOrderItem.splrCode')
},
{
- id: 'splrName',
- label: 'table.field.asnOrderItem.splrName',
- minWidth: 100,
+ field: 'splrName',
+ headerName: translate('table.field.asnOrderItem.splrName')
},
{
- id: 'qrcode',
- label: 'table.field.asnOrderItem.qrcode',
- minWidth: 100,
+ field: 'barcode',
+ headerName: translate('table.field.asnOrderItem.barcode')
},
{
- id: 'barcode',
- label: 'table.field.asnOrderItem.barcode',
- minWidth: 100,
- },
- {
- id: 'packName',
- label: 'table.field.asnOrderItem.packName',
- minWidth: 100,
+ field: 'packName',
+ headerName: translate('table.field.asnOrderItem.packName')
}]
+
+ const [selectedRows, setSelectedRows] = useState([]);
+
+ const handleSelectionChange = (ids) => {
+ setSelectedRows(ids)
+
+ };
+ const maktxChange = (value) => {
+ setMaktx(value)
+ }
+
+ const wakbarcode = () => {
+
+ }
+
+ const wakprint = () => {
+
+ }
return (
-
<Box sx={{
position: 'relative',
padding: '5px 10px'
}}>
- <TableContainer component={Paper} >
- <Table size="small" >
- <TableHead>
- <StyledTableRow key={'head'}>
- {columns.map((column, idx) => {
- const value = column.label;
- return (
- <>
- <StyledTableCell
- key={column.id}
- align={column.align || "left"}
- // style={{ paddingLeft: idx === 0 && (depth * 16 + 16) }}
- >
- {column.format ? column.format(value) : translate(value)}
- </StyledTableCell>
- </>
- );
- })}
- </StyledTableRow>
- </TableHead>
+ <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '4px', alignItems: 'center' }}>
+ <TextField value={maktx} onChange={(e) => maktxChange(e.target.value)} label="鎼滅储鐗╂枡" variant="outlined" sx={{ width: '300px' }} />
- <TableBody>
- {rows.map((row) => (
- <StyledTableRow key={row.id + Math.random()}>
- {columns.map((column) => (
- <StyledTableCell key={column.id} >
- {row[column.id]}
- </StyledTableCell>
- ))}
- </StyledTableRow>
- ))}
+ <div style={{ display: 'flex', gap: '10px' }}>
+ <Button variant="contained" onClick={wakbarcode}>鐢熸垚鏉$爜</Button>
+ <Button variant="contained" onClick={wakprint}>鎵撳嵃</Button>
+ </div>
+ </div>
- </TableBody>
- </Table>
- </TableContainer>
- </Box>
+
+ <DataGrid
+ size="small"
+ rows={rows}
+ columns={columns}
+ checkboxSelection
+ onRowSelectionModelChange={handleSelectionChange}
+ selectionModel={selectedRows}
+ disableColumnMenu={true}
+ disableColumnSorting
+ disableMultipleColumnsSorting
+ />
+ </Box >
);
};
diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
index b425f38..c6a9228 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
@@ -311,7 +311,6 @@
const notify = useNotify();
const refresh = useRefresh();
-
const [createDialog, setCreateDialog] = useState(false);
return (
diff --git a/rsf-admin/vite.config.js b/rsf-admin/vite.config.js
index ced449c..76153c8 100644
--- a/rsf-admin/vite.config.js
+++ b/rsf-admin/vite.config.js
@@ -15,6 +15,7 @@
server: {
port: 8122,
host: '0.0.0.0',
+ open: true,
// available in run dev
proxy: {
'/rsf-server': {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index 991e021..a44caf1 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -9,6 +9,7 @@
import com.vincent.rsf.server.manager.service.*;
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.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -98,7 +99,10 @@
if (Objects.isNull(matnr)) {
throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪!!");
}
-// //TODO barcode鐢熸垚绛栫暐
+ String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, item);
+ if (StringUtils.isBlank(trackCode)) {
+ throw new CoolException("鍗曟嵁璺熻釜鐮佺敓鎴愬け璐ワ細璇锋鏌ャ�宻ys_asn_mantr_label銆嶆槸鍚﹂厤缃畬鎴愶紒锛�");
+ }
// String barcode = code + matnr.getCode();
orderItem.setAnfme(item.getAnfme())
.setAsnId(order.getId())
@@ -108,10 +112,11 @@
.setSplrCode(item.getSplrCode())
.setPoDetlId(item.getId())
.setPlatItemId(item.getPlatItemId())
-// .setBarcode(barcode)
+ .setTrackCode(trackCode)
.setPoCode(purchase.getCode())
.setPurQty(item.getAnfme())
.setPurUnit(item.getUnit())
+ .setMatnrCode(matnr.getCode())
.setMaktx(matnr.getName())
.setMatnrId(matnr.getId() + "");
orderItems.add(orderItem);
@@ -130,4 +135,32 @@
});
}
+
+ /**
+ * 鐢熸垚鐗╂枡鏍囩
+ */
+ @Scheduled(cron = "0 0/05 * * * ? ")
+ @Transactional(rollbackFor = Exception.class)
+ public void generateMatnrLabel() {
+ List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
+ .isNull(AsnOrderItem::getTrackCode)
+ .select(AsnOrderItem::getId));
+ if (Objects.isNull(list) || list.isEmpty()) {
+ return;
+ }
+ List<AsnOrderItem> items = new ArrayList<>();
+ list.forEach(item -> {
+ String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, item);
+ if (StringUtils.isBlank(trackCode)) {
+ throw new CoolException("鍗曟嵁璺熻釜鐮佺敓鎴愬け璐ワ細璇锋鏌ャ�宻ys_asn_mantr_label銆嶆槸鍚﹂厤缃畬鎴愶紒锛�");
+ }
+ item.setTrackCode(trackCode);
+ items.add(item);
+ });
+
+ if (!asnOrderItemService.updateBatchById(items)) {
+ throw new CoolException("鐢熸垚缂栫爜澶辫触锛侊紒");
+ }
+ }
+
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
index 99cb110..917d504 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -106,6 +106,9 @@
//淇濆瓨鎵╁睍瀛楁
ExtendFieldsUtils.saveFields(params);
AsnOrderItem asnOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), AsnOrderItem.class);
+ if (StringUtils.isBlank(asnOrderItem.getTrackCode())) {
+ SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, params);
+ }
if (!this.saveOrUpdate(asnOrderItem)) {
throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 27e33ef..ca6d9a9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -108,7 +108,6 @@
item.put("asnId", orders.getId());
item.put("asnCode", orders.getCode());
item.put("poCode", orders.getPoCode());
-
if (!asnOrderItemService.fieldsSave(item)) {
throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
index d5578a6..5c8fb89 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
@@ -25,9 +25,9 @@
public final static String SYS_RECEIPT_BATCH = "sys_receipt_batch";
/**
- * ASN鏍囩鐢熸垚瑙勫垯
+ * ASN鐗╂枡鏍囩鐢熸垚瑙勫垯
*/
- public final static String SYS_LABEL_CODE = "sys_label_code";
+ public final static String SYS_LABEL_CODE = "sys_asn_mantr_label";
/**
* 璐ㄦ鍗曚笟鍔$被鍨�
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
index 4f37cc8..9e977d0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
@@ -50,7 +50,7 @@
.list(new LambdaQueryWrapper<SerialRuleItem>()
.eq(SerialRuleItem::getRuleId, serialRule.getId())
.orderByAsc(SerialRuleItem::getSort));
- if (Objects.isNull(ruleItems)) {
+ if (Objects.isNull(ruleItems) || ruleItems.isEmpty()) {
throw new CoolException("缂栫爜瑙勫垯鏄庣粏涓虹┖锛侊紒");
}
@@ -83,8 +83,11 @@
//鍒ゆ柇鏄惁璁剧疆鎴彇闀垮害鍜岃捣濮嬫埅鍙栦綅缃�
buffer.append(subStr(format, rule.getLenStr(), rule.getLen()));
} else if (rule.getWkType().equals(SerialRuleType.WK_FEILD.wkType)) {
- String subStr = subStr(objectToMap(obj).get(rule.getFeildValue()).toString(), rule.getLenStr(), rule.getLen());
- buffer.append(subStr);
+ String subStr;
+ if (!Objects.isNull(objectToMap(obj).get(rule.getFeildValue()))) {
+ subStr = subStr(objectToMap(obj).get(rule.getFeildValue()).toString(), rule.getLenStr(), rule.getLen());
+ buffer.append(subStr);
+ }
}
});
--
Gitblit v1.9.1