From 2799c6690aff9c1577ba4dc290dc56a28767a769 Mon Sep 17 00:00:00 2001
From: DESKTOP-LMJ82IJ\Eno <creaycat@gmail.com>
Date: 星期六, 19 四月 2025 15:03:43 +0800
Subject: [PATCH] #修改 1. 采购单界面优化及修改

---
 rsf-admin/src/page/basicInfo/loc/BindModal.jsx                                                    |   35 ++++++-----
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java         |   23 ++++++-
 rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx                                                |    4 
 rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx                                           |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java                    |    8 ++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java              |   35 +++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/GenerateTaskParams.java |    3 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java           |   64 +++++++++++++++++++++
 rsf-server/src/main/resources/application-dev.yml                                                 |    2 
 9 files changed, 153 insertions(+), 23 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/loc/BindModal.jsx b/rsf-admin/src/page/basicInfo/loc/BindModal.jsx
index 6eca745..38854f7 100644
--- a/rsf-admin/src/page/basicInfo/loc/BindModal.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/BindModal.jsx
@@ -2,6 +2,7 @@
 import {
     CreateBase,
     useTranslate,
+    SearchInput,
     TextInput,
     NumberInput,
     BooleanInput,
@@ -55,7 +56,6 @@
 import request from '@/utils/request';
 import { Add, Edit, Delete } from '@mui/icons-material';
 import _ from 'lodash';
-import { DataGrid } from '@mui/x-data-grid';
 import StatusSelectInput from "../../components/StatusSelectInput";
 import TreeSelectInput from "@/page/components/TreeSelectInput";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
@@ -72,13 +72,14 @@
     },
 }));
 
+const filters = [
+  <SearchInput source="condition" alwaysOn />
+]
+
 const MatnrModal = ({ open, setOpen }) => {
     const refresh = useRefresh();
     const translate = useTranslate();
     const notify = useNotify();
-    const [options, setOptions] = useState({
-        condition: null
-    });
 
     const [formData, setFormData] = useState({
         areaMatId: null,
@@ -133,12 +134,12 @@
             groupId: formData.groupId,
             matnrId: formData.matnrId,
         }
-        const res = await request.post(`/locAreaMatRela/matnr/bind`, parmas);
-        if (res?.data?.code === 200) {
-            handleClose()
-        } else {
-            notify(res.data.msg);
-        }
+        // const res = await request.post(`/locAreaMatRela/matnr/bind`, parmas);
+        // if (res?.data?.code === 200) {
+        //     handleClose()
+        // } else {
+        //     notify(res.data.msg);
+        // }
     }
 
     const [groupId, setGroupId] = useState();
@@ -146,15 +147,17 @@
         setGroupId(e.target.value)
     }
 
+
+
     return (
-        <Dialog open={open} maxWidth="xl" fullWidth>
+        <Dialog open={open} maxWidth="1" fullWidth>
             <Form onSubmit={handleSubmit}>
                 <DialogCloseButton onClose={handleClose} />
                 <DialogTitle>{translate('toolbar.bindmatnr')}</DialogTitle>
                 <DialogContent sx={{ mt: 2 }}>
-                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, height: 700 }}>
+                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, height: 900 }}>
                         <Grid container spacing={2}>
-                            <Grid item xs={4}>
+                            <Grid item xs={3}>
                                 <ReferenceInput
                                     source="areaMatId"
                                     reference="locAreaMat"
@@ -169,7 +172,7 @@
                                     />
                                 </ReferenceInput>
                             </Grid>
-                            <Grid item xs={4}>
+                            <Grid item xs={3}>
                                 <TreeSelectInput
                                     label="table.field.locAreaMatRela.groupId"
                                     resource={'matnrGroup'}
@@ -178,14 +181,14 @@
                                     onChange={(e) => handleChange(e.target.value, 'groupId')}
                                 />
                             </Grid>
-
                         </Grid>
                         <Grid item xs={4}>
                             <List
                                 resource="matnr"
                                 filter={{ groupId: formData.groupId }}
+                                queryOptions={{}}
+                                // filters={filters}
                                 empty={false}
