From 05c0643b9337d8129876bdf9398b387c81b5f5f2 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期五, 13 六月 2025 12:39:08 +0800 Subject: [PATCH] 根据DO单添加出库单明细功能优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 63 ++++++++++++++++++--- rsf-admin/src/page/orders/outStock/OutOrderModal.jsx | 11 +-- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java | 23 +++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java | 6 + rsf-admin/src/page/orders/outStock/OutStockPublic.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java | 22 ++++++- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java | 1 rsf-admin/src/i18n/zh.js | 2 8 files changed, 107 insertions(+), 23 deletions(-) diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index a52e088..6df53d7 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -675,7 +675,7 @@ platOrderCode: '瀹㈠崟鍙�', anfme: "璁″垝鍑哄簱鏁�", stockUnit: "搴撳瓨鍗曚綅", - workQty: '鎵ц鏁�', + workQty: '宸插嚭鏁伴噺', purQty: "涓嬪崟鏁伴噺", purUnit: "鍗曚綅", qty: "瀹屾垚鏁伴噺", diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx index 229b284..92f4fe2 100644 --- a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx +++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx @@ -225,11 +225,11 @@ /> <StyledDatagrid preferenceKey='deliveryItem' - bulkActionButtons={<AddOutStockButton setOpen={setOpen} setPreview={setPreview} setSelect={setSelect}/>} + bulkActionButtons={<AddOutStockButton setOpen={setOpen} setPreview={setPreview} setSelect={setSelect} />} rowClick={(id, resource, record) => false} expand={false} expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo', 'workQty', 'startTime', 'endTime', 'updateBy', 'createTime']} + omit={['id', 'createTime', 'createBy', 'memo', 'startTime', 'endTime', 'updateBy', 'createTime']} > <NumberField source="id" /> <TextField source="deliveryCode" label="table.field.deliveryItem.deliveryCode" /> @@ -237,6 +237,7 @@ <TextField source="maktx" label="table.field.deliveryItem.matnrName" /> <TextField source="unit" label="table.field.deliveryItem.unit" /> <NumberField source="anfme" label="table.field.deliveryItem.anfme" /> + <NumberField source="workQty" label="table.field.outStockItem.workQty" /> <TextField source="splrName" label="table.field.deliveryItem.splrName" /> <TextField source="splrBatch" label="table.field.deliveryItem.splrBatch" /> <TextField source="updateBy$" label="common.field.updateBy" /> @@ -266,12 +267,6 @@ const notify = useNotify(); const refresh = useRefresh(); const confirm = async (event) => { - const res = await request.post(`/outStock/generate/orders`, { ids: selectedIds }); - if (res?.data?.code === 200) { - notify(res.data.msg); - } else { - notify(res.data.msg); - } setPreview(true) setSelect(selectedIds); onUnselectItems(); diff --git a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx index b5748f6..60c2172 100644 --- a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx +++ b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx @@ -202,7 +202,7 @@ bulkActionButtons={<></>} rowClick={handleRowClick} selectedIds={rowSelectedIds} - omit={['id', 'splrName', 'qty', 'poCode', 'workQty']} + omit={['id', 'splrName', 'qty', 'poCode',]} > <NumberField source="id" /> <TextField source="asnCode" label="table.field.outStockItem.asnCode" /> diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java index dd11eb1..8d63180 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java @@ -60,6 +60,29 @@ return R.ok().add(deliveryItemService.page(pageParam, wrapper)); } + + @PreAuthorize("hasAuthority('manager:deliveryItem:list')") + @ApiOperation("鍒嗛〉鑾峰彇鍒楄〃") + @PostMapping("/deliveryItem/edit/page") + public R byPoIdspage(@RequestBody Map<String, Object> map) { + List<Long> poDetlIds = new ArrayList<>(); + if (!Objects.isNull(map.get("ids"))) { + poDetlIds = JSONArray.parseArray(JSONArray.toJSONString(map.get("ids")), Long.class); + map.remove("ids"); + } + BaseParam baseParam = buildParam(map, BaseParam.class); + PageParam<DeliveryItem, BaseParam> pageParam = new PageParam<>(baseParam, DeliveryItem.class); + QueryWrapper<DeliveryItem> queryWrapper = pageParam.buildWrapper(true); + if (!poDetlIds.isEmpty()) { + queryWrapper.in("id", poDetlIds); + } else { + return R.ok(); + } + return R.ok().add(deliveryItemService.page(pageParam, queryWrapper)); + } + + + @PreAuthorize("hasAuthority('manager:deliveryItem:list')") @PostMapping("/deliveryItem/list") public R list(@RequestBody Map<String, Object> map) { diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java index e140809..d2d32ce 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java @@ -8,8 +8,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; +import com.vincent.rsf.server.manager.entity.DeliveryItem; import com.vincent.rsf.server.manager.entity.excel.OutStockTemplate; import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.enums.OrderWorkType; @@ -43,7 +45,6 @@ @RestController @Api(tags = "鍑哄簱鍗曟嵁") public class OutStockController extends BaseController { - Logger logger = LoggerFactory.getLogger(OutStockController.class); @Autowired @@ -166,6 +167,21 @@ return outStockService.cancelOutOrder(id); } + @PreAuthorize("hasAuthority('manager:outStock:update')") + @ApiOperation("鍒犻櫎宸茬敓鎴愭槑缁�") + @GetMapping("/outStock/items/cancel/{ids}") + public R cancel(@PathVariable Long[] ids) { + List<Long> list = Arrays.asList(ids); + if (list.isEmpty()) { + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + List<AsnOrderItem> orderItems = outStockItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getId, list)); + if (orderItems.isEmpty()) { + throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); + } + return outStockService.cancelOutOrderByItems(orderItems); + } + @PreAuthorize("hasAuthority('manager:outStock:list')") @PostMapping("/outStock/export") @@ -216,8 +232,8 @@ if (Objects.isNull(params.get("ids"))) { return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - List<Long> ids = (List<Long>) params.get("ids"); - return outStockService.genOutStock(ids, getLoginUserId()); + List<DeliveryItem> items = JSON.parseArray(JSONObject.toJSONString(params.get("ids")), DeliveryItem.class); + return outStockService.genOutStock(items, getLoginUserId()); } @PreAuthorize("hasAuthority('manager:outStock:update')") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java index 1ad99ee..c30e58b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockItemController.java @@ -157,6 +157,7 @@ return R.ok().add(vos); } + @PreAuthorize("hasAuthority('manager:outStockItem:list')") @PostMapping("/outStockItem/export") @ApiOperation("瀵煎嚭鍑哄簱鍗曟槑缁�") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java index d2964c1..fb3b2f8 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java @@ -6,6 +6,8 @@ import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; import com.vincent.rsf.server.manager.entity.AsnOrder; +import com.vincent.rsf.server.manager.entity.AsnOrderItem; +import com.vincent.rsf.server.manager.entity.DeliveryItem; import java.util.List; @@ -13,7 +15,7 @@ R cancelOutOrder(String id); - R genOutStock(List<Long> ids, Long loginUserId); + R genOutStock(List<DeliveryItem> ids, Long loginUserId); R generateWaves(List<Long> ids); @@ -26,4 +28,6 @@ R genOutStockTask(List<OutStockToTaskParams> params, Long loginUserId, Long outId); R getSiteNos(); + + R cancelOutOrderByItems(List<AsnOrderItem> orderItems); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java index 01a31d2..71ec652 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java @@ -171,13 +171,9 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public R genOutStock(List<Long> ids, Long loginUserId) { - if (Objects.isNull(ids) || ids.isEmpty()) { - throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); - } - List<DeliveryItem> items = deliveryItemService.list(new LambdaQueryWrapper<DeliveryItem>().in(DeliveryItem::getId, ids)); + public R genOutStock(List<DeliveryItem> items, Long loginUserId) { if (items.isEmpty()) { - throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } Map<Long, List<DeliveryItem>> listMap = items.stream().collect(Collectors.groupingBy(DeliveryItem::getDeliveryId)); listMap.keySet().forEach(key -> { @@ -205,15 +201,23 @@ } List<AsnOrderItem> orderItems = new ArrayList<>(); listMap.get(key).forEach(item -> { + DeliveryItem deliveryItem = deliveryItemService.getById(item.getId()); AsnOrderItem orderItem = new AsnOrderItem(); - Double anfme = Math.round((item.getAnfme() - item.getWorkQty() - item.getQty()) * 10000) / 10000.0; + if (item.getAnfme().compareTo(0.0) <= 0) { + throw new CoolException("鍑哄簱鏁伴噺涓嶈兘灏忎簬鎴栫瓑浜庨浂锛侊紒"); + } + Double anfme = Math.round((deliveryItem.getAnfme() - item.getAnfme()) * 10000) / 10000.0; + if (anfme.compareTo(0.0) < 0) { + throw new CoolException("鍑哄簱鏁伴噺涓嶈冻锛侊紒"); + } + BeanUtils.copyProperties(item, orderItem); orderItem.setId(null) .setPoCode(order.getPoCode()) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()) .setFieldsIndex(item.getFieldsIndex()) - .setAnfme(anfme) + .setAnfme(item.getAnfme()) .setWorkQty(0.0) .setAsnId(order.getId()) .setAsnCode(order.getCode()) @@ -257,7 +261,6 @@ .eq(Delivery::getId, key))) { throw new CoolException("涓诲崟淇敼澶辫触锛侊紒"); } - }); return R.ok(); } @@ -512,6 +515,7 @@ /** * 鑾峰彇鍑哄簱绔欑偣 + * * @return */ @Override @@ -524,6 +528,47 @@ return R.ok(sites); } + @Override + @Transactional(rollbackFor = Exception.class) + public R cancelOutOrderByItems(List<AsnOrderItem> orderItems) { + Map<Long, List<AsnOrderItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(AsnOrderItem::getAsnId)); + for (Long key : listMap.keySet()) { + AsnOrder order = this.getById(key); + if (Objects.isNull(order)) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + } + List<AsnOrderItem> items = listMap.get(key); + if (!items.isEmpty()) { + for (AsnOrderItem orderItem : items) { + DeliveryItem deliveryItem = deliveryItemService.getById(orderItem.getPoDetlId()); + Double workQty = Math.round((deliveryItem.getWorkQty() - orderItem.getAnfme()) * 10000) / 10000.0; + deliveryItem.setWorkQty(workQty.compareTo(0.0) >= 0 ? workQty : 0); + if (!deliveryItemService.updateById(deliveryItem)) { + throw new CoolException("DO鍗曟槑缁嗘洿鏂板け璐ワ紒锛�"); + } + + Delivery delivery = deliveryService.getOne(new LambdaQueryWrapper<Delivery>().eq(Delivery::getCode, orderItem.getPoCode())); + if (!Objects.isNull(delivery)) { + Double wkQty = Math.round((delivery.getWorkQty() - delivery.getAnfme()) * 10000) / 10000.0; + delivery.setWorkQty(wkQty.compareTo(0.0) >= 0 ? wkQty : 0).setExceStatus(POExceStatus.PO_EXCE_STATUS_UN_EXCE.val); + if (!deliveryService.updateById(delivery)) { + throw new CoolException("DO鍗曟嵁淇敼澶辫触锛侊紒"); + } + } + } + } + + if (!this.remove(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, key))) { + throw new CoolException("涓诲崟鍒犻櫎澶辫触锛侊紒"); + } + if (!outStockItemService.remove(new LambdaQueryWrapper<AsnOrderItem>() + .eq(AsnOrderItem::getAsnId, key))) { + throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒"); + } + } + return R.ok("鎿嶄綔鎴愬姛"); + } + private List<LocItem> getEfficiencyFirstItemList(AsnOrderItem asnOrderItem) { LambdaQueryWrapper<LocItem> locItemQueryWrapper = new LambdaQueryWrapper<>(); -- Gitblit v1.9.1