From ee608e161f17082b9fd6e1ed236214a0ac5c2f0e Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期五, 02 五月 2025 17:55:09 +0800
Subject: [PATCH] Asn订单功优化
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java | 10 +++++
rsf-admin/src/page/components/ImportButton.jsx | 2
rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx | 6 ++-
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java | 58 ++++++++++++++++++++--------
rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx | 9 +++-
rsf-admin/src/page/components/ImportModal.jsx | 8 +--
rsf-admin/src/i18n/core/chineseMessages.js | 2
rsf-admin/src/i18n/zh.js | 7 ++-
rsf-admin/src/i18n/en.js | 5 ++
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java | 10 ++++-
10 files changed, 83 insertions(+), 34 deletions(-)
diff --git a/rsf-admin/src/i18n/core/chineseMessages.js b/rsf-admin/src/i18n/core/chineseMessages.js
index d61dfd5..55cf186 100644
--- a/rsf-admin/src/i18n/core/chineseMessages.js
+++ b/rsf-admin/src/i18n/core/chineseMessages.js
@@ -85,7 +85,7 @@
auth_error:
"An error occurred while validating the authentication token.",
bulk_delete_content:
- "Are you sure you want to delete this %{name}? |||| Are you sure you want to delete these %{smart_count} items?",
+ "纭畾瑕佸垹闄よ繖涓� %{name}? |||| 纭瑕佸垹闄よ繖浜� %{smart_count} 鏄庣粏?",
bulk_delete_title: "鍒犻櫎 %{name} |||| 鍒犻櫎 %{smart_count} %{name}",
bulk_update_content:
"Are you sure you want to update this %{name}? |||| Are you sure you want to update these %{smart_count} items?",
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index d569c3d..a58cbe5 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -576,6 +576,8 @@
poDetlCode: "poDetlCode",
matnrId: "matnrId",
maktx: "maktx",
+ spec: "Spec",
+ model: "Model",
anfme: "anfme",
stockUnit: "stockUnit",
purQty: "purQty",
@@ -1033,7 +1035,8 @@
},
request: {
error: {
- stock: "Insufficient inventory to deliver 锛侊紒"
+ stock: "Insufficient inventory to deliver 锛侊紒",
+ select_error_order: "Please Select Asn Orders",
}
}
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index cd137a4..6cb7348 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -565,6 +565,8 @@
poDetlCode: "PO鍗�",
matnrId: "鐗╂枡鏍囪瘑",
maktx: "鐗╂枡鍚嶇О",
+ spec: "瑙勬牸",
+ model: "鍨嬪彿",
matnrCode: "鐗╂枡缂栫爜",
anfme: "璁″垝鏀惰揣鏁�",
stockUnit: "搴撳瓨鍗曚綅",
@@ -611,7 +613,7 @@
poId: "PO鏍囪瘑",
type: "鍗曟嵁绫诲瀷",
wkType: "涓氬姟绫诲瀷",
- anfme: "鏁伴噺",
+ anfme: "璁″垝鏁伴噺",
qty: "宸插畬鎴愭暟閲�",
logisNo: "鐗╂祦鍗曞彿",
arrTime: "棰勮鍒拌揪鏃堕棿",
@@ -1048,7 +1050,8 @@
},
request: {
error: {
- stock: "搴撳瓨涓嶈冻锛屾棤娉曟彁浜わ紒锛�"
+ stock: "搴撳瓨涓嶈冻锛屾棤娉曟彁浜わ紒锛�",
+ select_error_order: "璇烽�夋嫨閫氱煡鍗�",
}
}
diff --git a/rsf-admin/src/page/components/ImportButton.jsx b/rsf-admin/src/page/components/ImportButton.jsx
index 147ec9e..3b6e7a4 100644
--- a/rsf-admin/src/page/components/ImportButton.jsx
+++ b/rsf-admin/src/page/components/ImportButton.jsx
@@ -4,7 +4,7 @@
import ImportModal from './ImportModal';
const ImportButton = (props) => {
- const [modalOpen, setModalOpen] = useState(false);
+ const [modalOpen, setModalOpen, refresh, notify] = useState(false);
const handleOpenModal = () => {
setModalOpen(true);
diff --git a/rsf-admin/src/page/components/ImportModal.jsx b/rsf-admin/src/page/components/ImportModal.jsx
index 703a018..71328ff 100644
--- a/rsf-admin/src/page/components/ImportModal.jsx
+++ b/rsf-admin/src/page/components/ImportModal.jsx
@@ -22,7 +22,7 @@
import MatnrList from '../basicInfo/matnr/MatnrList';
import request from '@/utils/request'
-const ImportModal = ({ open, onClose, importTemp, useCodeImport, onceBatch = 10, value, parmas = {} }) => {
+const ImportModal = ({ open, onClose, importTemp, useCodeImport, onceBatch = 10, value, parmas = {}}) => {
const refresh = useRefresh();
const translate = useTranslate();
@@ -57,17 +57,15 @@
}
form.append('file', file);
const { data: { code, data, msg } } = await request.post(`/${value}/import`, form)
-
if (code === 200) {
handleClose()
+ notify(msg);
+ refresh()
} else {
notify(msg);
-
}
};
-
-
const handleClose = () => {
reset();
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
index a34f785..177912b 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
@@ -115,7 +115,7 @@
marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
}}
title={"menu.asnOrderItem"}
- empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+ empty={false}
filter={{ asnId: asnId, deleted: 0 }}
filters={filters}
sort={{ field: "create_time", order: "desc" }}
@@ -136,7 +136,7 @@
setSelect(record)
setEditDialog(true)
}}
- omit={['id', 'createTime', 'purQty','purUnit', 'createBy', 'memo', 'poDetlId', 'matnrId', 'asnId']}
+ omit={['id', 'createTime', 'purQty','purUnit','poDetlCode', 'createBy', 'memo', 'packName','poDetlId', 'matnrId', 'asnId']}
>
<NumberField source="id" />
<NumberField source="asnId" label="table.field.asnOrderItem.asnId" />
@@ -146,6 +146,8 @@
<TextField source="matnrId" label="table.field.asnOrderItem.matnrId" />
<TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" />
<TextField source="maktx" label="table.field.asnOrderItem.maktx" />
+ <TextField source="spec" label="table.field.asnOrderItem.spec" />
+ <TextField source="model" label="table.field.asnOrderItem.spec" />
<NumberField source="anfme" label="table.field.asnOrderItem.anfme" />
<TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" />
<NumberField source="purQty" label="table.field.asnOrderItem.purQty" />
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
index 4644ed6..345c3a1 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
@@ -114,6 +114,8 @@
const [modalType, setmodalType] = useState(0);
const [select, setSelect] = useState(0);
const billReload = useRef();
+ const notify = useNotify();
+ const refresh = useRefresh();
const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
return (
<Box display="flex">
@@ -128,7 +130,7 @@
marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
}}
title={"menu.asnOrder"}
- empty={<EmptyData onClick={() => { setCreateDialog(true); setmodalType(0) }} />}
+ empty={false}
filters={filters}
filter={{deleted: 0}}
sort={{ field: "create_time", order: "desc" }}
@@ -137,7 +139,7 @@
<FilterButton />
<MyCreateButton onClick={() => { setCreateDialog(true); setmodalType(0) }} />
<SelectColumnsButton preferenceKey='asnOrder' />
- <ImportButton value={'asnOrderItem'} />
+ <ImportButton value={'asnOrderItem'} />
<MyExportButton />
</TopToolbar>
)}
@@ -254,10 +256,11 @@
const { selectedIds, onUnselectItems, data } = useListContext();
const notify = useNotify();
const refresh = useRefresh();
+ const translate = useTranslate();
const inspection = (btn) => {
btn.stopPropagation();
if (selectedIds.length === 0) {
- notify('璇烽�夋嫨閫氱煡鍗�');
+ notify(translate("request.error.select_error_order"));
return;
} else {
const rows = data.filter((item) => selectedIds.includes(item.id))
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
index 6724931..9a2e1f0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -31,6 +31,7 @@
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -111,10 +112,19 @@
@PreAuthorize("hasAuthority('manager:asnOrder:remove')")
@OperationLog("Delete ASN鍗曟嵁")
@PostMapping("/asnOrder/remove/{ids}")
+ @Transactional(rollbackFor = Exception.class)
public R remove(@PathVariable Long[] ids) {
if (!asnOrderService.removeByIds(Arrays.asList(ids))) {
return R.error("Delete Fail");
}
+ for (Long id : ids) {
+ List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, id));
+ if (!list.isEmpty()) {
+ if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getAsnId, ids))) {
+ throw new CoolException("Details Delete Fail");
+ }
+ }
+ }
return R.ok("Delete Success").add(ids);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
index 4af2a41..70dfef1 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -102,6 +102,12 @@
@ApiModelProperty(value= "鐗╂枡鍚嶇О")
private String maktx;
+ @ApiModelProperty("瑙勬牸")
+ private String spec;
+
+ @ApiModelProperty("鍨嬪彿")
+ private String model;
+
/**
* 閫佽揣鏁伴噺
*/
@@ -183,13 +189,13 @@
private Integer ntyStatus;
/**
- * 鐘舵�� 1: 姝e父 0: 鍐荤粨
+ * 鐘舵�� 1: 姝e父 0: 鍐荤粨
*/
@ApiModelProperty(value= "鐘舵�� 1: 姝e父 0: 鍐荤粨 ")
private Integer status;
/**
- * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚�
+ * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚�
*/
@ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ")
private Integer deleted;
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 40753d9..a74e45b 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
@@ -17,6 +17,7 @@
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.common.utils.FieldsUtils;
import com.vincent.rsf.server.manager.entity.AsnOrder;
+import com.vincent.rsf.server.manager.entity.Companys;
import com.vincent.rsf.server.manager.entity.Matnr;
import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
import com.vincent.rsf.server.manager.mapper.AsnOrderItemMapper;
@@ -24,6 +25,7 @@
import com.vincent.rsf.server.manager.service.AsnOrderItemService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vincent.rsf.server.manager.service.AsnOrderService;
+import com.vincent.rsf.server.manager.service.CompanysService;
import com.vincent.rsf.server.manager.service.MatnrService;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.service.FieldsItemService;
@@ -54,6 +56,9 @@
@Autowired
private AsnOrderItemService asnOrderItemService;
+
+ @Autowired
+ private CompanysService companysService;
@Override
public R generateBarcode(List<Long> orders) {
@@ -90,13 +95,15 @@
}
List<AsnOrderTemplate> resultList = result.getList();
Map<String, List<AsnOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(AsnOrderTemplate::getCode));
+ StringBuffer sbFaild = new StringBuffer();
for (String key : listMap.keySet()) {
AsnOrderTemplate template = listMap.get(key).stream().findFirst().get();
- AsnOrder asnOrder = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, template.getCode()));
- if (!Objects.isNull(asnOrder)) {
+ AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, key));
+ if (!Objects.isNull(order)) {
+ sbFaild.append(template.getCode()).append(",宸叉坊鍔狅紒锛�");
continue;
}
- AsnOrder order = new AsnOrder();
+ order = new AsnOrder();
order.setCode(template.getCode())
.setPoCode(template.getPoCode())
.setMemo(template.getMemo())
@@ -111,28 +118,42 @@
List<AsnOrderItem> items = new ArrayList<>();
for (AsnOrderTemplate orderTemplate : listMap.get(key)) {
AsnOrderItem orderItem = new AsnOrderItem();
- Matnr matnr = null;
- if (!Objects.isNull(orderTemplate.getMatnrCode()) || StringUtils.isNotBlank(orderTemplate.getMatnrCode())) {
- matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>()
- .eq(Matnr::getCode, orderTemplate.getMatnrCode()));
+ if (StringUtils.isBlank(orderTemplate.getMatnrCode())) {
+ continue;
+ }
+ Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>()
+ .eq(Matnr::getCode, orderTemplate.getMatnrCode()));
+ if (Objects.isNull(matnr)) {
+ sbFaild.append(orderTemplate.getMatnrCode()).append("鐗╂枡涓嶅瓨鍦�");
+ continue;
}
orderItem.setAsnId(order.getId())
.setAsnCode(order.getCode())
.setSplrBatch(orderTemplate.getSplrBatch())
.setAnfme(Double.parseDouble(orderTemplate.getAnfme()))
.setQty(Double.parseDouble(orderTemplate.getQty()))
- .setSplrName(orderTemplate.getSplrName())
.setBarcode(orderTemplate.getBarcode())
.setTrackCode(orderTemplate.getTrackCode())
- .setSplrCode(orderTemplate.getSplrCode())
.setPoCode(orderTemplate.getPoCode())
- .setMaktx(orderTemplate.getMaktx())
- .setMatnrCode(orderTemplate.getMatnrCode())
.setPurUnit(orderTemplate.getPurUnit())
- .setPurQty(Double.parseDouble(orderTemplate.getPurQty()));
- if (!Objects.isNull(matnr)) {
- orderItem.setMaktx(matnr.getName()).setMatnrCode(matnr.getCode()).setMatnrId(matnr.getId());
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId)
+ .setSpec(matnr.getSpec())
+ .setModel(matnr.getModel())
+ .setPurQty(Double.parseDouble(orderTemplate.getPurQty()))
+ .setMaktx(matnr.getName())
+ .setMatnrCode(matnr.getCode())
+ .setMatnrId(matnr.getId())
+ .setStockUnit(matnr.getUnit());
+ if (!Objects.nonNull(orderTemplate.getSplrCode())) {
+ Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>().eq(Companys::getCode, orderTemplate.getSplrCode()));
+ if (!Objects.isNull(companys)) {
+ orderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName());
+ } else {
+ orderItem.setSplrCode(orderTemplate.getSplrCode()).setSplrName(companys.getName() + "(渚涘簲鍟嗕笉瀛樺湪锛侊紒)");
+ }
}
+
items.add(orderItem);
if (!asnOrderItemService.saveBatch(items)) {
throw new CoolException("鍗曟嵁鏄庣粏淇濆瓨澶辫触锛侊紒");
@@ -140,14 +161,17 @@
}
if (!items.isEmpty()) {
double qty = items.stream().mapToDouble(AsnOrderItem::getQty).sum();
- double purQty = items.stream().mapToDouble(AsnOrderItem::getPurQty).sum();
- if (!asnOrderMapper.update(new LambdaUpdateWrapper<AsnOrder>().set(AsnOrder::getQty, qty).set(AsnOrder::getAnfme, purQty).eq(AsnOrder::getId, order.getId()))) {
+ double anfme = items.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
+ if (!asnOrderMapper.update(new LambdaUpdateWrapper<AsnOrder>()
+ .set(AsnOrder::getQty, qty)
+ .set(AsnOrder::getAnfme, anfme)
+ .eq(AsnOrder::getId, order.getId()))) {
throw new CoolException("鍗曟嵁鏁伴噺淇敼澶辫触锛侊紒");
}
}
}
- return R.ok("鎿嶄綔鎴愬姛锛侊紒");
+ return R.ok("鎿嶄綔鎴愬姛," + sbFaild.toString());
}
/**
--
Gitblit v1.9.1