From b67bf724fc788cb3b86641c7eb7a35cdbc4c7a93 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 06 五月 2025 20:17:25 +0800
Subject: [PATCH] PO单导入功能优化
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/PurchaseController.java | 12 +++
rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx | 2
rsf-admin/src/page/orders/purchase/PurchaseList.jsx | 10 +-
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CompanysController.java | 10 +++
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java | 8 +-
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java | 5 +
rsf-admin/src/page/components/ImportModal.jsx | 2
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java | 4
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java | 96 ++++++++++++++++++++++++++++---
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java | 6 +-
rsf-admin/src/App.jsx | 9 ++-
11 files changed, 133 insertions(+), 31 deletions(-)
diff --git a/rsf-admin/src/App.jsx b/rsf-admin/src/App.jsx
index 60630eb..86babcc 100644
--- a/rsf-admin/src/App.jsx
+++ b/rsf-admin/src/App.jsx
@@ -44,9 +44,12 @@
[
{ locale: "en", name: "English" },
{ locale: "zh", name: "绠�浣撲腑鏂�" },
- // { locale: "zh", name: "绠�浣撲腑鏂�" },
- // { locale: "zh", name: "绠�浣撲腑鏂�" },
- // { locale: "zh", name: "绠�浣撲腑鏂�" },
+ { locale: "jp", name: "鏃ユ湰瑾�" },
+ { locale: "kr", name: "頃滉淡鞚�" },
+ { locale: "ru", name: "Russian" },
+ { locale: "lk", name: "袪褍褋褋泻懈泄" },
+ { locale: "es", name: "Espa帽ola" },
+
],
{
// msg in console
diff --git a/rsf-admin/src/page/components/ImportModal.jsx b/rsf-admin/src/page/components/ImportModal.jsx
index 71328ff..63c2edf 100644
--- a/rsf-admin/src/page/components/ImportModal.jsx
+++ b/rsf-admin/src/page/components/ImportModal.jsx
@@ -62,7 +62,9 @@
notify(msg);
refresh()
} else {
+ handleClose()
notify(msg);
+ refresh()
}
};
diff --git a/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx b/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx
index 13222c9..0522994 100644
--- a/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx
+++ b/rsf-admin/src/page/orders/purchase/PurchaseItemList.jsx
@@ -117,7 +117,7 @@
setSelect(record)
setEditDialog(true)
}}
- omit={['id', 'createTime', 'purchaseId', 'platItemId', 'createBy', 'memo']}
+ omit={['id', 'createTime', 'purchaseId', 'platItemId','asnQty', 'printQty', 'createBy', 'memo']}
>
<NumberField source="id" />
<NumberField source="purchaseId" label="table.field.purchaseItem.purchaseId" />
diff --git a/rsf-admin/src/page/orders/purchase/PurchaseList.jsx b/rsf-admin/src/page/orders/purchase/PurchaseList.jsx
index df7db49..2a505de 100644
--- a/rsf-admin/src/page/orders/purchase/PurchaseList.jsx
+++ b/rsf-admin/src/page/orders/purchase/PurchaseList.jsx
@@ -106,7 +106,7 @@
marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
}}
title={"menu.purchase"}
- empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+ empty={false}
filters={filters}
sort={{ field: "create_time", order: "desc" }}
actions={(
@@ -122,11 +122,11 @@
>
<StyledDatagrid
preferenceKey='purchase'
- bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+ bulkActionButtons={() => <BulkDeleteButton mutationMode="pessimistic"/>}
rowClick={'edit'}
expand={false}
expandSingle={true}
- omit={['id', 'createTime', 'createBy', 'memo', 'preArr', 'channel','startTime','workQty', 'endTime']}
+ omit={['id', 'createTime', 'createBy','channel', 'platCode', 'memo', 'preArr', 'channel','startTime','workQty', 'endTime']}
>
<NumberField source="id" />
<TextField source="code" label="table.field.purchase.code" />
@@ -136,7 +136,7 @@
<DateField source="preArr" label="table.field.purchase.preArr" showTime />
<NumberField source="anfme" label="table.field.purchase.anfme" />
<NumberField source="qty" label="table.field.purchase.qty" />
- <NumberField source="workQty" label="table.field.purchase.workQty" />
+ {/* <NumberField source="workQty" label="table.field.purchase.workQty" /> */}
<TextField source="channel" label="table.field.purchase.channel" />
<TextField source="platCode" label="table.field.purchase.platCode" />
<DateField source="startTime" label="table.field.purchase.startTime" showTime />
@@ -150,7 +150,7 @@
<TextField source="memo" label="common.field.memo" sortable={false} />
<WrapperField cellClassName="opt" label="common.field.opt">
<EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
- <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+ <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode="pessimistic"/>
</WrapperField>
</StyledDatagrid>
</List>
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CompanysController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CompanysController.java
index 6b4d172..c10934b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CompanysController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CompanysController.java
@@ -13,8 +13,11 @@
import com.vincent.rsf.server.manager.entity.Companys;
import com.vincent.rsf.server.manager.entity.Warehouse;
import com.vincent.rsf.server.manager.service.CompanysService;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.controller.BaseController;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import io.swagger.annotations.Api;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -85,6 +88,13 @@
companys.setCreateBy(getLoginUserId());
companys.setUpdateBy(getLoginUserId());
+ if (StringUtils.isNotBlank(companys.getCode())) {
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_COMPANYS_CODE, companys);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌ャ�孲YS_COMPANYS_CODE銆嶆槸鍚﹁缃畬鎴愶紒锛�");
+ }
+ companys.setCode(ruleCode);
+ }
if (!companysService.save(companys)) {
return R.error("Save Fail");
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/PurchaseController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/PurchaseController.java
index 2865546..a47d715 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/PurchaseController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/PurchaseController.java
@@ -11,7 +11,9 @@
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.entity.AsnOrderItem;
import com.vincent.rsf.server.manager.entity.Purchase;
+import com.vincent.rsf.server.manager.entity.PurchaseItem;
import com.vincent.rsf.server.manager.service.AsnOrderItemService;
+import com.vincent.rsf.server.manager.service.PurchaseItemService;
import com.vincent.rsf.server.manager.service.PurchaseService;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.controller.BaseController;
@@ -33,6 +35,9 @@
@Autowired
private AsnOrderItemService asnOrderItemService;
+
+ @Autowired
+ private PurchaseItemService purchaseItemService;
@PreAuthorize("hasAuthority('manager:purchase:list')")
@PostMapping("/purchase/page")
@@ -102,9 +107,12 @@
return R.error("鍗曟嵁鏈夊凡鐢熸垚鐨勬敹璐у崟鏄庣粏锛屼笉鍙墽琛屽垹闄ゆ搷浣滐紒锛�");
}
if (!purchaseService.removeByIds(Arrays.asList(ids))) {
- return R.error("Delete Fail");
+ return R.error("涓诲崟鍒犻櫎澶辫触锛侊紒");
}
- return R.ok("Delete Success").add(ids);
+ if (!purchaseItemService.remove(new LambdaQueryWrapper<PurchaseItem>().in(PurchaseItem::getPurchaseId, Arrays.asList(ids)))) {
+ return R.error("鏄庣粏鍒犻櫎澶辫触锛侊紒");
+ }
+ return R.ok("鍒犻櫎鎴愬姛锛侊紒").add(ids);
}
@PreAuthorize("hasAuthority('manager:purchase:list')")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java
index 67a0bc3..1ee73ed 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java
@@ -90,7 +90,7 @@
* 鏍囧噯鍖呰
*/
@ApiModelProperty(value= "鏍囧噯鍖呰")
- private Double nromQty;
+ private Integer nromQty;
/**
* ASN鍗曟嵁鏁伴噺
@@ -176,7 +176,7 @@
public PurchaseItem() {}
- public PurchaseItem(Long purchaseId,String erpItemId,String matnrCode,String matnrName,String unit,Double anfme,Double qty,Double nromQty,Double asnQty,Double printQty,String splrName,String splrCode,String splrBatch,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+ public PurchaseItem(Long purchaseId,String erpItemId,String matnrCode,String matnrName,String unit,Double anfme,Double qty,Integer nromQty,Double asnQty,Double printQty,String splrName,String splrCode,String splrBatch,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
this.purchaseId = purchaseId;
this.platItemId = erpItemId;
this.matnrCode = matnrCode;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java
index a1f9433..c304c4b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/PurchaseTemplate.java
@@ -35,7 +35,7 @@
@Excel(name = "涓氬姟绫诲瀷")
@ApiModelProperty(value= "涓氬姟绫诲瀷")
- @ExcelComment(value = "wkType", example = "ERP")
+ @ExcelComment(value = "wkType", example = "澶栬喘鏀惰揣")
private String wkType;
@@ -85,8 +85,8 @@
/**
* 宸叉敹鏁伴噺
*/
- @Excel(name = "宸叉敹鏁伴噺")
- @ApiModelProperty(value= "宸叉敹鏁伴噺")
+ @Excel(name = "宸插畬鎴愰噺")
+ @ApiModelProperty(value= "宸插畬鎴愰噺")
@ExcelComment(value = "qty", example = "0")
private Double qty;
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 9255348..ea2eef7 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
@@ -102,7 +102,7 @@
AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, key));
if (!Objects.isNull(order)) {
sbFaild.append(template.getCode()).append(",宸叉坊鍔狅紒锛�");
- continue;
+ throw new CoolException(sbFaild.toString());
}
order = new AsnOrder();
order.setCode(template.getCode())
@@ -120,13 +120,13 @@
for (AsnOrderTemplate orderTemplate : listMap.get(key)) {
AsnOrderItem orderItem = new AsnOrderItem();
if (StringUtils.isBlank(orderTemplate.getMatnrCode())) {
- continue;
+ throw new CoolException(orderTemplate.getPoCode() + "锛氱墿鏂欑紪鐮佷笉鑳戒负绌猴紒锛�");
}
Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>()
.eq(Matnr::getCode, orderTemplate.getMatnrCode()));
if (Objects.isNull(matnr)) {
sbFaild.append(orderTemplate.getMatnrCode()).append("鐗╂枡涓嶅瓨鍦�");
- continue;
+ throw new CoolException(sbFaild.toString());
}
String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, matnr);
orderItem.setAsnId(order.getId())
@@ -156,7 +156,7 @@
orderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName());
} else {
sbFaild.append("渚涘簲鍟�:" + orderTemplate.getSplrCode()).append("涓嶅瓨鍦�");
- continue;
+ throw new CoolException(sbFaild.toString());
}
} else {
continue;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java
index 59905b3..10f5477 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java
@@ -5,32 +5,46 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.entity.enums.OrderType;
+import com.vincent.rsf.server.api.entity.enums.OrderWorkType;
import com.vincent.rsf.server.common.utils.ExcelUtil;
+import com.vincent.rsf.server.manager.entity.Companys;
+import com.vincent.rsf.server.manager.entity.Matnr;
import com.vincent.rsf.server.manager.entity.Purchase;
import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
import com.vincent.rsf.server.manager.entity.excel.PurchaseTemplate;
+import com.vincent.rsf.server.manager.enums.CompanysType;
import com.vincent.rsf.server.manager.mapper.PurchaseItemMapper;
import com.vincent.rsf.server.manager.entity.PurchaseItem;
+import com.vincent.rsf.server.manager.service.CompanysService;
+import com.vincent.rsf.server.manager.service.MatnrService;
import com.vincent.rsf.server.manager.service.PurchaseItemService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vincent.rsf.server.manager.service.PurchaseService;
+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 org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
@Service("purchaseItemService")
public class PurchaseItemServiceImpl extends ServiceImpl<PurchaseItemMapper, PurchaseItem> implements PurchaseItemService {
- private final PurchaseServiceImpl purchaseService;
+ @Autowired
+ private PurchaseService purchaseService;
- public PurchaseItemServiceImpl(PurchaseServiceImpl purchaseService) {
- this.purchaseService = purchaseService;
- }
+ @Autowired
+ private MatnrService matnrService;
+
+ @Autowired
+ private CompanysService companysService;
/**
* @author Ryan
@@ -39,6 +53,7 @@
* @version 1.0
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public R excelImport(MultipartFile file, Long loginUserId) throws Exception {
ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), PurchaseTemplate.class, ExcelUtil.getDefaultImportParams());
if (result.getList().isEmpty()) {
@@ -53,14 +68,73 @@
List<PurchaseTemplate> list = listMap.get(key);
Purchase serviceOne = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, key));
if (!Objects.isNull(serviceOne)) {
- continue;
+// return R.error(serviceOne.getCode() + "鍗曟嵁宸插瓨鍦紒锛�");
+ throw new CoolException(serviceOne.getCode() + "鍗曟嵁宸插瓨鍦紒锛�");
}
PurchaseTemplate template = list.stream().findFirst().get();
Purchase purchase = new Purchase();
- purchase.setCode(template.getPoCode()).set;
+ BeanUtils.copyProperties(template, purchase);
+ purchase.setCode(template.getPoCode());
+ if (StringUtils.isBlank(template.getPoCode())) {
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ORDER_PO_CODE, purchase);
+ purchase.setCode(ruleCode);
+ }
+ purchase.setType(OrderType.getTypeVal(template.getType()))
+ .setWkType(OrderWorkType.getWorkType(template.getWkType()))
+ .setSource(template.getSource())
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId);
+ if (!purchaseService.save(purchase)) {
+ throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
+ }
+ List<PurchaseItem> items = new ArrayList<>();
+ for (PurchaseTemplate purchaseTemplate : list) {
+ PurchaseItem item = new PurchaseItem();
+ if (StringUtils.isBlank(purchaseTemplate.getMatnrCode())) {
+ throw new CoolException(purchaseTemplate.getPoCode() + "锛氱墿鏂欑紪鐮佷笉鑳戒负绌猴紒锛�");
+ }
+ Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, template.getMatnrCode()));
+ if (Objects.isNull(matnr)) {
+ throw new CoolException(template.getMatnrCode() + "鐗╂枡涓嶅瓨鍦紒锛�");
+ }
+ item.setMatnrName(matnr.getName())
+ .setMatnrCode(matnr.getCode())
+ .setPlatItemId(template.getPlatItemId())
+ .setAnfme(template.getAnfme())
+ .setQty(template.getQty())
+ .setPurchaseId(purchase.getId())
+ .setNromQty(matnr.getNromNum())
+ .setSplrBatch(template.getSplrBatch())
+ .setCreateBy(loginUserId)
+ .setUpdateBy(loginUserId)
+ .setUnit(template.getUnit());
+ if (StringUtils.isNotBlank(purchaseTemplate.getSplrCode())) {
+ Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>()
+ .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val)
+ .eq(Companys::getCode, template.getSplrCode()));
+ if (!Objects.isNull(companys)) {
+ item.setSplrCode(companys.getCode()).setSplrName(companys.getName());
+ } else {
+ throw new CoolException("渚涘簲鍟嗭細" + template.getSplrName() + "涓嶅瓨鍦紒锛�");
+ }
+ } else {
+ throw new CoolException("渚涘簲鍟嗕笉鑳戒负绌猴紒锛�");
+ }
+ if (!this.save(item)) {
+ throw new CoolException("鍗曟嵁鏄庣粏淇濆瓨澶辫触锛侊紒");
+ }
+ items.add(item);
+ }
+ double anfmes = items.stream().mapToDouble(PurchaseItem::getAnfme).sum();
+ double qty = items.stream().mapToDouble(PurchaseItem::getQty).sum();
+ purchase.setAnfme(anfmes).setQty(qty);
+
+ if (!purchaseService.updateById(purchase)) {
+ throw new CoolException("涓诲崟鏁伴噺淇敼澶辫触锛侊紒");
+ }
}
- return null;
+ return R.ok("瀵煎叆鎴愬姛锛侊紒");
}
}
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 04dc68c..07f2ea3 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
@@ -77,4 +77,9 @@
/**PO鍗曠紪鐮�*/
public final static String SYS_ORDER_PO_CODE = "sys_order_po_code";
+ /**浼佷笟缂栫爜*/
+ public final static String SYS_COMPANYS_CODE = "sys_companys_code";
+
+
+
}
--
Gitblit v1.9.1