rsf-admin/src/i18n/core/chineseMessages.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-admin/src/i18n/en.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-admin/src/i18n/zh.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-admin/src/page/components/ImportButton.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-admin/src/page/components/ImportModal.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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?", 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", } } 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: "请选择通知单", } } 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); 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(); 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" /> 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)) 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); } 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: 正常 0: 冻结 * 状态 1: 正常 0: 冻结 */ @ApiModelProperty(value= "状态 1: 正常 0: 冻结 ") private Integer status; /** * 是否删除 1: 是 0: 否 * 是否删除 1: 是 0: 否 */ @ApiModelProperty(value= "是否删除 1: 是 0: 否 ") private Integer deleted; 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()); } /**