Browse Source

管乐迷商城改造

zouxuan 1 năm trước cách đây
mục cha
commit
abbc73f665

+ 1 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java

@@ -243,7 +243,5 @@ public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
 
     List<String> getMallProductCategory(@Param("database") String database);
 
-    void updateShippedStatus(@Param("orderNos") List<String> orderNos);
-
-    void updateOrganGoodsCost(@Param("skuSync") OrderSkuSync.SkuSync skuSync, @Param("orderNo") String orderNo);
+    List<SellOrder> queryByOrganNos(@Param("orderNos") List<String> orderNos);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -764,7 +764,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                 sellOrder.setNum(1);
                 sellOrder.setGoodsName(productDto.getName());
                 sellOrder.setAccountType(accountType);
-                sellOrder.setOrganSellCost(goodsSub.getGoodsPrice());
+                sellOrder.setSellCost(goodsSub.getGoodsPrice());
                 sellOrder.setOrganId(order.getOrganId());
                 sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
                 sellOrder.setEduTeacherId(musicGroup.getEducationalTeacherId());

+ 49 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -2205,11 +2205,58 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateShippedStatus(List<OrderSkuSync> orderSkuSyncs) {
+        if (CollectionUtils.isEmpty(orderSkuSyncs)) {
+            return;
+        }
+        List<String> orderNos = orderSkuSyncs.stream().map(e -> e.getOrderNo()).collect(Collectors.toList());
+        List<SellOrder> sellOrders = sellOrderDao.queryByOrganNos(orderNos);
+        if (CollectionUtils.isEmpty(sellOrders)) {
+            throw new BizException("订单不存在");
+        }
+        sellOrders = sellOrders.stream().filter(e -> e.getOrganSellCost() == null).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(sellOrders)){
+            return;
+        }
+        Map<String,List<SellOrder>> sellOrderMap = sellOrders.stream().collect(Collectors.groupingBy(SellOrder::getOrderNo));
+        Map<String,Map<Long,BigDecimal>> skuCostMap = new HashMap<>(orderSkuSyncs.size());
         for (OrderSkuSync orderSkuSync : orderSkuSyncs) {
-            for (int i = 0; i < orderSkuSync.getSkuSyncList().size(); i++) {
-                sellOrderDao.updateOrganGoodsCost(orderSkuSync.getSkuSyncList().get(i), orderSkuSync.getOrderNo());
+            List<SellOrder> dtos = sellOrderMap.get(orderSkuSync.getOrderNo());
+            if(CollectionUtils.isEmpty(dtos)){
+                continue;
+            }
+            //获取sku平均成本价
+            Map<Long,List<OrderSkuSync.SkuSync>> skuMap = orderSkuSync.getSkuSyncList().stream().collect(Collectors.groupingBy(OrderSkuSync.SkuSync::getSku));
+            for (Long skuId : skuMap.keySet()) {
+                List<OrderSkuSync.SkuSync> skuSyncs = skuMap.get(skuId);
+                //汇总成本价
+                BigDecimal costPrice = skuSyncs.stream().map(e -> e.getPrice().multiply(new BigDecimal(e.getCount()))).reduce(BigDecimal.ZERO, BigDecimal::add);
+                //获取总数
+                int count = skuSyncs.stream().mapToInt(e -> e.getCount()).sum();
+                BigDecimal avgCostPrice = costPrice;
+                if (count > 1) {
+                    avgCostPrice = costPrice.divide(new BigDecimal(count), 2, BigDecimal.ROUND_HALF_UP);
+                }
+                Map<Long,BigDecimal> costMap = new HashMap<>(1);
+                costMap.put(skuId,avgCostPrice);
+                skuCostMap.put(orderSkuSync.getOrderNo(),costMap);
+            }
+        }
+        Date now = new Date();
+        String format = DateUtil.format(now, DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        for (String orderNo : sellOrderMap.keySet()) {
+            List<SellOrder> sellOrderList = sellOrderMap.get(orderNo);
+            Map<Long,BigDecimal> costMap = skuCostMap.get(orderNo);
+            for (SellOrder sellOrder : sellOrderList) {
+                BigDecimal costPrice = costMap.get(sellOrder.getGoodsSkuId().longValue());
+                if(costPrice == null){
+                    throw new BizException("商品[{}]成本价不存在",sellOrder.getGoodsSkuId());
+                }
+                sellOrder.setOrganSellCost(costPrice);
+                sellOrder.setDeliveryTime(format);
             }
         }
+        sellOrderDao.batchUpdate(sellOrders);
+
     }
 
     public BigDecimal getActualAmount(BigDecimal price, StudentPaymentOrderExportDto row) {

+ 9 - 10
mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml

@@ -270,21 +270,14 @@
                 <if test="sellOrder.goodsSkuId != null">
                     goods_sku_id_ = #{sellOrder.goodsSkuId},
                 </if>
+                <if test="sellOrder.deliveryTime != null and sellOrder.deliveryTime != ''">
+                    delivery_time_ = #{sellOrder.deliveryTime},
+                </if>
                 update_time_ = NOW()
             </set>
             where id_ = #{sellOrder.id} and tenant_id_ = #{sellOrder.tenantId}
         </foreach>
     </update>
-    <update id="updateShippedStatus">
-        update sell_order SET delivery_time_ = NOW() where order_no_ IN
-        <foreach collection="orderNos" item="orderNo" open="(" close=")" separator=",">
-            #{orderNo}
-        </foreach>
-    </update>
-    <update id="updateOrganGoodsCost">
-        update sell_order SET organ_sell_cost_ = #{skuSync.price} ,delivery_time_ = NOW()
-                          where order_no_ = #{orderNo} AND goods_sku_id_ = #{skuSync.sku} AND  organ_sell_cost_ IS NULL
-    </update>
 
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
         insert into sell_order (organ_id_, cooperation_organ_id_, trans_no_,order_id_, order_no_, expect_amount_,
@@ -703,5 +696,11 @@
     <select id="getMallProductCategory" resultType="java.lang.String">
         select name from mec_mall.pms_product_category where parent_id = 0
     </select>
+    <select id="queryByOrganNos" resultMap="SellOrder">
+        SELECT * FROM sell_order WHERE order_no_ IN
+        <foreach collection="orderNos" item="orderNo" open="(" close=")" separator=",">
+            #{orderNo}
+        </foreach>
+    </select>
 
 </mapper>