Ver código fonte

放开订单

wang 3 semanas atrás
pai
commit
c816d87b91

+ 9 - 4
yami-shop-api/src/main/java/com/yami/shop/api/controller/ProdController.java

@@ -32,6 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -53,20 +54,23 @@ public class ProdController {
     private ProdCommService prodCommService;
 
 
-
     @GetMapping("/prodInfo")
     @ApiOperation(value = "商品详情信息", notes = "根据商品ID(prodId)获取商品信息")
     @ApiImplicitParam(name = "prodId", value = "商品ID", required = true, dataType = "Long")
-    public ResponseEntity<ProductDto> prodInfo(Long prodId) {
+    public ResponseEntity<ProductDto> prodInfo(Long prodId, Integer platform, Long shopId) {
 
         Product product = prodService.getProductByProdId(prodId);
         if (product == null || product.getStatus() != 1) {
             throw new GlobalException("商品已下线");
         }
 
-        List<Sku> skuList = skuService.listByProdId(prodId);
+        List<Sku> skuList = skuService.listByProdId(prodId, platform, shopId);
         // 启用的sku列表
-        List<Sku> useSkuList = skuList.stream().filter(sku -> sku.getStatus() == 1).collect(Collectors.toList());
+        List<Sku> useSkuList = skuList.stream().sorted(Comparator.comparing(
+                Sku::getPrice,
+                Comparator.nullsFirst(Comparator.naturalOrder())
+        )).peek((sku) -> product.setTotalStocks(product.getTotalStocks() + sku.getActualStocks())).collect(Collectors.toList());
+        product.setPrice(useSkuList.get(0).getPrice());
         product.setSkuList(useSkuList);
 //        ProductDto productDto = mapperFacade.map(product, ProductDto.class);
         ProductDto productDto = new ProductDto();
@@ -135,6 +139,7 @@ public class ProdController {
     public ResponseEntity<IPage<ProdCommDto>> getProdCommPageByProdId(PageParam page, Long prodId, Integer evaluate) {
         return ResponseEntity.ok(prodCommService.getProdCommDtoPageByProdId(page, prodId, evaluate));
     }
+
     @PostMapping("/listProdByCategoryIdAndShopId")
     @ApiOperation(value = "根据分类ID、商户ID查询归属的所有商品")
     public ResponseEntity<IPage<Product>> listProdByCategoryIdAndShopId(@RequestBody ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO) {

+ 1 - 0
yami-shop-delivery/yami-shop-delivery-comment/src/main/java/com/yami/shop/delivery/comment/service/impl/TransportManagerServiceImpl.java

@@ -226,6 +226,7 @@ public class TransportManagerServiceImpl implements TransportManagerService {
         }
 
         ShopDetail shopDetailByShopId = shopDetailService.getShopDetailByShopId(shopId);
+        //TODO wangjian NullPointerException
         double v = calculateDistance(latitude, longitude, Double.valueOf(shopDetailByShopId.getShopLat()), Double.valueOf(shopDetailByShopId.getShopLng()));
         Transport2 byDistance = transport2Service.findByDistance(shopId, v);
         if (ObjectUtil.isEmpty(byDistance)) {

+ 7 - 6
yami-shop-security/yami-shop-security-api/src/main/java/com/yami/shop/security/api/service/impl/YamiUserServiceImpl.java

@@ -128,19 +128,20 @@ public class YamiUserServiceImpl implements YamiUserDetailsService {
 		log.info("用户信息:{}", user);
 		log.info("appId:{}", appId);
 		log.info("bizUserId:{}", bizUserId);
+		YamiUser yamiUser = new YamiUser();
+		yamiUser.setEnabled(Boolean.TRUE);
 		String nickName = "微信用户";
 		if (user != null){
 			nickName = StrUtil.isBlank(user.getNickName()) ? user.getRealName():user.getNickName();
+			yamiUser.setEnabled(user.getStatus() == 1);
+			yamiUser.setUserId(user.getUserId());
+			yamiUser.setPic(user.getPic());
+			yamiUser.setPassword(user.getLoginPassword());
 		}
-
-		YamiUser yamiUser = new YamiUser();
-		yamiUser.setEnabled(user.getStatus() == 1);
-		yamiUser.setUserId(user.getUserId());
 		yamiUser.setBizUserId(bizUserId);
 		yamiUser.setAppType(appId);
 		yamiUser.setName(nickName);
-		yamiUser.setPic(user.getPic());
-		yamiUser.setPassword(user.getLoginPassword());
+
 		return yamiUser;
 	}
 }

+ 3 - 1
yami-shop-service/src/main/java/com/yami/shop/dao/SkuMapper.java

@@ -29,7 +29,9 @@ public interface SkuMapper extends BaseMapper<Sku> {
 	 */
 	void insertBatch(@Param("prodId") Long prodId, @Param("skuList") List<Sku> skuList);
 
-	List<Sku> listByProdId(Long prodId);
+	List<Sku> listByProdId(@Param("prodId")Long prodId);
+
+	List<Sku> listByProdIdAndPlatform(@Param("prodId")Long prodId,@Param("platform")Integer platform,@Param("shopId")Long shopId);
 
 	int updateStocks(@Param("sku") Sku sku);
 

+ 22 - 14
yami-shop-service/src/main/java/com/yami/shop/service/SkuService.java

@@ -17,24 +17,32 @@ import com.yami.shop.bean.model.Sku;
 import org.springframework.cache.annotation.CacheEvict;
 
 /**
- *
  * @author lgh on 2018/09/29.
  */
 public interface SkuService extends IService<Sku> {
 
-	/**
-	 * 根据商品id获取商品中的sku列表(将会被缓存起来)
-	 * @param prodId 商品id
-	 * @return sku列表
-	 */
-	List<Sku> listByProdId(Long prodId);
+    /**
+     * 根据商品id获取商品中的sku列表(将会被缓存起来)
+     *
+     * @param prodId 商品id
+     * @return sku列表
+     */
+    List<Sku> listByProdId(Long prodId, Integer platform, Long shopId);
+    /**
+     * 根据商品id获取商品中的sku列表(将会被缓存起来)
+     *
+     * @param prodId 商品id
+     * @return sku列表
+     */
+    List<Sku> listByProdId(Long prodId);
 
-	/**
-	 * 根据skuId获取sku信息(将会被缓存起来)
-	 * @param skuId
-	 * @return
-	 */
-	Sku getSkuBySkuId(Long skuId);
+    /**
+     * 根据skuId获取sku信息(将会被缓存起来)
+     *
+     * @param skuId
+     * @return
+     */
+    Sku getSkuBySkuId(Long skuId);
 
-	void removeSkuCacheBySkuId(Long skuId,Long prodId);
+    void removeSkuCacheBySkuId(Long skuId, Long prodId);
 }

+ 1 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/ProductServiceImpl.java

@@ -212,7 +212,6 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         String distance = searchParam.getDistance();
 
         if (StringUtils.isNotEmpty(lat) && StringUtils.isNotEmpty(lon) && StringUtils.isNotEmpty(distance)) {
-            //TODO wangjian 查询渠道商已经存在的店铺
             List<ShopDetail> shopDetails = productMapper.queryShop(lat, lon, distance);
             List<Long> shopIds = shopDetails.stream().map(ShopDetail::getShopId).collect(Collectors.toList());
             if (CollectionUtil.isEmpty(shopDetails)) {
@@ -220,6 +219,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             }
             IPage<SearchProdDto> searchProdDtoPage = productMapper.getSearchProdDtoPageByProdNameNew(page, searchParam, shopIds);
             for (SearchProdDto searchProdDto : searchProdDtoPage.getRecords()) {
+                //TODO wangjian 查询具体的价格
                 List<SkuDto> skuList = skuMapper.listByProdId(searchProdDto.getProdId()).stream().map((sku) -> SkuDto.builder()
                         .skuName(sku.getSkuName()).pic(sku.getPic()).skuScore(sku.getSkuScore()).price(sku.getPrice())
                         .stocks(sku.getStocks()).properties(sku.getProperties()).skuId(sku.getSkuId())

+ 4 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/QnhServiceImpl.java

@@ -26,6 +26,7 @@ import com.yami.shop.dao.ShopDetailMapper;
 import com.yami.shop.service.*;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
@@ -157,7 +158,9 @@ public class QnhServiceImpl implements IQnhService {
         ShopDetail shopDetail = shopDetailMapper.selectById(productService.getById(prodId).getShopId());
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("page_no", 1);
-        jsonObject.put("poi_code", shopDetail.getThirdPartyCode());
+        if(ObjectUtils.isNotEmpty(shopDetail)){
+            jsonObject.put("poi_code", shopDetail.getThirdPartyCode());
+        }
         jsonObject.put("sku_code", skuCode);
         jsonObject.put("page_size", 50);
         HttpResponse execute = getExecute(body, jsonObject, GET_SKU_STOCK);

+ 5 - 2
yami-shop-service/src/main/java/com/yami/shop/service/impl/ShopDetailServiceImpl.java

@@ -37,6 +37,7 @@ import com.yami.shop.service.ShopDetailService;
 import com.yami.shop.service.ShopWalletService;
 import lombok.AllArgsConstructor;
 import ma.glasnost.orika.MapperFacade;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.context.ApplicationContext;
@@ -322,8 +323,10 @@ public class ShopDetailServiceImpl extends ServiceImpl<ShopDetailMapper, ShopDet
     public ResponseEntity<ShopHeadInfoDto> neighborShop(String lat, String lon,Integer platform) {
         List<ShopDetail> shopDetails = shopDetailMapper.neighborShop(lat, lon,platform);
         ShopHeadInfoDto dto = new ShopHeadInfoDto();
-        dto.setShopId(shopDetails.get(0).getShopId());
-        dto.setShopName(shopDetails.get(0).getShopName());
+        if(ObjectUtils.isNotEmpty(shopDetails)){
+            dto.setShopId(shopDetails.get(0).getShopId());
+            dto.setShopName(shopDetails.get(0).getShopName());
+        }
         return ResponseEntity.ok(dto);
     }
 

+ 26 - 22
yami-shop-service/src/main/java/com/yami/shop/service/impl/SkuServiceImpl.java

@@ -24,7 +24,6 @@ import com.yami.shop.dao.SkuMapper;
 import com.yami.shop.service.SkuService;
 
 /**
- *
  * @author lgh on 2018/09/29.
  */
 @Service
@@ -33,26 +32,31 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuSe
     @Autowired
     private SkuMapper skuMapper;
 
-	@Override
-	@Cacheable(cacheNames = "skuList", key = "#prodId")
-	public List<Sku> listByProdId(Long prodId) {
-		//TODO wangjian 查询具体的价格
-		return skuMapper.listByProdId(prodId);
-	}
-
-	@Override
-	@Cacheable(cacheNames = "sku", key = "#skuId")
-	public Sku getSkuBySkuId(Long skuId) {
-		return skuMapper.selectById(skuId);
-	}
-
-	@Override
-	@Caching(evict = {
-			@CacheEvict(cacheNames = "sku", key = "#skuId"),
-			@CacheEvict(cacheNames = "skuList", key = "#prodId")
-	})
-	public void removeSkuCacheBySkuId(Long skuId,Long prodId) {
-
-	}
+    @Override
+    @Cacheable(cacheNames = "skuList", key = "#prodId")
+    public List<Sku> listByProdId(Long prodId) {
+        return skuMapper.listByProdId(prodId);
+    }
+
+    @Override
+    @Cacheable(cacheNames = "listByProdIdAndPlatform", key = "#prodId")
+    public List<Sku> listByProdId(Long prodId, Integer platform, Long shopId) {
+        return skuMapper.listByProdIdAndPlatform(prodId, platform, shopId);
+    }
+
+    @Override
+    @Cacheable(cacheNames = "sku", key = "#skuId")
+    public Sku getSkuBySkuId(Long skuId) {
+        return skuMapper.selectById(skuId);
+    }
+
+    @Override
+    @Caching(evict = {
+            @CacheEvict(cacheNames = "sku", key = "#skuId"),
+            @CacheEvict(cacheNames = "skuList", key = "#prodId")
+    })
+    public void removeSkuCacheBySkuId(Long skuId, Long prodId) {
+
+    }
 
 }

+ 9 - 7
yami-shop-service/src/main/resources/mapper/ProductMapper.xml

@@ -554,15 +554,17 @@
         any_value(p.prod_name) as prod_name,
         any_value(p.price) as price,
         any_value(p.brief) as brief,
-        any_value(p.shop_id) as shopId,
+        any_value ( tss.shop_id ) AS shopId,
         count(pc.prod_comm_id) as prod_comm_number,
         count( CASE WHEN evaluate = 0 THEN prod_comm_id ELSE null END ) AS praise_number,
-        (6371 * acos(cos(radians(#{searchParam.lat})) * cos(radians(shop_lat)) * cos(radians(shop_lng) - radians(#{searchParam.lon}) ) + sin(radians(#{searchParam.lat})) * sin(radians(shop_lat)))) distance
+        (6371 * acos(cos(radians(#{searchParam.lat})) * cos(radians(shop_lat)) * cos(radians(shop_lng) -
+        radians(#{searchParam.lon}) ) + sin(radians(#{searchParam.lat})) * sin(radians(shop_lat)))) distance
         from
-        tz_prod p
-        left join tz_prod_comm pc on p.prod_id=pc.prod_id and pc.`status`=1
-        left join tz_shop_detail sd on p.shop_id = sd.shop_id
-        where 1 = 1 and p.`status` = 1 and p.shop_id in
+        tz_shop_sku tss
+        LEFT JOIN tz_prod p ON p.prod_id = tss.spu_id
+        LEFT JOIN tz_shop_detail sd ON sd.shop_id = tss.shop_id
+        LEFT JOIN tz_prod_comm pc ON p.prod_id = pc.prod_id
+        where 1 = 1 and p.`status` = 1 and tss.shop_id in
         <foreach collection="list" item="item" separator="," open="(" close=")">
             #{item}
         </foreach>
@@ -570,7 +572,7 @@
             and prod_name like concat('%',#{searchParam.prodName} ,'%')
         </if>
         <if test="searchParam.shopId != null">
-            and p.shop_id = #{searchParam.shopId}
+            and tss.shop_id = #{searchParam.shopId}
         </if>
 
         <if test="searchParam.categoryId != null">

+ 2 - 2
yami-shop-service/src/main/resources/mapper/ShopDetailMapper.xml

@@ -129,7 +129,7 @@
     </select>
 
     <select id="neighborShop" resultType="com.yami.shop.bean.model.ShopDetail">
-        select
+        select DISTINCT
         sd.shop_id,
         shop_name,
         ( 6371 * acos( cos( radians(#{lat}) ) * cos( radians( shop_lat ) ) * cos( radians( shop_lng ) - radians(#{lon})
@@ -140,7 +140,7 @@
         right join tz_channel_shop tcs on tcs.shop_id = sd.shop_id
         where shop_status = 1
         <if test="null != platform">
-            tcs.`channel_id`= #{platform} and tcs.`is_delete`=0
+         and   tcs.`channel_id`= #{platform} and tcs.`is_delete`=0
         </if>
         order by
         distance

+ 93 - 45
yami-shop-service/src/main/resources/mapper/SkuMapper.xml

@@ -1,61 +1,109 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yami.shop.dao.SkuMapper">
-  <resultMap id="BaseResultMap" type="com.yami.shop.bean.model.Sku">
-    <!--
-      WARNING - @mbg.generated
-    -->
-    <id column="sku_id" jdbcType="BIGINT" property="skuId" />
-    <result column="prod_id" jdbcType="BIGINT" property="prodId" />
-    <result column="properties" jdbcType="VARCHAR" property="properties" />
-    <result column="ori_price" jdbcType="DECIMAL" property="oriPrice" />
-    <result column="price" jdbcType="DECIMAL" property="price" />
-    <result column="stocks" jdbcType="INTEGER" property="stocks" />
-    <result column="actual_stocks" jdbcType="INTEGER" property="actualStocks" />
-    <result column="status" jdbcType="TINYINT" property="status" />
-    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
-    <result column="rec_time" jdbcType="TIMESTAMP" property="recTime" />
-    <result column="party_code" jdbcType="VARCHAR" property="partyCode" />
-    <result column="model_id" jdbcType="VARCHAR" property="modelId" />
-    <result column="pic" jdbcType="VARCHAR" property="pic" />
-    <result column="sku_name" jdbcType="VARCHAR" property="skuName" />
-    <result column="is_delete" jdbcType="INTEGER" property="isDelete"/>
-  </resultMap>
+    <resultMap id="BaseResultMap" type="com.yami.shop.bean.model.Sku">
+        <!--
+          WARNING - @mbg.generated
+        -->
+        <id column="sku_id" jdbcType="BIGINT" property="skuId"/>
+        <result column="prod_id" jdbcType="BIGINT" property="prodId"/>
+        <result column="properties" jdbcType="VARCHAR" property="properties"/>
+        <result column="ori_price" jdbcType="DECIMAL" property="oriPrice"/>
+        <result column="price" jdbcType="DECIMAL" property="price"/>
+        <result column="stocks" jdbcType="INTEGER" property="stocks"/>
+        <result column="actual_stocks" jdbcType="INTEGER" property="actualStocks"/>
+        <result column="status" jdbcType="TINYINT" property="status"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="rec_time" jdbcType="TIMESTAMP" property="recTime"/>
+        <result column="party_code" jdbcType="VARCHAR" property="partyCode"/>
+        <result column="model_id" jdbcType="VARCHAR" property="modelId"/>
+        <result column="pic" jdbcType="VARCHAR" property="pic"/>
+        <result column="sku_name" jdbcType="VARCHAR" property="skuName"/>
+        <result column="is_delete" jdbcType="INTEGER" property="isDelete"/>
+    </resultMap>
 
     <insert id="insertBatch">
-	  	INSERT INTO `tz_sku` (
-		  `prod_id`,`properties`,`ori_price`,`price`,`stocks`,`actual_stocks`,
-		  `update_time`,`rec_time`,`party_code`,`model_id`, `pic`,
-		  `sku_name`,`prod_name`,`version`,`weight`,`volume`, `status`, `is_delete`, `sku_score`
-		)
-		VALUES
-		<foreach collection="skuList" item="sku" separator=",">
-        (
+        INSERT INTO `tz_sku` (
+        `prod_id`,`properties`,`ori_price`,`price`,`stocks`,`actual_stocks`,
+        `update_time`,`rec_time`,`party_code`,`model_id`, `pic`,
+        `sku_name`,`prod_name`,`version`,`weight`,`volume`, `status`, `is_delete`, `sku_score`
+        )
+        VALUES
+        <foreach collection="skuList" item="sku" separator=",">
+            (
             #{prodId},#{sku.properties},#{sku.oriPrice},#{sku.price},#{sku.stocks},
-		    #{sku.actualStocks}, NOW(),NOW(),#{sku.partyCode},#{sku.modelId}, #{sku.pic},
-		    #{sku.skuName},#{sku.prodName},0,#{sku.weight},#{sku.volume}, #{sku.status},0, #{sku.skuScore}
-		 )
-		 </foreach>
+            #{sku.actualStocks}, NOW(),NOW(),#{sku.partyCode},#{sku.modelId}, #{sku.pic},
+            #{sku.skuName},#{sku.prodName},0,#{sku.weight},#{sku.volume}, #{sku.status},0, #{sku.skuScore}
+            )
+        </foreach>
     </insert>
 
-	<select id="listByProdId" resultType="com.yami.shop.bean.model.Sku">
-		select * from tz_sku where prod_id = #{prodId} and is_delete = 0
-	</select>
+    <select id="listByProdId" resultType="com.yami.shop.bean.model.Sku">
+        select *
+        from tz_sku
+        where prod_id = #{prodId}
+          and is_delete = 0
+    </select>
+
+    <select id="listByProdIdAndPlatform" resultType="com.yami.shop.bean.model.Sku">
+        SELECT ts.sku_id,
+        ts.prod_id,
+        ts.sku_name,
+        ts.prod_name,
+        ts.ori_price,
+        tcp.channel_prod_price AS price,
+        ts.sku_score,
+        ts.properties,
+        ts.stocks,
+        tss.shop_sku_stocks AS actual_stocks,
+        ts.update_time,
+        ts.rec_time,
+        ts.party_code,
+        ts.model_id,
+        ts.pic,
+        ts.version,
+        ts.weight,
+        ts.volume,
+        ts.`status`,
+        ts.is_delete,
+        ts.weight_unit,
+        ts.sku_code,
+        ts.hb_spu_id,
+        ts.hb_sku_id
+        FROM tz_sku AS ts
+        LEFT JOIN tz_shop_sku AS tss ON ts.sku_id = tss.sku_id
+        LEFT JOIN tz_channel_prod AS tcp ON ts.sku_id = tcp.sku_id
+        WHERE ts.prod_id = #{prodId}
+        AND ts.is_delete = 0
+        AND ts.`status` = 1
+        AND tss.shop_id = #{shopId}
+        AND tcp.channel_id = #{platform}
+    </select>
     <select id="selectByHbSkuId" resultType="com.yami.shop.bean.model.Sku">
-        select * from tz_sku where hb_sku_id = #{hbSkuId} and is_delete = 0
+        select *
+        from tz_sku
+        where hb_sku_id = #{hbSkuId}
+          and is_delete = 0
     </select>
 
     <update id="updateStocks" parameterType="com.yami.shop.bean.model.Sku">
-		update tz_sku set stocks = stocks - #{sku.stocks}, version = version + 1,update_time = NOW() where sku_id = #{sku.skuId} and #{sku.stocks} &lt;= stocks
-	</update>
+        update tz_sku
+        set stocks      = stocks - #{sku.stocks},
+            version     = version + 1,
+            update_time = NOW()
+        where sku_id = #{sku.skuId}
+          and #{sku.stocks} &lt;= stocks
+    </update>
 
-	<update id="deleteByProdId">
-	   update tz_sku set is_delete = 1 where prod_id = #{prodId}
-	</update>
+    <update id="deleteByProdId">
+        update tz_sku
+        set is_delete = 1
+        where prod_id = #{prodId}
+    </update>
 
-	<update id="returnStock">
-       <foreach collection="skuCollect" item="changeStocks" index="skuId" separator=";">
-       update tz_sku set stocks = stocks + #{changeStocks} where sku_id = #{skuId}
-       </foreach>
+    <update id="returnStock">
+        <foreach collection="skuCollect" item="changeStocks" index="skuId" separator=";">
+            update tz_sku set stocks = stocks + #{changeStocks} where sku_id = #{skuId}
+        </foreach>
     </update>
 </mapper>