Browse Source

云仓接口调整、增加小程序商品明细接口

liyuan 2 months ago
parent
commit
d2ff9de241

+ 28 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/vo/WeChatDetailStockVo.java

@@ -0,0 +1,28 @@
+package org.springblade.salesPart.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author Rain
+ */
+@Data
+public class WeChatDetailStockVo implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 仓库名
+	 */
+	private String storageName;
+
+	/**
+	 * 仓库库存
+	 */
+	private BigDecimal storeInventory;
+
+
+}

+ 40 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/vo/WeChatGoodsDetailStockVo.java

@@ -0,0 +1,40 @@
+package org.springblade.salesPart.vo;
+
+import lombok.Data;
+import org.springblade.salesPart.entity.PjProductLaunch;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+@Data
+public class WeChatGoodsDetailStockVo implements Serializable {
+
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 小时达库存
+	 */
+	private BigDecimal storeInventory;
+
+	/**
+	 * 次日达库存
+	 */
+	private BigDecimal storeInventoryShare;
+
+
+	/**
+	 * 各仓库详情
+	 */
+	private List<WeChatDetailStockVo> weChatDetailStockVos;
+
+	public WeChatGoodsDetailStockVo(){
+		this.storeInventory = BigDecimal.ZERO;
+		this.storeInventoryShare = BigDecimal.ZERO;
+	}
+
+}

+ 8 - 6
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/mapper/ProductLaunchMapper.xml

@@ -259,12 +259,14 @@
         pgd.price_two,
         pgd.price_three,
         pgd.price_four,
