Prechádzať zdrojové kódy

分公司数据接口 和卓美配置文件

yuhongqi 2 dní pred
rodič
commit
6421fa5afa

+ 64 - 64
fs-service/src/main/java/com/fs/live/service/impl/LiveDataServiceImpl.java

@@ -24,7 +24,11 @@ import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.course.domain.FsUserCompanyUser;
 import com.fs.course.mapper.FsUserCompanyUserMapper;
 import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.hisStore.mapper.FsStoreProductScrmMapper;
+import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
+import com.fs.hisStore.mapper.FsStoreOrderItemScrmMapper;
+import com.fs.hisStore.vo.FsStoreOrderItemVO;
 import java.util.stream.Collectors;
 import java.util.function.BiConsumer;
 
@@ -92,7 +96,9 @@ public class LiveDataServiceImpl implements ILiveDataService {
     @Autowired
     private CompanyUserMapper companyUserMapper;
     @Autowired
-    private LiveOrderMapper liveOrderMapper;
+    private FsStoreOrderScrmMapper fsStoreOrderScrmMapper;
+    @Autowired
+    private FsStoreOrderItemScrmMapper fsStoreOrderItemScrmMapper;
 
     /* 直播大屏展示 数据接口 */
     @Override
@@ -1139,36 +1145,29 @@ public class LiveDataServiceImpl implements ILiveDataService {
             detailVo.setLivePeak(liveData.getPeakConcurrentViewers());
         }
 
-        // 查询订单数据
-        LiveOrderMapper liveOrderMapper = SpringUtils.getBean(LiveOrderMapper.class);
-        LiveOrder orderQuery = new LiveOrder();
-        orderQuery.setLiveId(liveId);
-        List<LiveOrder> orders = liveOrderMapper.selectLiveOrderList(orderQuery);
+        // 查询订单数据(fs_store_order_scrm,order_type=2,remark=liveId)
+        FsStoreOrderScrm orderQuery = new FsStoreOrderScrm();
+        orderQuery.setOrderType(2);
+        orderQuery.setRemark(String.valueOf(liveId));
+        List<FsStoreOrderScrm> orders = fsStoreOrderScrmMapper.selectFsStoreOrderList(orderQuery);
 
         BigDecimal gmv = orders.stream()
-                .filter(o -> "1".equals(o.getIsPay()))
-                .map(LiveOrder::getPayPrice)
+                .filter(o -> o.getPaid() != null && (o.getPaid() == 1 || "1".equals(String.valueOf(o.getPaid()))))
+                .map(FsStoreOrderScrm::getPayPrice)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
         detailVo.setGmv(gmv);
 
         long paidUsers = orders.stream()
-                .filter(o -> "1".equals(o.getIsPay()))
-                .filter(o -> o.getUserId() != null && !o.getUserId().isEmpty())
-                .map(o -> {
-                    try {
-                        return Long.parseLong(o.getUserId());
-                    } catch (NumberFormatException e) {
-                        return null;
-                    }
-                })
-                .filter(Objects::nonNull)
+                .filter(o -> o.getPaid() != null && (o.getPaid() == 1 || "1".equals(String.valueOf(o.getPaid()))))
+                .filter(o -> o.getUserId() != null)
+                .map(FsStoreOrderScrm::getUserId)
                 .distinct()
                 .count();
         detailVo.setPaidUsers(paidUsers);
 
         long paidOrders = orders.stream()
-                .filter(o -> "1".equals(o.getIsPay()))
+                .filter(o -> o.getPaid() != null && (o.getPaid() == 1 || "1".equals(String.valueOf(o.getPaid()))))
                 .count();
         detailVo.setPaidOrders(paidOrders);
 
@@ -1200,9 +1199,11 @@ public class LiveDataServiceImpl implements ILiveDataService {
         // 查询观看用户
         List<LiveWatchUser> watchUsers = liveWatchUserMapper.selectLiveWatchUserListByLiveId(liveId);
 
-        LiveOrder orderQuery = new LiveOrder();
-        orderQuery.setLiveId(liveId);
-        List<LiveOrder> orders = liveOrderMapper.selectLiveOrderList(orderQuery);
+        // 查询订单数据(fs_store_order_scrm,order_type=2,remark=liveId)
+        FsStoreOrderScrm orderQuery = new FsStoreOrderScrm();
+        orderQuery.setOrderType(2);
+        orderQuery.setRemark(String.valueOf(liveId));
+        List<FsStoreOrderScrm> orders = fsStoreOrderScrmMapper.selectFsStoreOrderList(orderQuery);
 
 
         // 按用户ID分组统计
@@ -1254,28 +1255,15 @@ public class LiveDataServiceImpl implements ILiveDataService {
             }
         }
 
-        // 统计订单数据
-        Map<Long, List<LiveOrder>> userOrdersMap = orders.stream()
-                .filter(o -> o.getUserId() != null && !o.getUserId().isEmpty())
-                .filter(o -> {
-                    try {
-                        Long.parseLong(o.getUserId());
-                        return true;
-                    } catch (NumberFormatException e) {
-                        return false;
-                    }
-                })
-                .collect(Collectors.groupingBy(o -> {
-                    try {
-                        return Long.parseLong(o.getUserId());
-                    } catch (NumberFormatException e) {
-                        return 0L;
-                    }
-                }));
+        // 统计订单数据(仅已支付订单)
+        Map<Long, List<FsStoreOrderScrm>> userOrdersMap = orders.stream()
+                .filter(o -> o.getUserId() != null)
+                .filter(o -> o.getPaid() != null && (o.getPaid() == 1 || "1".equals(String.valueOf(o.getPaid()))))
+                .collect(Collectors.groupingBy(FsStoreOrderScrm::getUserId));
 
-        for (Map.Entry<Long, List<LiveOrder>> entry : userOrdersMap.entrySet()) {
+        for (Map.Entry<Long, List<FsStoreOrderScrm>> entry : userOrdersMap.entrySet()) {
             Long userId = entry.getKey();
-            List<LiveOrder> userOrders = entry.getValue();
+            List<FsStoreOrderScrm> userOrders = entry.getValue();
 
             LiveUserDetailVo userDetail = userDetailMap.computeIfAbsent(userId, k -> {
                 LiveUserDetailVo vo = new LiveUserDetailVo();
@@ -1310,8 +1298,7 @@ public class LiveDataServiceImpl implements ILiveDataService {
 
             userDetail.setOrderCount((long) userOrders.size());
             BigDecimal orderAmount = userOrders.stream()
-                    .filter(o -> "1".equals(o.getIsPay()))
-                    .map(LiveOrder::getPayPrice)
+                    .map(FsStoreOrderScrm::getPayPrice)
                     .filter(Objects::nonNull)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
             userDetail.setOrderAmount(orderAmount);
@@ -1329,37 +1316,50 @@ public class LiveDataServiceImpl implements ILiveDataService {
     }
 
     /**
-     * 查询单品销量统计
+     * 查询单品销量统计(从 fs_store_order_scrm,order_type=2,remark=liveId,按订单明细汇总)
      */
     private List<ProductSalesVo> getProductSalesList(Long liveId) {
-
-        List<LiveOrder> orders = liveOrderMapper.selectOrderByLiveId(liveId);
+        FsStoreOrderScrm orderQuery = new FsStoreOrderScrm();
+        orderQuery.setOrderType(2);
+        orderQuery.setRemark(String.valueOf(liveId));
+        List<FsStoreOrderScrm> orders = fsStoreOrderScrmMapper.selectFsStoreOrderList(orderQuery);
 
         // 按商品ID分组统计
         Map<Long, ProductSalesVo> productSalesMap = new HashMap<>();
 
-        for (LiveOrder order : orders) {
-            if (!"1".equals(order.getIsPay()) || order.getProductId() == null) {
+        for (FsStoreOrderScrm order : orders) {
+            if (order.getPaid() == null || (order.getPaid() != 1 && !"1".equals(String.valueOf(order.getPaid())))) {
+                continue;
+            }
+            List<FsStoreOrderItemVO> items = fsStoreOrderItemScrmMapper.selectFsStoreOrderItemListByOrderId(order.getId());
+            if (items == null || items.isEmpty()) {
                 continue;
             }
+            long totalNum = order.getTotalNum() != null && order.getTotalNum() > 0 ? order.getTotalNum() : 1;
+            BigDecimal orderPayPrice = order.getPayPrice() != null ? order.getPayPrice() : BigDecimal.ZERO;
 
-            ProductSalesVo productSales = productSalesMap.computeIfAbsent(order.getProductId(), k -> {
-                ProductSalesVo vo = new ProductSalesVo();
-                vo.setProductId(order.getProductId());
-                // 查询商品名称
-                FsStoreProductScrmMapper productMapper = SpringUtils.getBean(FsStoreProductScrmMapper.class);
-                FsStoreProductScrm product = productMapper.selectFsStoreProductById(order.getProductId());
-                if (product != null) {
-                    vo.setProductName(product.getProductName());
-                } else {
-                    vo.setProductName("未知商品");
+            for (FsStoreOrderItemVO item : items) {
+                if (item.getProductId() == null) {
+                    continue;
                 }
-                return vo;
-            });
+                long itemNum = item.getNum() != null ? item.getNum() : 0;
+                BigDecimal itemAmount = totalNum > 0 ? orderPayPrice.multiply(BigDecimal.valueOf(itemNum)).divide(BigDecimal.valueOf(totalNum), 2, RoundingMode.HALF_UP) : BigDecimal.ZERO;
+
+                ProductSalesVo productSales = productSalesMap.computeIfAbsent(item.getProductId(), k -> {
+                    ProductSalesVo vo = new ProductSalesVo();
+                    vo.setProductId(item.getProductId());
+                    FsStoreProductScrmMapper productMapper = SpringUtils.getBean(FsStoreProductScrmMapper.class);
+                    FsStoreProductScrm product = productMapper.selectFsStoreProductById(item.getProductId());
+                    if (product != null) {
+                        vo.setProductName(product.getProductName());
+                    } else {
+                        vo.setProductName("未知商品");
+                    }
+                    return vo;
+                });
 
-            productSales.setSalesCount(productSales.getSalesCount() + 1);
-            if (order.getPayPrice() != null) {
-                productSales.setSalesAmount(productSales.getSalesAmount().add(order.getPayPrice()));
+                productSales.setSalesCount(productSales.getSalesCount() + itemNum);
+                productSales.setSalesAmount(productSales.getSalesAmount().add(itemAmount));
             }
         }
 

+ 1 - 0
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -4216,6 +4216,7 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
         storeOrder.setTuiUserId(liveOrder.getTuiUserId());
         storeOrder.setStoreId(liveOrder.getStoreId());
         storeOrder.setMark(liveOrder.getRemark());
+        storeOrder.setRemark(String.valueOf(liveOrder.getLiveId()));
     }
 
     public void deStockIncSale(List<FsStoreCartQueryVO> cartInfo) {

+ 1 - 0
fs-service/src/main/resources/application-config-druid-bjzm-test.yml

@@ -97,6 +97,7 @@ headerImg:
 
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
+  wxIpadUrl:
   aiApi: 1212121212
   voiceApi:
   commonApi:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-bjzm.yml

@@ -92,6 +92,7 @@ headerImg:
 
 ipad:
   ipadUrl: http://aipad.klbycp.com
+  wxIpadUrl:
   aiApi: http://49.232.181.28:3000/api
   voiceApi:
   commonApi:

+ 1 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -154,6 +154,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deliveryTime != null "> and delivery_time = #{deliveryTime}</if>
             <if test="deliveryImportTime != null "> and delivery_import_time = #{deliveryImportTime}</if>
             <if test="backendEditProductType != null "> and backend_edit_product_type = #{backendEditProductType}</if>
+            <if test="remark != null and remark != ''"> and remark = #{remark}</if>
         </where>
     </select>
 

+ 46 - 36
fs-service/src/main/resources/mapper/live/LiveDataMapper.xml

@@ -302,37 +302,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             END) AS playbackCompletedCourses,
             COALESCE((
                 SELECT SUM( pay_price)
-                FROM live_order
-                WHERE live_id IN
+                FROM fs_store_order_scrm
+                WHERE order_type = 2
+                AND remark IN
                 <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
                     #{liveId}
                 </foreach>
-                AND is_pay = '1'
+                AND (paid = 1 OR paid = '1')
             ), 0) AS gmv,
             COALESCE((
                 select sum(acs.paid) from (SELECT COUNT(DISTINCT user_id) as paid
-                    FROM live_order
-                    WHERE live_id IN
+                    FROM fs_store_order_scrm
+                    WHERE order_type = 2
+                    AND remark IN
                     <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
                         #{liveId}
                     </foreach>
-                    AND is_pay = '1'
-                    group by live_id
+                    AND (paid = 1 OR paid = '1')
+                    group by remark
                 ) acs
             ), 0) AS paidUsers,
             COALESCE((
-                SELECT COUNT(DISTINCT order_id)
-                FROM live_order
-                WHERE live_id IN
+                SELECT COUNT(DISTINCT id)
+                FROM fs_store_order_scrm
+                WHERE order_type = 2
+                AND remark IN
                 <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
                     #{liveId}
                 </foreach>
-                AND is_pay = '1'
+                AND (paid = 1 OR paid = '1')
             ), 0) AS paidOrders,
             COALESCE((
-                SELECT COUNT(DISTINCT order_id)
-                FROM live_order
-                WHERE live_id IN
+                SELECT COUNT(DISTINCT id)
+                FROM fs_store_order_scrm
+                WHERE order_type = 2
+                AND remark IN
                 <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
                     #{liveId}
                 </foreach>
@@ -391,13 +395,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) video_duration ON l.live_id = video_duration.live_id
         LEFT JOIN (
             SELECT
-                live_id,
-                SUM( case when is_pay = '1' then pay_price else 0 end) AS gmv,
-                COUNT(distinct CASE WHEN is_pay = '1' THEN user_id END) AS paidUsers,
-                sum(CASE WHEN is_pay = '1' THEN 1 else 0 END) AS paidOrders,
-                COUNT(DISTINCT order_id) AS salesCount
-            FROM live_order
-            GROUP BY live_id
+                remark AS live_id,
+                SUM( case when (paid = 1 OR paid = '1') then pay_price else 0 end) AS gmv,
+                COUNT(distinct CASE WHEN (paid = 1 OR paid = '1') THEN user_id END) AS paidUsers,
+                sum(CASE WHEN (paid = 1 OR paid = '1') THEN 1 else 0 END) AS paidOrders,
+                COUNT(DISTINCT id) AS salesCount
+            FROM fs_store_order_scrm
+            WHERE order_type = 2
+            AND remark IN
+            <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
+                #{liveId}
+            </foreach>
+            GROUP BY remark
         ) order_stats ON l.live_id = order_stats.live_id
         WHERE l.live_id IN
         <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
@@ -520,12 +529,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) user_duration ON l.live_id = user_duration.live_id AND lwu.user_id = user_duration.user_id
         LEFT JOIN (
             SELECT
-                live_id,
-                SUM(CASE WHEN is_pay = '1' THEN pay_price ELSE 0 END) AS gmv,
-                COUNT(DISTINCT CASE WHEN is_pay = '1' THEN user_id END) AS paidUsers,
-                SUM(CASE WHEN is_pay = '1' THEN 1 ELSE 0 END) AS paidOrders
-            FROM live_order
-            GROUP BY live_id
+                remark AS live_id,
+                SUM(CASE WHEN (paid = 1 OR paid = '1') THEN pay_price ELSE 0 END) AS gmv,
+                COUNT(DISTINCT CASE WHEN (paid = 1 OR paid = '1') THEN user_id END) AS paidUsers,
+                SUM(CASE WHEN (paid = 1 OR paid = '1') THEN 1 ELSE 0 END) AS paidOrders
+            FROM fs_store_order_scrm
+            WHERE order_type = 2 AND remark = #{liveId}
+            GROUP BY remark
         ) order_stats ON l.live_id = order_stats.live_id
         WHERE l.live_id = #{liveId}
     </select>
@@ -545,11 +555,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN fs_user u ON lwu.user_id = u.user_id
         LEFT JOIN (
             SELECT
-                CAST(user_id AS UNSIGNED) AS user_id,
-                COUNT(DISTINCT order_id) AS orderCount,
-                SUM(CASE WHEN is_pay = '1' THEN pay_price ELSE 0 END) AS orderAmount
-            FROM live_order
-            WHERE live_id = #{liveId} AND user_id IS NOT NULL AND user_id != ''
+                user_id,
+                COUNT(DISTINCT id) AS orderCount,
+                SUM(CASE WHEN (paid = 1 OR paid = '1') THEN pay_price ELSE 0 END) AS orderAmount
+            FROM fs_store_order_scrm
+            WHERE order_type = 2 AND remark = #{liveId} AND user_id IS NOT NULL
             GROUP BY user_id
         ) order_info ON lwu.user_id = order_info.user_id
         left join live_user_first_entry lufe on lwu.live_id = lufe.live_id and lwu.user_id = lufe.user_id
@@ -751,12 +761,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT
             lo.company_id AS companyId,
             COALESCE(c.company_name, '总台') AS companyName,
-            COALESCE(SUM(CASE WHEN lo.is_pay = '1' THEN lo.pay_price ELSE 0 END), 0) AS gmv,
-            COALESCE(COUNT(DISTINCT lo.order_id), 0) AS orderCount,
+            COALESCE(SUM(CASE WHEN lo.paid = '1' THEN lo.pay_price ELSE 0 END), 0) AS gmv,
+            COALESCE(COUNT(DISTINCT lo.id), 0) AS orderCount,
             COALESCE(COUNT(DISTINCT lo.user_id), 0) AS orderUserCount
-        FROM live_order lo
+        FROM fs_store_order_scrm lo
                  LEFT JOIN company c ON lo.company_id = c.company_id
-        WHERE lo.live_id IN
+        WHERE lo.order_type = 2 and lo.remark IN
         <foreach collection="liveIds" item="liveId" open="(" separator="," close=")">
             #{liveId}
         </foreach>

+ 37 - 0
fs-user-app/src/main/java/com/fs/app/controller/IndexController.java

@@ -24,7 +24,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 @Api("首页接口")
@@ -141,6 +144,40 @@ public class IndexController extends AppBaseController {
 		return R.ok().put("data",chineseMedicine);
 	}
 
+	/**
+	 * 首页初始化核心数据(频道入口、分类标签、商品分类导航)
+	 * 合并请求,提升首屏加载速度
+	 */
+	@ApiOperation("首页初始化")
+	@GetMapping("/home/init")
+	public R homeInit() {
+		Map<String, Object> data = new HashMap<>();
+		data.put("channelList", Collections.emptyList());
+		data.put("categoryTags", Collections.emptyList());
+		data.put("goodsNav", Collections.emptyList());
+		return R.ok().put("data", data);
+	}
+
+	/**
+	 * 首页推荐区块(直播中、上新推荐等,可延迟加载)
+	 */
+	@ApiOperation("首页推荐区块")
+	@GetMapping("/home/recommend")
+	public R homeRecommend() {
+		return R.ok().put("data", Collections.emptyList());
+	}
+
+	/**
+	 * 首页商品列表(支持分类参数,可延迟/懒加载)
+	 */
+	@ApiOperation("首页商品列表")
+	@GetMapping("/home/goods")
+	public R homeGoods(@RequestParam(value = "category", defaultValue = "全部") String category,
+					  @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+					  @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
+		return R.ok().put("data", Collections.emptyList());
+	}
+
 	@ApiOperation("企业理念")
 	@GetMapping("/getConcept")
 	@Cacheable("getConcept")