-                                queryOptions={{options}}
                                 actions={<></>}
                             >
                                 <StyledDatagrid
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
index 5a7e5fe..04cfa63 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
@@ -131,7 +131,7 @@
         >
           <StyledDatagrid
             preferenceKey='asnOrderItem'
-            bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+            bulkActionButtons={false}
             rowClick={(id, resource, record) => {
               setSelect(record)
               setEditDialog(true)
diff --git a/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx b/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx
index f9f48aa..e14d8a5 100644
--- a/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx
+++ b/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx
@@ -110,14 +110,14 @@
                         <FilterButton />
                         {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
                         <SelectColumnsButton preferenceKey='waitPakinItem' />
-                        <MyExportButton />
+                        {/* <MyExportButton /> */}
                     </TopToolbar>
                 )}
                 perPage={DEFAULT_ITEM_PAGE_SIZE}
             >
                 <StyledDatagrid
                     preferenceKey='waitPakinItem'
-                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+                    bulkActionButtons={false}
                     rowClick={(id, resource, record) => false}
                     omit={['id', 'pakinId', 'createTime', 'createBy', 'memo']}
                 >
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
index c0d588d..7471043 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -285,4 +285,39 @@
         }
         return mobileService.defectProducts(trackCode);
     }
+
+    @ApiOperation("鑾峰彇缁勬嫋鍏ュ簱淇℃伅")
+    @PostMapping("/pakin/info/{barcode}")
+    @PreAuthorize("hasAuthority('manager:waitPakin:list')")
+    public R getPakinInStock(@PathVariable String barcode) {
+        if (Objects.isNull(barcode)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.getPakinInStock(barcode);
+    }
+
+    @ApiOperation("鑾峰彇涓婃灦绔欑偣淇℃伅")
+    @GetMapping("/inStock/sites")
+    @PreAuthorize("hasAuthority('manager:deviceSite:list')")
+    public R getTarSite() {
+        return mobileService.getDeviceSites();
+    }
+
+    @ApiOperation("鑾峰彇鎺ㄨ崘搴撲綅鍒楄〃淇℃伅")
+    @GetMapping("/locs/list")
+    @PreAuthorize("hasAuthority('manager:deviceSite:list')")
+    public R getLocs() {
+        return mobileService.getRecommondLocs();
+    }
+
+    @ApiOperation("鐢熸垚浠诲姟鍒楄〃")
+    @PostMapping("/pakin/task")
+    @PreAuthorize("hasAuthority('manager:deviceSite:list')")
+    public R pakinToTask(@RequestBody Map<String, Object> map) {
+        if (Objects.isNull(map)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.generateTask(map, getLoginUserId());
+    }
 }
+
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
index 932f558..8fcb6d3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -63,4 +63,12 @@
     R getItemByContainer(Map<String, Object> params);
 
     R defectProducts(String trackCode);
+
+    R getPakinInStock(String barcode);
+
+    R getDeviceSites();
+
+    R getRecommondLocs();
+
+    R generateTask(Map<String, Object> map, Long loginUserId);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index 36b6564..c287493 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -17,6 +17,7 @@
 import com.vincent.rsf.server.common.utils.CommonUtil;
 import com.vincent.rsf.server.common.utils.FieldsUtils;
 import com.vincent.rsf.server.common.utils.JwtUtil;
+import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams;
 import com.vincent.rsf.server.manager.controller.params.IsptItemsParams;
 import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
 import com.vincent.rsf.server.manager.entity.*;
@@ -123,6 +124,8 @@
     private LocAreaRelaMapper locAreaRelaMapper;
     @Autowired
     private LocAreaMapper locAreaMapper;
+    @Autowired
+    private DeviceSiteMapper deviceSiteMapper;
 
     /**
      * @author Ryan
@@ -822,6 +825,67 @@
     }
 
     /**
+     * @author Ryan
+     * @description 鑾峰彇鍏ュ簱缁勬嫋淇℃伅
+     * @param barcode
+     * @return
+     */
+    @Override
+    public R getPakinInStock(String barcode) {
+        WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode));
+        if (Objects.isNull(waitPakin)) {
+            throw new CoolException("缁勬嫋鍗曟嵁涓嶅瓨鍦紒锛�");
+        }
+        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId()));
+        if (pakinItems.isEmpty()) {
+            return R.ok(new ArrayList<>());
+        }
+        return R.ok(pakinItems);
+    }
+
+    /**
+     * @author Ryan
+     * @description 鑾峰彇搴撳彛绔欑偣淇℃伅
+     * @return
+     */
+    @Override
+    public R getDeviceSites() {
+        return R.ok(deviceSiteMapper.selectList(new LambdaQueryWrapper<DeviceSite>().eq(DeviceSite::getStatus, 1).groupBy(DeviceSite::getSite)));
+    }
+
+    /**
+     * @author Ryan
+     * @description 鑾峰彇鎺ㄨ崘搴撲綅
+     * @return
+     */
+    @Override
+    public R getRecommondLocs() {
+        return R.ok(locService.list(new LambdaQueryWrapper<Loc>().last("limit 10")));
+    }
+
+    /**
+     * @param map
+     * @param loginUserId
+     * @return
+     * @author Ryan
+     * @description 鐢熸垚浠诲姟鍒楄〃
+     */
+    @Override
+    public R generateTask(Map<String, Object> map, Long loginUserId) {
+        String barcode = map.get("barcode").toString();
+        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode));
+        if (waitPakins.isEmpty()) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦� 锛侊紒");
+        }
+        GenerateTaskParams taskParams = new GenerateTaskParams();
+        taskParams.setWaitPakins(waitPakins)
+                .setSiteId(Long.parseLong(map.get("site").toString()))
+                .setLocCode(map.get("locCode").toString());
+        return R.ok(taskService.generateTasks(taskParams, loginUserId));
+
+    }
+
+    /**
      * 鑾峰彇ReceiptDetlsDtos
      */
     private R getAsnOrderItem(List<AsnOrderItem> items) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/GenerateTaskParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/GenerateTaskParams.java