-        SUM(CASE WHEN psd.storage_id = #{storageId} THEN psd.balance_quantity ELSE 0 END) AS inventoryLocal,
-        SUM(CASE WHEN psd.storage_id IN
-        <foreach collection="storageIdList" item="storageId" open="(" close=")" separator=",">
-            #{storageId}
-        </foreach>
-        THEN psd.balance_quantity ELSE 0 END) AS inventoryShare
+        SUM(CASE WHEN psd.storage_id = #{storageId} THEN psd.balance_quantity ELSE 0 END) AS inventoryLocal
+        <if test="storageIdList != null and storageIdList.size > 0">
+            , SUM(CASE WHEN psd.storage_id IN
+            <foreach collection="storageIdList" item="storageId" open="(" close=")" separator=",">
+                #{storageId}
+            </foreach>
+            THEN psd.balance_quantity ELSE 0 END) AS inventoryShare
+        </if>
         FROM
         pjpf_shopping_mall_detail pgd
         INNER JOIN pjpf_stock_desc psd ON psd.tenant_id = pgd.tenant_id

+ 19 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/controller/ShoppingMallDetailController.java

@@ -16,12 +16,11 @@
  */
 package org.springblade.salesPart.shopping.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -50,7 +49,12 @@ import org.springblade.salesPart.shopping.entity.ShoppingMallDetail;
 import org.springblade.salesPart.shopping.service.IShoppingMallDetailService;
 import org.springblade.salesPart.shopping.vo.ShoppingMallDetailVO;
 import org.springblade.salesPart.stock.mapper.StockDescMapper;
+import org.springblade.salesPart.util.UserUtils;
+import org.springblade.salesPart.vo.WeChatDetailStockVo;
+import org.springblade.salesPart.vo.WeChatGoodsDetailStockVo;
 import org.springblade.system.feign.ISysClient;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -163,7 +167,7 @@ public class ShoppingMallDetailController extends BladeController {
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "小程序配件批发产品上架", notes = "传入productLaunch")
 	public R<IPage<ShoppingMallDetail>> appList(PjProductLaunch productLaunch, Query query) {
-		return  shoppingMallDetailService.selectWxAppGoodsPageList(productLaunch, query);
+		return shoppingMallDetailService.selectWxAppGoodsPageList(productLaunch, query);
 	}
 
 	/**
@@ -221,9 +225,20 @@ public class ShoppingMallDetailController extends BladeController {
 			.eq(SharePutOnShelves::getBillType, 1)
 			.eq(SharePutOnShelves::getShareStatus, "已确认")
 			.eq(SharePutOnShelves::getGoodsCode, stockDesc.getCode()));
-		map.put("storeInventoryShare", !sharePutOnShelvesList.isEmpty() ? sharePutOnShelvesList.stream().map(SharePutOnShelves::getInventory).reduce(BigDecimal.ZERO, BigDecimal::add): CommonEnum.ZERO.info);
+		map.put("storeInventoryShare", !sharePutOnShelvesList.isEmpty() ? sharePutOnShelvesList.stream().map(SharePutOnShelves::getInventory).reduce(BigDecimal.ZERO, BigDecimal::add) : CommonEnum.ZERO.info);
 		return R.data(map);
 	}
 
 
+	@GetMapping("getGoodsDetailStockByCloud")
+	public R<WeChatGoodsDetailStockVo> getGoodsDetailStockByCloud(@RequestParam("id") Long id) {
+		return shoppingMallDetailService.getGoodsDetailStockByCloud(id);
+	}
+
+	@GetMapping("getGoodsDetailByCloud")
+	public R<Map<String, Object>> getGoodsDetailByCloud(@RequestParam("id") Long id) {
+		return shoppingMallDetailService.getGoodsDetailByCloud(id);
+	}
+
+
 }

+ 18 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/service/IShoppingMallDetailService.java

@@ -23,6 +23,7 @@ import org.springblade.salesPart.shopping.entity.ShoppingMallDetail;
 import org.springblade.salesPart.shopping.vo.ShoppingMallDetailVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.salesPart.vo.WeChatGoodsDetailStockVo;
 
 import java.util.Map;
 
@@ -52,4 +53,21 @@ public interface IShoppingMallDetailService extends IService<ShoppingMallDetail>
 	 * @return 结果
 	 */
 	R<IPage<ShoppingMallDetail>> selectWxAppGoodsPageList(PjProductLaunch productLaunch, Query query);
+
+
+	/**
+	 * 小程序商品详情库存接口 云仓模式
+	 *
+	 * @param id 上架id
+	 * @return 结果
+	 */
+	R<WeChatGoodsDetailStockVo> getGoodsDetailStockByCloud(Long id);
+
+	/**
+	 * 小程序商品详情接口
+	 *
+	 * @param id 上架id
+	 * @return 结果
+	 */
+	R<Map<String, Object>> getGoodsDetailByCloud(Long id);
 }

+ 95 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/service/impl/ShoppingMallDetailServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.salesPart.shopping.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import lombok.AllArgsConstructor;
+import org.springblade.common.enums.CommonEnum;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -20,6 +22,8 @@ import org.springblade.salesPart.corps.service.ICorpsAttnService;
 import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.PriceSystem;
+import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
+import org.springblade.salesPart.productLaunch.mapper.ProductLaunchMapper;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchFilesService;
 import org.springblade.salesPart.shopping.entity.ShoppingMallDetail;
 import org.springblade.salesPart.shopping.mapper.ShoppingMallDetailMapper;
@@ -28,8 +32,8 @@ import org.springblade.salesPart.shopping.vo.ShoppingMallDetailVO;
 import org.springblade.salesPart.stock.mapper.StockDescMapper;
 import org.springblade.salesPart.util.PageHelperUtil;
 import org.springblade.salesPart.util.UserUtils;
-import org.springblade.salesPart.vo.WxAppGoodsImgVo;
-import org.springblade.salesPart.vo.WxAppGoodsParamsVo;
+import org.springblade.salesPart.util.WxParamUtil;
+import org.springblade.salesPart.vo.*;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -60,6 +64,11 @@ public class ShoppingMallDetailServiceImpl extends ServiceImpl<ShoppingMallDetai
 	private final BrandDescMapper brandDescMapper;
 	private final ShoppingMallDetailMapper shoppingMallDetailMapper;
 
+	private final ProductLaunchMapper productLaunchMapper;
+
+	private final GoodsDescMapper goodsDescMapper;
+
+
 	@Override
 	public IPage<ShoppingMallDetailVO> selectShoppingMallDetailPage(IPage<ShoppingMallDetailVO> page, ShoppingMallDetailVO shoppingMallDetail) {
 		return page.setRecords(baseMapper.selectShoppingMallDetailPage(page, shoppingMallDetail));
@@ -315,4 +324,88 @@ public class ShoppingMallDetailServiceImpl extends ServiceImpl<ShoppingMallDetai
 		return R.data(PageHelperUtil.getPageInfo(shoppingMallDetailList));
 	}
 
+	@Override
+	public R<WeChatGoodsDetailStockVo> getGoodsDetailStockByCloud(Long id) {
+		PjCorpsDesc corpsDesc = UserUtils.getUserCorpsDesc();
+		if (org.springframework.util.ObjectUtils.isEmpty(corpsDesc.getDeliveryWarehouseId())) {
+			return R.fail("请联系业务员设置发货仓库");
+		}
+		List<Long> corpsStorageIdList = new ArrayList<>();
+		corpsStorageIdList.add(corpsDesc.getDeliveryWarehouseId());
+		if (StringUtils.hasText(corpsDesc.getResourceWarehouse())) {
+			try {
+				corpsStorageIdList.addAll(JSONArray.parseArray(corpsDesc.getResourceWarehouse(), Long.class));
+			} catch (Exception e) {
+				return R.fail("请联系业务员设置资源仓库");
+			}
+		}
+		PjProductLaunch productLaunch = productLaunchMapper.selectById(id);
+		if (org.springframework.util.ObjectUtils.isEmpty(productLaunch)) {
+			return R.fail("商品不存在,请联系业务员");
+		}
+		WeChatGoodsDetailStockVo weChatGoodsDetailStockVo = new WeChatGoodsDetailStockVo();
+		List<PjStockDesc> stockDescList = stockDescMapper.selectList(new LambdaQueryWrapper<PjStockDesc>()
+			.eq(PjStockDesc::getTenantId, corpsDesc.getTenantId()).eq(PjStockDesc::getGoodsId, productLaunch.getGoodsId())
+			.ne(PjStockDesc::getBalanceQuantity, 0)
+			.eq(PjStockDesc::getIsDeleted, 0).in(PjStockDesc::getStorageId, corpsStorageIdList));
+		if (CollectionUtils.isEmpty(stockDescList)) {
+			return R.data(weChatGoodsDetailStockVo);
+		}
+		List<WeChatDetailStockVo> weChatDetailStockVoList = new ArrayList<>();
+		for (PjStockDesc stockDesc : stockDescList) {
+			WeChatDetailStockVo weChatDetailStockVo = new WeChatDetailStockVo();
+			weChatDetailStockVo.setStorageName(stockDesc.getStorageName());
+			weChatDetailStockVo.setStoreInventory(stockDesc.getBalanceQuantity());
+			if (stockDesc.getStorageId().equals(corpsDesc.getDeliveryWarehouseId())) {
+				weChatGoodsDetailStockVo.setStoreInventory(stockDesc.getBalanceQuantity());
+				continue;
+			}
+			weChatGoodsDetailStockVo.setStoreInventoryShare(stockDesc.getBalanceQuantity().add(weChatGoodsDetailStockVo.getStoreInventoryShare()));
+		}
+		weChatGoodsDetailStockVo.setWeChatDetailStockVos(weChatDetailStockVoList);
+		return R.data(weChatGoodsDetailStockVo);
+	}
+
+	@Override
+	public R<Map<String, Object>> getGoodsDetailByCloud(Long id) {
+		PjCorpsDesc corpsDesc = UserUtils.getUserCorpsDesc();
+		Map<String, Object> resultMap = new HashMap<>(3);
+		PjProductLaunch detail = productLaunchMapper.selectById(id);
+		if (org.springframework.util.ObjectUtils.isEmpty(detail)) {
+			return R.fail("商品不存在,请联系业务员");
+		}
+		detail.setGoodsNum(BigDecimal.ONE);
+		List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
+		pjProductLaunchList.add(detail);
+		List<Long> ids = Collections.singletonList(detail.getId());
+		List<Long> brandIds = Collections.singletonList(detail.getBrandId());
+		// 查询商品的所有图片并根据匹配度与优先级显示
+		List<WxAppGoodsImgVo> wxAppGoodsImgVoList = shoppingMallDetailMapper.selectWxAppGoodsImgVoList(ids, brandIds);
+		WxParamUtil.findGoodsImg(pjProductLaunchList, wxAppGoodsImgVoList, corpsDesc.getPriceSystem());
+		PjGoodsDesc goodsDesc = goodsDescMapper.selectById(detail.getGoodsId());
+		if (!org.springframework.util.ObjectUtils.isEmpty(goodsDesc)){
+			detail.setCode(goodsDesc.getCode());
+		}
+		List<Long> corpsStorageIdList = new ArrayList<>();
+		corpsStorageIdList.add(corpsDesc.getDeliveryWarehouseId());
+		if (StringUtils.hasText(corpsDesc.getResourceWarehouse())) {
+			try {
+				corpsStorageIdList.addAll(JSONArray.parseArray(corpsDesc.getResourceWarehouse(), Long.class));
+			} catch (Exception e) {
+				return R.fail("请联系业务员设置资源仓库");
+			}
+		}
+		List<PjStockDesc> stockDescList = stockDescMapper.selectList(new LambdaQueryWrapper<PjStockDesc>()
+			.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjStockDesc::getIsDeleted, 0)
+			.in(PjStockDesc::getStorageId, corpsStorageIdList)
+			.eq(PjStockDesc::getGoodsId, detail.getGoodsId())
+		);
+		detail.setInventory(CollectionUtils.isEmpty(stockDescList) ? BigDecimal.ZERO :stockDescList.stream().map(PjStockDesc::getBalanceQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+		resultMap.put("type", detail.getBillType());
+		resultMap.put("thisLocality", detail);
+		resultMap.put("offsite", null);
+		return R.data(resultMap);
+	}
+
 }