Kaynağa Gözat

门店供应链物品管理/记录

zhangkaikai 1 yıl önce
ebeveyn
işleme
48f48f10c5

+ 64 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelGoodsController.java

@@ -4,9 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.vo.GoodsVO;
 import com.qs.mp.admin.service.IGoodsService;
+import com.qs.mp.channel.domain.ChannelGoods;
+import com.qs.mp.channel.domain.param.SiteGoodsForChannelQueryParam;
 import com.qs.mp.channel.domain.param.SiteGoodsQueryParam;
+import com.qs.mp.channel.domain.vo.ChannelGoodsVO;
+import com.qs.mp.channel.service.IChannelGoodsService;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.common.enums.ChannelGoodsSettleStatusTypeEnum;
+import com.qs.mp.utils.SecurityUtils;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -18,7 +24,11 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author zhangkaikai
@@ -33,6 +43,9 @@ public class ChannelGoodsController extends BaseApiController {
     @Autowired
     private IGoodsService goodsService;
 
+    @Autowired
+    private IChannelGoodsService channelGoodsService;
+
     @Autowired
     private MapperFacade mapperFacade;
 
@@ -43,9 +56,10 @@ public class ChannelGoodsController extends BaseApiController {
     )
     public TableDataInfo siteGoodsList(@RequestBody SiteGoodsQueryParam param) {
 
+        startPage();
         QueryWrapper<Goods> queryWrapper = new QueryWrapper<Goods>();
         queryWrapper.eq("type", param.getType())
-                .orderByDesc("create_time");
+                .orderByDesc("created_time");
         List<Goods> goodsList = goodsService.list(queryWrapper);
 
         List<GoodsVO> goodsVOList = mapperFacade.mapAsList(goodsList, GoodsVO.class);
@@ -64,6 +78,55 @@ public class ChannelGoodsController extends BaseApiController {
         return AjaxResult.success(goodsVO);
     }
 
+    @PostMapping("/goods/list/channel")
+    @ApiOperation("门店铺设商品列表")
+    @ApiResponses(
+
+            @ApiResponse(code = 200, message = "成功", response = ChannelGoodsVO.class)
+    )
+    public TableDataInfo goodsListChannel(@RequestBody SiteGoodsForChannelQueryParam param) {
+        Long channelId = SecurityUtils.getLoginUser().getChannelId();
+
+        QueryWrapper<ChannelGoods> wrapper = new QueryWrapper<ChannelGoods>().eq("t1.channel_id", channelId).eq("t1.status", param.getSettleStatus());
+        if (ChannelGoodsSettleStatusTypeEnum.NO.getValue().equals(param.getSettleStatus())) {
+            wrapper.orderByAsc("t1.remain_qty");
+            wrapper.orderByDesc("t1.create_time");
+        } else {
+            wrapper.orderByDesc("t1.settle_time");
+        }
+        List<ChannelGoodsVO> channelGoodsList = channelGoodsService.listChannelGoods(wrapper);
+        return getDataTable(channelGoodsList);
+    }
+
+    @PostMapping("goods/list/under/channel")
+    @ApiOperation("渠道下门店库存列表")
+    public TableDataInfo goodsListUnderChannel() {
+        startPage();
+        Long channelId = SecurityUtils.getLoginUser().getChannelId();
+        QueryWrapper<ChannelGoods> wrapper = new QueryWrapper<ChannelGoods>().eq("t3.channel_id", channelId);
+        List<ChannelGoodsVO> channelGoodsVOs = channelGoodsService.listChannelGoodsUnderChannel(wrapper);
+        Map<Long, List<ChannelGoodsVO>> map = channelGoodsVOs.stream().collect(Collectors.groupingBy(ChannelGoodsVO::getChannelId));
+        List<ChannelGoodsVO> channelGoodsVOList = new ArrayList<>();
+        for (Map.Entry<Long, List<ChannelGoodsVO>> entry : map.entrySet()) {
+            ChannelGoodsVO channelGoodsVO = new ChannelGoodsVO();
+            List<ChannelGoodsVO> value = entry.getValue();
+            int totalQuantity = value.stream().mapToInt(ChannelGoods::getQuantity).sum();
+            int totalVerQuantity = value.stream().mapToInt(ChannelGoods::getVerifyQty).sum();
+            int remainTotalQuantity = value.stream().mapToInt(ChannelGoodsVO::getRemainQty).sum();
+            int deepQuantity = value.stream().mapToInt(ChannelGoods::getRemainQty).min().getAsInt();
+            channelGoodsVO.setTotalQuantity(totalQuantity);
+            channelGoodsVO.setTotalVerQuantity(totalVerQuantity);
+            channelGoodsVO.setRemainTotalQuantity(remainTotalQuantity);
+            channelGoodsVO.setDeepQuantity(deepQuantity);
+            channelGoodsVO.setChannelId(value.get(0).getChannelId());
+            channelGoodsVO.setChannelName(value.get(0).getChannelName());
+            channelGoodsVOList.add(channelGoodsVO);
+        }
+        TableDataInfo info = getDataTable(channelGoodsVOs);
+        info.setRows(channelGoodsVOList);
+        return info;
+    }
+
 
 
 

+ 7 - 1
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelGoods.java

@@ -101,7 +101,13 @@ public class ChannelGoods implements Serializable {
          @TableField("verify_qty")
     private Integer verifyQty;
 
-        /**
+    /**
+     * 剩余库存
+     */
+    @TableField("remain_qty")
+    private Integer remainQty;
+
+    /**
      * 结算状态,1未结算2已结算
      */
         @TableField("status")

+ 22 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/SiteGoodsForChannelQueryParam.java

@@ -0,0 +1,22 @@
+package com.qs.mp.channel.domain.param;
+
+import com.qs.mp.common.enums.ChannelGoodsSettleStatusTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhangkaikai
+ * @create 2023-06-07 9:23 AM
+ **/
+
+@ApiModel("门店铺设商品查询参数")
+@Data
+public class SiteGoodsForChannelQueryParam {
+
+    @ApiModelProperty("结算状态 1未结算 2已结算")
+    private Integer settleStatus;
+
+    @ApiModelProperty("门店铺设商品id")
+    private Long id;
+}

+ 33 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelGoodsVO.java

@@ -0,0 +1,33 @@
+package com.qs.mp.channel.domain.vo;
+
+import com.qs.mp.channel.domain.ChannelGoods;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhangkaikai
+ * @create 2023-06-07 9:42 AM
+ **/
+@ApiModel("门店铺设商品出参类")
+@Data
+public class ChannelGoodsVO extends ChannelGoods {
+
+    @ApiModelProperty("供应商名称")
+    private String supplierName;
+
+    @ApiModelProperty("门店名称")
+    private String channelName;
+
+    @ApiModelProperty("门店总库存")
+    private Integer totalQuantity;
+
+    @ApiModelProperty("门店总核销")
+    private Integer totalVerQuantity;
+
+    @ApiModelProperty("剩余总库存")
+    private Integer remainTotalQuantity;
+
+    @ApiModelProperty("紧张库存")
+    private Integer deepQuantity;
+}

+ 9 - 0
mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelGoodsMapper.java

@@ -1,7 +1,13 @@
 package com.qs.mp.channel.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.qs.mp.channel.domain.ChannelGoods;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qs.mp.channel.domain.vo.ChannelGoodsVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @auther quanshu
@@ -10,4 +16,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ChannelGoodsMapper extends BaseMapper<ChannelGoods> {
 
+    List<ChannelGoodsVO> listChannelGoods(@Param(Constants.WRAPPER) QueryWrapper<ChannelGoods> wrapper);
+
+    List<ChannelGoodsVO> listChannelGoodsUnderChannel(@Param(Constants.WRAPPER) QueryWrapper<ChannelGoods> wrapper);
 }

+ 7 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelGoodsService.java

@@ -1,7 +1,11 @@
 package com.qs.mp.channel.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.channel.domain.ChannelGoods;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.channel.domain.vo.ChannelGoodsVO;
+
+import java.util.List;
 
 /**
  * @auther quanshu
@@ -10,4 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IChannelGoodsService extends IService<ChannelGoods> {
 
+    List<ChannelGoodsVO> listChannelGoods(QueryWrapper<ChannelGoods> wrapper);
+
+    List<ChannelGoodsVO> listChannelGoodsUnderChannel(QueryWrapper<ChannelGoods> wrapper);
 }

+ 2 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelCouponVerifyLogServiceImpl.java

@@ -91,6 +91,8 @@ public class ChannelCouponVerifyLogServiceImpl extends ServiceImpl<ChannelCoupon
         moneyLog.setRefId(String.valueOf(verifyLog.getId()));
         channelMoneyLogService.changeMoney(moneyLog);
       }
+    } else if (CouponDiscountTypeEnum.EXCHANGE == coupon.getDiscountType()) {
+
     } else {
       LogUtil.warn(logger, "优惠券核销结算,类型非代金券,忽略。userCouponId:{0}", userCoupon.getId());
     }

+ 2 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelGoodsOrderServiceImpl.java

@@ -199,6 +199,7 @@ public class ChannelGoodsOrderServiceImpl extends ServiceImpl<ChannelGoodsOrderM
             channelGoods.setRefId(goods.getRefId());
             channelGoods.setSupplierId(item.getSupplierId());
             channelGoods.setQuantity(item.getGoodsNum());
+            channelGoods.setRemainQty(item.getGoodsNum());
             goodsList.add(channelGoods);
         }
         channelGoodsService.saveBatch(goodsList);
@@ -233,6 +234,7 @@ public class ChannelGoodsOrderServiceImpl extends ServiceImpl<ChannelGoodsOrderM
                 channelGoods.setRefId(goods.getRefId());
                 channelGoods.setSupplierId(item.getSupplierId());
                 channelGoods.setQuantity(item.getGoodsNum());
+                channelGoods.setRemainQty(item.getGoodsNum());
                 goodsList.add(channelGoods);
             }
             channelGoodsService.saveBatch(goodsList);

+ 13 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelGoodsServiceImpl.java

@@ -1,11 +1,15 @@
 package com.qs.mp.channel.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.channel.domain.ChannelGoods;
+import com.qs.mp.channel.domain.vo.ChannelGoodsVO;
 import com.qs.mp.channel.mapper.ChannelGoodsMapper;
 import com.qs.mp.channel.service.IChannelGoodsService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @auther quanshu
  * @create 2023-06-07 01:13:35
@@ -14,4 +18,13 @@ import org.springframework.stereotype.Service;
 @Service
 public class ChannelGoodsServiceImpl extends ServiceImpl<ChannelGoodsMapper, ChannelGoods> implements IChannelGoodsService {
 
+    @Override
+    public List<ChannelGoodsVO> listChannelGoods(QueryWrapper<ChannelGoods> wrapper) {
+        return getBaseMapper().listChannelGoods(wrapper);
+    }
+
+    @Override
+    public List<ChannelGoodsVO> listChannelGoodsUnderChannel(QueryWrapper<ChannelGoods> wrapper) {
+        return getBaseMapper().listChannelGoodsUnderChannel(wrapper);
+    }
 }

+ 14 - 0
mp-service/src/main/resources/mapper/channel/ChannelGoodsMapper.xml

@@ -33,5 +33,19 @@
     <sql id="Base_Column_List">
         id, channel_id, goods_id, order_id, title, pic_url, type, description, ref_id, purchase_price, purchase_cost, quantity, verify_qty, status, merchant_info, supplier_id, sort_weight, multi_sku, sku_prop, is_deleted, created_time, updated_time, settle_time
     </sql>
+    <select id="listChannelGoods" resultType="com.qs.mp.channel.domain.vo.ChannelGoodsVO">
+        select t1.*,t3.name as supplierName
+        from mp_channel_goods t1
+        left join mp_channel_goods_order_item t2 on t1.order_id = t2.order_id
+        left join mp_supplier t3 on t2.supplier_id = t3.id
+            ${ew.customSqlSegment}
+    </select>
+    <select id="listChannelGoodsUnderChannel" resultType="com.qs.mp.channel.domain.vo.ChannelGoodsVO">
+        select t1.*,t2.name as channelName
+        from mp_channel_goods t1
+        left join mp_channel t2 on t1.channel_id = t2.channel_id
+        left join mp_channel t3 on t2.parent_id = t3.channel_id
+            ${ew.customSqlSegment}
+    </select>
 
 </mapper>