Ver código fonte

修改订单导出数据重复问题

yh 3 dias atrás
pai
commit
5a789c4de4

+ 3 - 0
fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java

@@ -1196,4 +1196,7 @@ public interface FsStoreOrderMapper
     FsStoreOrderAmountStatsVo selectFsStoreOrderAmountStats(FsStoreOrderAmountStatsQueryDto queryDto);
 
     List<FsStoreOrder> selectOutTimeOrderList(@Param("unPayTime")Integer unPayTime);
+
+    List<Map<String, Object>> selectOrderItemsByOrderIds(@Param("orderIds") List<Long> orderIds);
+
 }

+ 28 - 3
fs-service/src/main/java/com/fs/his/service/impl/FsExportTaskServiceImpl.java

@@ -6,6 +6,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
@@ -234,12 +235,36 @@ public class FsExportTaskServiceImpl implements IFsExportTaskService
                 if (vo.getUserAddress() != null && !isCheckAddress) {
                     vo.setUserAddress(ParseUtils.parseAddress(vo.getUserAddress()));
                 }
+            }
+
+            if (filter.contains("countGoods")) {
+                List<Long> orderIds = erpList.stream()
+                        .map(FsStoreOrderErpExportVO::getOrderId)
+                        .collect(Collectors.toList());
+
+                if (orderIds.size() > 0) {
+                    List<Map<String, Object>> orderItemList =
+                            fsStoreOrderMapper.selectOrderItemsByOrderIds(orderIds);
+
+                    Map<Long, List<Map<String, Object>>> groupByOrderId = orderItemList.stream()
+                            .collect(Collectors.groupingBy(it -> Long.valueOf(it.get("order_id").toString())));
 
-                if (StringUtils.isNotEmpty(vo.getCountGoods())){
-                    JSONObject jsonInfo = JSONObject.parseObject(vo.getCountGoods());
-                    vo.setCountGoods(jsonInfo.getString("productName") + "*" + vo.getGoodsNum());
+                    for (FsStoreOrderErpExportVO vo : erpList) {
+                        List<Map<String, Object>> items = groupByOrderId.get(vo.getOrderId());
+
+                        if (items != null) {
+                            String goods = items.stream()
+                                    .map(item -> {
+                                        JSONObject jsonInfo = JSONObject.parseObject(item.get("json_info").toString());
+                                        return jsonInfo.getString("productName") + "*" + jsonInfo.getString("num");
+                                    })
+                                    .collect(Collectors.joining(","));
+                            vo.setCountGoods(goods);
+                        }
+                    }
                 }
             }
+
         }
 
         // 动态导出:根据选中的字段生成Excel

+ 10 - 3
fs-service/src/main/resources/mapper/his/FsStoreOrderMapper.xml

@@ -1410,8 +1410,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         cu.nick_name AS company_user_nick_name,
         cts.name AS schedule_name,
         st.store_name,df.login_account as erp_account,
-        soi.json_info countGoods,
-        soi.num goodsNum,
         csc.name miniProgramName
         FROM fs_store_order so
         LEFT JOIN fs_store st ON so.store_id = st.store_id
@@ -1423,7 +1421,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN company_tcm_schedule cts ON cts.id = so.schedule_id
         LEFT JOIN fs_patient pat ON pat.patient_id = p.patient_id
         LEFT JOIN fs_store_order_df df on df.order_id=so.order_id
-        LEFT JOIN fs_store_order_item soi on soi.order_id=so.order_id
         LEFT JOIN (
         SELECT
         sp.*,
@@ -2159,4 +2156,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where is_del = 0 and status = 1 and NOW() &gt; DATE_ADD(create_time, INTERVAL ${unPayTime} MINUTE)
     </select>
 
+    <select id="selectOrderItemsByOrderIds" resultType="java.util.Map">
+        SELECT order_id, json_info, num
+        FROM fs_store_order_item
+        WHERE order_id IN
+        <foreach collection="orderIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
+
 </mapper>