index 3172a32..a2b5e26 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/GenerateTaskParams.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/GenerateTaskParams.java
@@ -26,4 +26,7 @@
 
     @ApiModelProperty("绔欑偣ID")
     public Long siteId;
+
+    @ApiModelProperty("搴撲綅缂栫爜")
+    public String locCode;
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 5657acc..7b25c0c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -104,8 +104,25 @@
                     .setBarcode(pakin.getBarcode())
                     .setTargSite(deviceSite.getDeviceCode())
                     .setCreateBy(loginUserId)
-                    .setUpdateBy(loginUserId)
-                    .setTargSite(LocManageUtil.getTargetSite());
+                    .setUpdateBy(loginUserId);
+
+            if (!Objects.isNull(waitPakin.getSiteId()) && waitPakin.getSiteId() > 0) {
+                DeviceSite site = deviceSiteService.getById(waitPakin.getSiteId());
+                task.setTargSite(site.getSite() + "");
+            } else {
+                task.setTargSite(LocManageUtil.getTargetSite());
+            }
+            if (!Objects.isNull(waitPakin.getLocCode()) && StringUtils.isNotBlank(waitPakin.getLocCode())) {
+                List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, waitPakin.getLocCode()));
+//                if (!locs.isEmpty()) {
+//                    throw new CoolException("搴撲綅閿欒锛氱浉鍚屽簱浣嶅簲鍙竴鏉�")
+//                }
+                Loc loc = locs.stream().findFirst().get();
+                task.setTargSite(loc.getCode());
+            } else {
+                task.setTargSite(LocManageUtil.getTargetSite());
+            }
+
             if (!this.save(task)) {
                 throw new CoolException("浠诲姟淇濆瓨澶辫触锛侊紒");
             }
@@ -123,7 +140,7 @@
                 BeanUtils.copyProperties(item, taskItem);
                 AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, item.getAsnId()));
                 if (Objects.isNull(order)) {
-                    throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+                    throw new CoolException("鏁版嵁閿欒: 鍗曟嵁涓嶅瓨鍦紒锛�");
                 }
                 taskItem.setTaskId(task.getId())
                         .setOrderType(OrderType.ORDER_RECEIPT.type)
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 68564a7..efd3d05 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -12,7 +12,7 @@
       matching-strategy: ANT_PATH_MATCHER
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-#    url: jdbc:mysql://192.168.0.116:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+#    url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
 #    username: rsf

--
Gitblit v1.9.1