Browse Source

解决出运明细保存慢的问题

zengtx 2 years ago
parent
commit
45b0be40a3

+ 55 - 34
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/service/impl/SyShippingDetailsServiceImpl.java

@@ -83,7 +83,7 @@ public class SyShippingDetailsServiceImpl extends ServiceImpl<SyShippingDetailsM
          //设置单据号(F2206201305854)
         if(oConvertUtils.isEmpty(syId)){
         SimpleDateFormat sf = new SimpleDateFormat("yyMMddHHmmss");
-            SimpleDateFormat sf1 = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sf1 = new SimpleDateFormat("yyyy-MM-dd");
         String createTime = sf.format(new Date());
         syShippingDetails.setDocumentNo("F"+createTime);
         syShippingDetails.setState("0");//状态
@@ -97,23 +97,39 @@ public class SyShippingDetailsServiceImpl extends ServiceImpl<SyShippingDetailsM
         //订单子表明细ID集合(单条)
         List<String> stringList = new ArrayList<>();
 
-        QueryWrapper<OrderDataVo> queryWrapper = new QueryWrapper<>();
+        List<String> paramList = new ArrayList<>();
         Page<OrderDataVo> page = new Page<OrderDataVo>(1, -1);
         //查询订单数据
         List<String> itemId = syShippingDetails.getItemId();
         for(String ids:itemId){
-
+            //报关要素ID
+            String elementId = "";
+            //根据每一行分组订单ID进行拆分
             String itemIdSplit[] = ids.split(",");
+
             for (String li:itemIdSplit){
                 stringList.add(li);
+                paramList.add(li);
             }
-            queryWrapper.in("b.id",stringList).eq("a.del_flag",0);
+            //查询每条订单明细
+            QueryWrapper<OrderDataVo> queryWrapper = new QueryWrapper<>();
+            queryWrapper.in("b.id",stringList).eq("a.del_flag",0).orderByDesc("b.create_time");
             IPage<OrderDataVo> pageList = syShippingDetailsMapper.displayDetails(page, queryWrapper);
 
-            //清空集合
-            stringList.clear();
+
             String gourpid = oConvertUtils.id();
 
+            //获取报关要素ID
+            //根据条件查询报关要素信息(2023.03.14现改为:订单号+款号+账套+物料)
+            QueryWrapper<SyDeclarationElements> elementsQueryWrapper = new QueryWrapper<>();
+            elementsQueryWrapper.eq("order_number",pageList.getRecords().get(0).getOrderNumber()).eq("ac_set_no",pageList.getRecords().get(0).getOmpoAccount()).eq("item_number",pageList.getRecords().get(0).getItemNumber()).eq("del_flag",0).eq("inventory_code",pageList.getRecords().get(0).getInventoryCode());
+            elementsQueryWrapper.orderByDesc("create_time");
+            List<SyDeclarationElements> elementsList = syDeclarationElementsService.list(elementsQueryWrapper);
+            if(elementsList.size() != 0){
+                //获取最新一条ID
+                elementId = elementsList.get(0).getId();
+            }
+
             for (OrderDataVo li:pageList.getRecords()){
                 //实现构造函数方法赋值
                 SyShippingDetailsItem entity = new SyShippingDetailsItem(li);
@@ -125,16 +141,21 @@ public class SyShippingDetailsServiceImpl extends ServiceImpl<SyShippingDetailsM
 
                 //设置物料成分 和 是否TC
                 //根据款号物料名称查询相同数据并赋值,(2023.03.14现改为:订单号+款号+账套+物料)
-                QueryWrapper<SyShippingDetailsItem> queryWrapper1 = new QueryWrapper<>();
-                queryWrapper1.eq("item_number",li.getItemNumber()).eq("order_number",li.getOrderNumber()).eq("del_flag",0).eq("inventory_code",li.getInventoryCode());
-                queryWrapper1.orderByDesc("create_time");
-                List<SyShippingDetailsItem> list = syShippingDetailsItemService.list(queryWrapper1);
-                if(list.size()!=0){
-                    SyShippingDetailsItem itemEntity = list.get(0);
-                    entity.setMaterialComposition(itemEntity.getMaterialComposition());
-                    entity.setIsTc(itemEntity.getIsTc());
+//                QueryWrapper<SyShippingDetailsItem> queryWrapper1 = new QueryWrapper<>();
+//                queryWrapper1.eq("item_number",li.getItemNumber()).eq("order_number",li.getOrderNumber()).eq("del_flag",0).eq("inventory_code",li.getInventoryCode());
+//                queryWrapper1.orderByDesc("create_time");
+//                List<SyShippingDetailsItem> list = syShippingDetailsItemService.list(queryWrapper1);
+//                if(list.size()!=0){
+//                    SyShippingDetailsItem itemEntity = list.get(0);
+//                    entity.setMaterialComposition(itemEntity.getMaterialComposition());
+//                    entity.setIsTc(itemEntity.getIsTc());
+//                }
+                //设置物料成份
+                if(entity.getInventoryCcode().substring(0,2).equals("19")){
+                    entity.setMaterialComposition(entity.getSpecificationAndModel());//取规格型号
+                }else{
+                    entity.setMaterialComposition(entity.getInventoryName());//取存货名称
                 }
-
                 //设置排序
                 entity.setSort(sort);
                 //设置主表自建
@@ -152,36 +173,36 @@ public class SyShippingDetailsServiceImpl extends ServiceImpl<SyShippingDetailsM
                 BigDecimal customsDeclarationUnitPrice = li.getUnitPriceIncludingTax().subtract(yj);
                 entity.setCustomsDeclarationUnitPrice(customsDeclarationUnitPrice);
 
-                //获取报关要素ID
-                //根据条件查询报关要素信息(2023.03.14现改为:订单号+款号+账套+物料)
-                QueryWrapper<SyDeclarationElements> elementsQueryWrapper = new QueryWrapper<>();
-                elementsQueryWrapper.eq("order_number",li.getOrderNumber()).eq("ac_set_no",li.getOmpoAccount()).eq("item_number",li.getItemNumber()).eq("del_flag",0).eq("inventory_code",li.getInventoryCode());
-                elementsQueryWrapper.orderByDesc("create_time");
-                List<SyDeclarationElements> elementsList = syDeclarationElementsService.list(elementsQueryWrapper);
-                if(elementsList.size() != 0){
-                    //获取最新一条ID
-                    String elementId = elementsList.get(0).getId();
-                    entity.setElementsId(elementId);
-                }
+                //报关要素
+                entity.setElementsId(elementId);
 
                 syShippingDetailsItemList.add(entity);
+
                 //设置主表客户
                 syShippingDetails.setCustomer(li.getCustomerName());
 
-                //回写订单剩余数量
-                //查询订单子表信息
-                SyOrderDataItem orderDataItem = syOrderDataItemService.getById(li.getSyOrderDataItemId());
+                //SyOrderDataItem orderDataItem = syOrderDataItemService.getById(li.getSyOrderDataItemId());
                 //直接设置为0,因为参照直接生成单据,数量不能更改,所以剩余数量会全部参照完
-                orderDataItem.setSurplusNum(orderDataItem.getSurplusNum().subtract(li.getQuantity()));
-                syOrderDataItemService.updateById(orderDataItem);
+                //orderDataItem.setSurplusNum(orderDataItem.getSurplusNum().subtract(li.getQuantity()));
+                //syOrderDataItemService.updateById(orderDataItem);
+
             }
 
+
+           // syShippingDetailsMapper.updateSurplusNum(stringList);
+            //清空集合
+            stringList.clear();
         }
+        //回写订单剩余数量,直接设置为0
+        QueryWrapper<SyOrderDataItem> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("id", paramList);
+        SyOrderDataItem dataItem = new SyOrderDataItem();
+        dataItem.setSurplusNum(BigDecimal.ZERO);
+        syOrderDataItemService.update(dataItem, queryWrapper);
+
         if(syShippingDetailsItemList.size()!=0){
                  syShippingDetailsItemService.saveBatch(syShippingDetailsItemList);
-
-             }
-
+        }
         boolean ok = save(syShippingDetails);
         if(ok){
             return syShippingDetails;