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