瀏覽代碼

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

zhangkaikai 1 年之前
父節點
當前提交
ecefe79ebd
共有 26 個文件被更改,包括 770 次插入35 次删除
  1. 8 2
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelGoodsOrderMgrController.java
  2. 68 6
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelGoodsSettleMgrController.java
  3. 1 1
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelGoodsController.java
  4. 70 0
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelGoodsSettleController.java
  5. 46 0
      mp-common/src/main/java/com/qs/mp/common/enums/ChannelGoodsOrderSettleEnum.java
  6. 0 12
      mp-service/src/main/java/com/qs/mp/channel/domain/ChannelGoods.java
  7. 105 0
      mp-service/src/main/java/com/qs/mp/channel/domain/ChannelGoodsSettleOrder.java
  8. 101 0
      mp-service/src/main/java/com/qs/mp/channel/domain/ChannelGoodsSettleOrderItem.java
  9. 43 0
      mp-service/src/main/java/com/qs/mp/channel/domain/param/PushChannelGoodsSettleParam.java
  10. 9 0
      mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelGoodsOrderInfoVO.java
  11. 31 0
      mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelGoodsSettleItem.java
  12. 16 11
      mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelGoodsSettleVO.java
  13. 42 0
      mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelSettleVO.java
  14. 2 0
      mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelGoodsOrderMapper.java
  15. 13 0
      mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelGoodsSettleOrderItemMapper.java
  16. 13 0
      mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelGoodsSettleOrderMapper.java
  17. 2 0
      mp-service/src/main/java/com/qs/mp/channel/service/IChannelGoodsOrderService.java
  18. 16 0
      mp-service/src/main/java/com/qs/mp/channel/service/IChannelGoodsSettleOrderItemService.java
  19. 18 0
      mp-service/src/main/java/com/qs/mp/channel/service/IChannelGoodsSettleOrderService.java
  20. 5 0
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelGoodsOrderServiceImpl.java
  21. 20 0
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelGoodsSettleOrderItemServiceImpl.java
  22. 80 0
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelGoodsSettleOrderServiceImpl.java
  23. 0 2
      mp-service/src/main/resources/mapper/channel/ChannelGoodsMapper.xml
  24. 7 1
      mp-service/src/main/resources/mapper/channel/ChannelGoodsOrderMapper.xml
  25. 27 0
      mp-service/src/main/resources/mapper/channel/ChannelGoodsSettleOrderItemMapper.xml
  26. 27 0
      mp-service/src/main/resources/mapper/channel/ChannelGoodsSettleOrderMapper.xml

+ 8 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelGoodsOrderMgrController.java

@@ -6,6 +6,7 @@ import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.param.ChannelGoodsOrderQueryParam;
 import com.qs.mp.admin.domain.param.ChannelGoodsOrderShipParam;
 import com.qs.mp.admin.service.IGoodsService;
+import com.qs.mp.channel.domain.Channel;
 import com.qs.mp.channel.domain.ChannelGoodsOrder;
 import com.qs.mp.channel.domain.ChannelGoodsOrderItem;
 import com.qs.mp.channel.domain.excel.ChannelGoodsOrderExcel;
@@ -25,6 +26,7 @@ import com.qs.mp.common.enums.DeliverTypeEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.service.IDeliveryCompanyService;
 import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.user.service.IUserDeliverOrderItemService;
 import com.qs.mp.utils.ExcelUtil;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
@@ -72,6 +74,9 @@ public class ChannelGoodsOrderMgrController extends BaseApiController {
     @Autowired
     private IDeliveryCompanyService deliveryCompanyService;
 
+    @Autowired
+    private IUserDeliverOrderItemService userDeliverOrderItemService;
+
     @Autowired
     private MapperFacade mapperFacade;
 
@@ -124,8 +129,8 @@ public class ChannelGoodsOrderMgrController extends BaseApiController {
         ChannelGoodsOrderInfoVO goodsOrderInfoVO = mapperFacade.map(channelGoodsOrder, ChannelGoodsOrderInfoVO.class);
 
         if (null != goodsOrderInfoVO && null != goodsOrderInfoVO.getChannelId()) {
-            ChannelVO channel = channelService.getChannelVoById(goodsOrderInfoVO.getChannelId());
-            goodsOrderInfoVO.setChannel(channel);
+            Channel channel = channelService.getById(goodsOrderInfoVO.getChannelId());
+            goodsOrderInfoVO.setChannelName(channel.getName());
         }
         if (null != goodsOrderInfoVO && null != goodsOrderInfoVO.getDeliveryId()) {
             DeliveryCompany deliveryCompany = deliveryCompanyService.getById(goodsOrderInfoVO.getDeliveryId());
@@ -134,6 +139,7 @@ public class ChannelGoodsOrderMgrController extends BaseApiController {
         QueryWrapper<ChannelGoodsOrderItem> goodsOrderItemQueryWrapper = new QueryWrapper<>();
         goodsOrderItemQueryWrapper.eq("t1.order_id", order.getOrderId());
         List<ChannelGoodsOrderItemVO> orderItemVOList = channelGoodsOrderItemService.selectChannelGoodsOrderItemVOList(goodsOrderItemQueryWrapper);
+//        goodsOrderInfoVO.setDeliverList(userDeliverOrderItemService.getChannelGoodsDeliverItemList(order.getOrderId(), orderItemVOList));
         goodsOrderInfoVO.setChannelGoodsOrderItem(orderItemVOList);
         return AjaxResult.success(goodsOrderInfoVO);
     }

+ 68 - 6
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelGoodsSettleMgrController.java

@@ -1,12 +1,26 @@
 package com.qs.mp.web.controller.api.admin;
+import java.util.Date;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.qs.mp.admin.domain.param.ChannelGoodsOrderQueryParam;
+import com.qs.mp.channel.domain.ChannelGoods;
 import com.qs.mp.channel.domain.ChannelGoodsOrder;
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrder;
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem;
+import com.qs.mp.channel.domain.param.PushChannelGoodsSettleParam;
+import com.qs.mp.channel.domain.vo.ChannelGoodsOrderVO;
 import com.qs.mp.channel.domain.vo.ChannelGoodsSettleVO;
+import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
 import com.qs.mp.channel.service.IChannelGoodsOrderService;
 import com.qs.mp.channel.service.IChannelGoodsService;
+import com.qs.mp.channel.service.IChannelGoodsSettleOrderItemService;
+import com.qs.mp.channel.service.IChannelGoodsSettleOrderService;
+import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.common.enums.ChannelGoodsOrderSettleEnum;
+import com.qs.mp.system.service.id.BizIdGenerator;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -15,13 +29,11 @@ import io.swagger.annotations.ApiResponses;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 结算门店采购商品
@@ -39,6 +51,13 @@ public class ChannelGoodsSettleMgrController extends BaseApiController {
     @Autowired
     private IChannelGoodsService channelGoodsService;
 
+    @Autowired
+    private IChannelGoodsSettleOrderService settleOrderService;
+
+    @Autowired
+    private IChannelGoodsSettleOrderItemService settleOrderItemService;
+
+
     @PostMapping("/list")
     @ApiOperation(value = "门店库存结算列表")
     @PreAuthorize("@ss.hasPermi('business:goods:list')")
@@ -56,13 +75,56 @@ public class ChannelGoodsSettleMgrController extends BaseApiController {
         queryWrapper.le(null != queryParam && null != queryParam.getMaxStock(), "t2.remain_qty", queryParam.getMaxStock());
         queryWrapper.ge(null != queryParam && null != queryParam.getStartTime(), "t1.created_time", queryParam.getStartTime());
         queryWrapper.le(null != queryParam && null != queryParam.getEndTime(), "t1.created_time", queryParam.getEndTime());
-        queryWrapper.like(null != queryParam && StringUtils.isNotBlank(queryParam.getTitle()), "t2.title", queryParam.getTitle());
         queryWrapper.orderByDesc("t1.created_time", "t1.order_id");
 
         List<ChannelGoodsSettleVO> channelGoodsOrderSettleVOS = channelGoodsOrderService.selectChannelGoodsSettleList(queryWrapper);
-
+        for (ChannelGoodsSettleVO channelGoodsOrderSettleVO : channelGoodsOrderSettleVOS) {
+            List<ChannelGoods> channelGoodsList = channelGoodsService.list(
+                    new QueryWrapper<ChannelGoods>().eq("order_id", channelGoodsOrderSettleVO.getOrderId())
+                            .like(null != queryParam && StringUtils.isNotBlank(queryParam.getTitle()), "title", queryParam.getTitle()));
+            channelGoodsOrderSettleVO.setItems(channelGoodsList);
+            if (CollectionUtils.isNotEmpty(channelGoodsList)) {
+                channelGoodsOrderSettleVO.setTotalQuantity(channelGoodsList.stream().mapToInt(ChannelGoods::getQuantity).sum());
+                channelGoodsOrderSettleVO.setTotalRemainQty(channelGoodsList.stream().mapToInt(ChannelGoods::getRemainQty).sum());
+                channelGoodsOrderSettleVO.setTotalSettleQty(channelGoodsList.stream().mapToInt(ChannelGoods::getSettleQty).sum());
+                channelGoodsOrderSettleVO.setTotalVerifyQty(channelGoodsList.stream().mapToInt(ChannelGoods::getVerifyQty).sum());
+                channelGoodsOrderSettleVO.setTotalPurchaseCost(channelGoodsList.stream().mapToInt(ChannelGoods::getPurchaseCost).sum());
+                channelGoodsOrderSettleVO.setStatus(channelGoodsList.get(0).getStatus());
+            }
+        }
         return getDataTable(channelGoodsOrderSettleVOS);
     }
 
+    @PostMapping("/detail/{orderId}")
+    @ApiOperation(value = "门店库存结算详情")
+    @PreAuthorize("@ss.hasPermi('business:goods:query')")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "成功", response = ChannelGoodsSettleVO.class)
+    )
+    public AjaxResult detail(@PathVariable String orderId) {
+        ChannelGoodsSettleVO channelGoodsOrderSettleVO = new ChannelGoodsSettleVO();
+        ChannelGoodsOrderVO channelGoodsOrderVO = channelGoodsOrderService.listChannelGoodsOrder(new QueryWrapper<ChannelGoodsOrder>().eq("t1.order_id", orderId));
+        List<ChannelGoods> channelGoodsList = channelGoodsService.list(new LambdaQueryWrapper<ChannelGoods>().eq(ChannelGoods::getOrderId, orderId));
+        if (CollectionUtils.isNotEmpty(channelGoodsList)) {
+            channelGoodsOrderSettleVO.setTotalQuantity(channelGoodsList.stream().mapToInt(ChannelGoods::getQuantity).sum());
+            channelGoodsOrderSettleVO.setTotalRemainQty(channelGoodsList.stream().mapToInt(ChannelGoods::getRemainQty).sum());
+            channelGoodsOrderSettleVO.setTotalSettleQty(channelGoodsList.stream().mapToInt(ChannelGoods::getSettleQty).sum());
+            channelGoodsOrderSettleVO.setTotalVerifyQty(channelGoodsList.stream().mapToInt(ChannelGoods::getVerifyQty).sum());
+            channelGoodsOrderSettleVO.setTotalPurchaseCost(channelGoodsList.stream().mapToInt(ChannelGoods::getPurchaseCost).sum());
+            channelGoodsOrderSettleVO.setStatus(channelGoodsList.get(0).getStatus());
+        }
+        channelGoodsOrderSettleVO.setTel(channelGoodsOrderVO.getTel());
+        channelGoodsOrderSettleVO.setChannelName(channelGoodsOrderVO.getChannelName());
+        channelGoodsOrderSettleVO.setItems(channelGoodsList);
+        return AjaxResult.success(channelGoodsOrderSettleVO);
+    }
+
+    @PostMapping("/push/settle/order")
+    @PreAuthorize("@ss.hasPermi('business:order:push')")
+    @ApiOperation(value = "推送结算订单")
+    public AjaxResult settleOrder(@RequestBody PushChannelGoodsSettleParam settleVO) {
+        Long settleOrderId = settleOrderService.pushSettleOrder(settleVO);
+        return AjaxResult.success(settleOrderId);
+    }
 
 }

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

@@ -96,7 +96,7 @@ public class ChannelGoodsController extends BaseApiController {
         QueryWrapper<ChannelGoods> wrapper = new QueryWrapper<ChannelGoods>().eq("t1.channel_id", channelId).eq("t1.status", param.getSettleStatus());
         if (ChannelGoodsSettleStatusTypeEnum.NO.equals(param.getSettleStatus())) {
             wrapper.orderByAsc("t1.remain_qty");
-            wrapper.orderByDesc("t1.create_time");
+            wrapper.orderByDesc("t1.created_time");
         } else {
             wrapper.orderByDesc("t1.settle_time");
         }

+ 70 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelGoodsSettleController.java

@@ -0,0 +1,70 @@
+package com.qs.mp.web.controller.api.channel;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrder;
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem;
+import com.qs.mp.channel.domain.vo.ChannelGoodsSettleItem;
+import com.qs.mp.channel.domain.vo.ChannelSettleVO;
+import com.qs.mp.channel.service.IChannelGoodsSettleOrderItemService;
+import com.qs.mp.channel.service.IChannelGoodsSettleOrderService;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.web.controller.common.BaseApiController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import ma.glasnost.orika.MapperFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author zhangkaikai
+ * @create 2023-06-08 6:56 PM
+ **/
+
+@Api(tags = "我的结算")
+@RestController
+@RequestMapping("/api/v1/mp/channel/goods/*")
+public class ChannelGoodsSettleController extends BaseApiController {
+
+    @Autowired
+    private IChannelGoodsSettleOrderService settleOrderService;
+
+    @Autowired
+    private IChannelGoodsSettleOrderItemService  settleOrderItemService;
+
+    @Autowired
+    private MapperFacade mapperFacade;
+
+
+    @PostMapping("/settle/list")
+    @ApiOperation("我的结算列表")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "成功", response = ChannelSettleVO.class)
+    )
+    public TableDataInfo list() {
+        startPage();
+        List<ChannelGoodsSettleOrder> list = settleOrderService.list();
+        List<ChannelSettleVO> channelSettleVOS = mapperFacade.mapAsList(list, ChannelSettleVO.class);
+        return getDataTable(channelSettleVOS);
+    }
+
+    @PostMapping("/settle/detail/{orderId}")
+    @ApiOperation("我的结算详情")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "成功", response = ChannelSettleVO.class)
+    )
+    public AjaxResult detail(@PathVariable Long orderId) {
+        ChannelGoodsSettleOrder settleOrder = settleOrderService.getById(orderId);
+        ChannelSettleVO channelSettleVO = mapperFacade.map(settleOrder, ChannelSettleVO.class);
+        List<ChannelGoodsSettleOrderItem> items = settleOrderItemService.list(new LambdaQueryWrapper<ChannelGoodsSettleOrderItem>().eq(ChannelGoodsSettleOrderItem::getOrderId, orderId));
+        channelSettleVO.setItems(items);
+        return AjaxResult.success(channelSettleVO);
+    }
+}

+ 46 - 0
mp-common/src/main/java/com/qs/mp/common/enums/ChannelGoodsOrderSettleEnum.java

@@ -0,0 +1,46 @@
+package com.qs.mp.common.enums;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONType;
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
+
+/**
+ * @author zhangkaikai
+ * @create 2023-06-08 6:43 PM
+ **/
+@JSONType(deserializer = EnumValueDeserializer.class)
+public enum ChannelGoodsOrderSettleEnum implements IEnum<Integer> {
+
+    NOT_PAY(1, "待支付"),
+    FINISHED(2, "已完成");
+
+    private final int value;
+    private final String desc;
+
+    ChannelGoodsOrderSettleEnum(final int value, final String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 重写toString,单个转化成json
+     * @return
+     */
+    @Override
+    public String toString() {
+        JSONObject object = new JSONObject();
+        object.put("value",value);
+        object.put("desc", desc);
+        return object.toString();
+    }
+}

+ 0 - 12
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelGoods.java

@@ -66,12 +66,6 @@ public class ChannelGoods implements Serializable {
     @TableField("type")
     private Integer type;
 
-    /**
-     * 详情
-     */
-    @TableField("description")
-    private String description;
-
     /**
      * 关联id couponId
      */
@@ -121,12 +115,6 @@ public class ChannelGoods implements Serializable {
     @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
     private ChannelGoodsSettleStatusTypeEnum status;
 
-    /**
-     * 商家信息
-     */
-    @TableField("merchant_info")
-    private String merchantInfo;
-
     /**
      * 供应商id
      */

+ 105 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelGoodsSettleOrder.java

@@ -0,0 +1,105 @@
+package com.qs.mp.channel.domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import com.qs.mp.common.enums.ChannelGoodsOrderSettleEnum;
+import lombok.Data;
+
+/**
+ * @describe 经销商商品结算订单实体类
+ * @auther quanshu
+ * @create 2023-06-08 18:20:12
+ */
+@TableName("mp_channel_goods_settle_order")
+@Data
+public class ChannelGoodsSettleOrder implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+        /**
+     * 主键
+     */
+         @TableId(value = "order_id", type = IdType.AUTO)
+    private Long orderId;
+
+        /**
+     * 渠道ID
+     */
+         @TableField("channel_id")
+    private Long channelId;
+
+        /**
+     * 标题
+     */
+         @TableField("title")
+    private String title;
+
+        /**
+     * 结算数量
+     */
+         @TableField("settle_num")
+    private Integer settleNum;
+
+        /**
+     * 应付金额
+     */
+         @TableField("order_amt")
+    private Integer orderAmt;
+
+        /**
+     * 结算金额
+     */
+         @TableField("settle_amt")
+    private Integer settleAmt;
+
+        /**
+     * 订单类型1采购商品
+     */
+         @TableField("type")
+    private Integer type;
+
+        /**
+     * 支付类型1支付宝,2微信,10支付宝直连
+     */
+         @TableField("pay_type")
+    private String payType;
+
+        /**
+     * 订单状态,1待支付 2已完成
+     */
+         @TableField("status")
+         @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+         private ChannelGoodsOrderSettleEnum status;
+
+        /**
+     * 结算门店
+     */
+         @TableField("settle_channel")
+    private String settleChannel;
+
+        /**
+     * 支付时间
+     */
+         @TableField("pay_time")
+    private Date payTime;
+
+        /**
+     * 创建时间
+     */
+         @TableField("created_time")
+    private Date createdTime;
+
+        /**
+     * 更新时间
+     */
+         @TableField("updated_time")
+    private Date updatedTime;
+
+
+}

+ 101 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelGoodsSettleOrderItem.java

@@ -0,0 +1,101 @@
+package com.qs.mp.channel.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+/**
+ * @describe 经销商商品结算订单明细实体类
+ * @auther quanshu
+ * @create 2023-06-08 18:21:18
+ */
+@TableName("mp_channel_goods_settle_order_item")
+@Data
+public class ChannelGoodsSettleOrderItem implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+        /**
+     * 主键
+     */
+         @TableId(value = "item_id", type = IdType.AUTO)
+    private Long itemId;
+
+        /**
+     * 渠道ID
+     */
+         @TableField("channel_id")
+    private Long channelId;
+
+        /**
+     * 订单ID
+     */
+         @TableField("order_id")
+    private Long orderId;
+
+        /**
+     * 门店采购商品id
+     */
+         @TableField("channel_goods_id")
+    private Long channelGoodsId;
+
+        /**
+     * 商品标题
+     */
+         @TableField("title")
+    private String title;
+
+        /**
+     * 商品图片
+     */
+         @TableField("pic_url")
+    private String picUrl;
+
+    /**
+     * 库存数量
+     */
+    @TableField("quantity")
+    private Integer quantity;
+
+        /**
+     * 创建时间
+     */
+         @TableField("created_time")
+    private Date createdTime;
+
+        /**
+     * 更新时间
+     */
+         @TableField("updated_time")
+    private Date updatedTime;
+
+        /**
+     * 采购商品经销商采购成本
+     */
+         @TableField("purchase_cost")
+    private Integer purchaseCost;
+
+        /**
+     * 已销数量
+     */
+         @TableField("verify_qty")
+    private Integer verifyQty;
+
+        /**
+     * 剩余库存
+     */
+         @TableField("remain_qty")
+    private Integer remainQty;
+
+        /**
+     * 结算数量
+     */
+         @TableField("settle_qty")
+    private Integer settleQty;
+
+
+}

+ 43 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/PushChannelGoodsSettleParam.java

@@ -0,0 +1,43 @@
+package com.qs.mp.channel.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhangkaikai
+ * @create 2023-06-08 5:05 PM
+ **/
+@Data
+@ApiModel("推送门店采购商品结算订单参数")
+public class PushChannelGoodsSettleParam {
+
+//    @ApiModelProperty("采购商品id")
+//    private List<Long> channelGoodsId;
+//
+//    @ApiModelProperty("总库存")
+//    private Integer totalQuantity;
+//    @ApiModelProperty("总已核销")
+//    private Integer totalVerifyQty;
+//
+//    @ApiModelProperty("总剩余库存")
+//    private Integer totalRemainQty;
+//
+//    @ApiModelProperty("总采购成本")
+//    private Integer totalPurchaseCost;
+//
+//    @ApiModelProperty("结算库存")
+//    private Integer totalSettleQty;
+//
+//    @ApiModelProperty("应付金额")
+//    private Integer orderAmt;
+//
+    @ApiModelProperty("采购商品订单id")
+    private String orderId;
+
+    @ApiModelProperty("结算金额")
+    private Integer settleAmt;
+
+}

+ 9 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelGoodsOrderInfoVO.java

@@ -3,6 +3,7 @@ package com.qs.mp.channel.domain.vo;
 import com.qs.mp.channel.domain.ChannelGoodsOrder;
 import com.qs.mp.channel.domain.ChannelGoodsOrderItem;
 import com.qs.mp.common.domain.DeliveryCompany;
+import com.qs.mp.user.domain.vo.OrderDeliverItemVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -20,12 +21,20 @@ public class ChannelGoodsOrderInfoVO extends ChannelGoodsOrder {
     @ApiModelProperty("自动确认收货时间")
     private String autoConfirmTime;
 
+    // 物流信息
+    @ApiModelProperty("物流信息")
+    List<OrderDeliverItemVO> deliverList;
+
+
     @ApiModelProperty("物流信息")
     private DeliveryCompany deliveryCompany;
 
     @ApiModelProperty("渠道信息")
     private ChannelVO channel;
 
+    @ApiModelProperty("门店名称")
+    private String channelName;
+
     @ApiModelProperty("采购商品订单详情")
     private List<ChannelGoodsOrderItemVO> channelGoodsOrderItem;
 

+ 31 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelGoodsSettleItem.java

@@ -0,0 +1,31 @@
+package com.qs.mp.channel.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhangkaikai
+ * @create 2023-06-08 3:02 PM
+ **/
+@ApiModel("门店库存管理详情")
+@Data
+public class ChannelGoodsSettleItem {
+    @ApiModelProperty("商品名称")
+    private String title;
+
+    @ApiModelProperty("库存")
+    private Integer quantity;
+
+    @ApiModelProperty("已核销")
+    private Integer verifyQty;
+
+    @ApiModelProperty("剩余库存")
+    private Integer remainQty;
+
+    @ApiModelProperty("采购成本")
+    private Integer purchaseCost;
+
+    @ApiModelProperty("结算库存")
+    private Integer settleQty;
+}

+ 16 - 11
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelGoodsSettleVO.java

@@ -2,6 +2,7 @@ package com.qs.mp.channel.domain.vo;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.qs.mp.channel.domain.ChannelGoods;
 import com.qs.mp.common.enums.ChannelGoodsSettleStatusTypeEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModel;
@@ -9,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author zhangkaikai
@@ -22,6 +24,9 @@ public class ChannelGoodsSettleVO {
     @ApiModelProperty("订单号")
     private String orderId;
 
+    @ApiModelProperty("门店采购商品id")
+    private Long channelGoodsId;
+
     @ApiModelProperty("下单时间")
     private Date createdTime;
 
@@ -31,25 +36,25 @@ public class ChannelGoodsSettleVO {
     @ApiModelProperty("手机号")
     private String tel;
 
-    @ApiModelProperty("商品名称")
-    private String title;
-
     @ApiModelProperty("总库存")
-    private Integer quantity;
+    private Integer totalQuantity;
 
-    @ApiModelProperty("已核销")
-    private Integer verifyQty;
+    @ApiModelProperty("已核销")
+    private Integer totalVerifyQty;
 
-    @ApiModelProperty("剩余库存")
-    private Integer remainQty;
+    @ApiModelProperty("剩余库存")
+    private Integer totalRemainQty;
 
-    @ApiModelProperty("采购成本")
-    private Integer purchaseCost;
+    @ApiModelProperty("采购成本")
+    private Integer totalPurchaseCost;
 
     @ApiModelProperty("结算库存")
-    private Integer settleQty;
+    private Integer totalSettleQty;
 
     @ApiModelProperty("状态 1未结算 2已结算 3已结算 4核销完成")
     @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
     private ChannelGoodsSettleStatusTypeEnum status;
+
+    @ApiModelProperty("门店库存管理结算明细")
+    List<ChannelGoods> items;
 }

+ 42 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelSettleVO.java

@@ -0,0 +1,42 @@
+package com.qs.mp.channel.domain.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem;
+import com.qs.mp.common.enums.ChannelGoodsOrderSettleEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author zhangkaikai
+ * @create 2023-06-08 7:02 PM
+ **/
+@ApiModel("门店结算出参类")
+@Data
+public class ChannelSettleVO {
+
+
+    @ApiModelProperty("订单id")
+    private Long orderId;
+
+    @ApiModelProperty("应付金额")
+    private Integer payAmt;
+
+    @ApiModelProperty("结算金额")
+    private Integer settleAmt;
+
+    @ApiModelProperty("我的结算订单状态")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private ChannelGoodsOrderSettleEnum status;
+
+    @ApiModelProperty("创建时间")
+    private Date createdTime;
+
+    @ApiModelProperty("结算订单明细")
+    private List<ChannelGoodsSettleOrderItem> items;
+
+}

+ 2 - 0
mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelGoodsOrderMapper.java

@@ -22,4 +22,6 @@ public interface ChannelGoodsOrderMapper extends BaseMapper<ChannelGoodsOrder> {
     int selectChannelGoodsOrderCount(@Param(Constants.WRAPPER) QueryWrapper<ChannelGoodsOrder> queryWrapper);
 
     List<ChannelGoodsSettleVO> selectChannelGoodsSettleList(@Param(Constants.WRAPPER) QueryWrapper<ChannelGoodsOrder> queryWrapper);
+
+    ChannelGoodsOrderVO listChannelGoodsOrder(@Param(Constants.WRAPPER) QueryWrapper<ChannelGoodsOrder> queryWrapper);
 }

+ 13 - 0
mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelGoodsSettleOrderItemMapper.java

@@ -0,0 +1,13 @@
+package com.qs.mp.channel.mapper;
+
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @auther quanshu
+ * @create 2023-06-08 18:21:18
+ * @describe 经销商商品结算订单明细mapper类
+ */
+public interface ChannelGoodsSettleOrderItemMapper extends BaseMapper<ChannelGoodsSettleOrderItem> {
+
+}

+ 13 - 0
mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelGoodsSettleOrderMapper.java

@@ -0,0 +1,13 @@
+package com.qs.mp.channel.mapper;
+
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @auther quanshu
+ * @create 2023-06-08 18:20:12
+ * @describe 经销商商品结算订单mapper类
+ */
+public interface ChannelGoodsSettleOrderMapper extends BaseMapper<ChannelGoodsSettleOrder> {
+
+}

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

@@ -70,4 +70,6 @@ public interface IChannelGoodsOrderService extends IService<ChannelGoodsOrder> {
     int selectChannelGoodsOrderCount(QueryWrapper<ChannelGoodsOrder> queryWrapper);
 
     List<ChannelGoodsSettleVO> selectChannelGoodsSettleList(QueryWrapper<ChannelGoodsOrder> queryWrapper);
+
+    ChannelGoodsOrderVO listChannelGoodsOrder(QueryWrapper<ChannelGoodsOrder> queryWrapper);
 }

+ 16 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelGoodsSettleOrderItemService.java

@@ -0,0 +1,16 @@
+package com.qs.mp.channel.service;
+
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 经销商商品结算订单明细 服务类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2023-06-08
+ */
+public interface IChannelGoodsSettleOrderItemService extends IService<ChannelGoodsSettleOrderItem> {
+
+}

+ 18 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelGoodsSettleOrderService.java

@@ -0,0 +1,18 @@
+package com.qs.mp.channel.service;
+
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.channel.domain.param.PushChannelGoodsSettleParam;
+
+/**
+ * <p>
+ * 经销商商品结算订单 服务类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2023-06-08
+ */
+public interface IChannelGoodsSettleOrderService extends IService<ChannelGoodsSettleOrder> {
+
+    Long pushSettleOrder(PushChannelGoodsSettleParam settleVO);
+}

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

@@ -300,4 +300,9 @@ public class ChannelGoodsOrderServiceImpl extends ServiceImpl<ChannelGoodsOrderM
         return getBaseMapper().selectChannelGoodsSettleList(queryWrapper);
     }
 
+    @Override
+    public ChannelGoodsOrderVO listChannelGoodsOrder(QueryWrapper<ChannelGoodsOrder> queryWrapper) {
+        return getBaseMapper().listChannelGoodsOrder(queryWrapper);
+    }
+
 }

+ 20 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelGoodsSettleOrderItemServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qs.mp.channel.service.impl;
+
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem;
+import com.qs.mp.channel.mapper.ChannelGoodsSettleOrderItemMapper;
+import com.qs.mp.channel.service.IChannelGoodsSettleOrderItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 经销商商品结算订单明细 服务实现类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2023-06-08
+ */
+@Service
+public class ChannelGoodsSettleOrderItemServiceImpl extends ServiceImpl<ChannelGoodsSettleOrderItemMapper, ChannelGoodsSettleOrderItem> implements IChannelGoodsSettleOrderItemService {
+
+}

+ 80 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelGoodsSettleOrderServiceImpl.java

@@ -0,0 +1,80 @@
+package com.qs.mp.channel.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qs.mp.channel.domain.ChannelGoods;
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrder;
+import com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem;
+import com.qs.mp.channel.domain.param.PushChannelGoodsSettleParam;
+import com.qs.mp.channel.mapper.ChannelGoodsSettleOrderMapper;
+import com.qs.mp.channel.service.IChannelGoodsService;
+import com.qs.mp.channel.service.IChannelGoodsSettleOrderItemService;
+import com.qs.mp.channel.service.IChannelGoodsSettleOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.common.enums.ChannelGoodsOrderSettleEnum;
+import com.qs.mp.common.enums.ChannelGoodsSettleStatusTypeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 经销商商品结算订单 服务实现类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2023-06-08
+ */
+@Service
+public class ChannelGoodsSettleOrderServiceImpl extends ServiceImpl<ChannelGoodsSettleOrderMapper, ChannelGoodsSettleOrder> implements IChannelGoodsSettleOrderService {
+
+    @Autowired
+    private IChannelGoodsService channelGoodsService;
+
+    @Autowired
+    private IChannelGoodsSettleOrderService settleOrderService;
+
+    @Autowired
+    private IChannelGoodsSettleOrderItemService settleOrderItemService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long pushSettleOrder(PushChannelGoodsSettleParam settleVO) {
+        List<ChannelGoods> channelGoodsList = channelGoodsService.list(new LambdaQueryWrapper<ChannelGoods>().eq(ChannelGoods::getOrderId, settleVO.getOrderId()));
+        ChannelGoodsSettleOrder settleOrder = new ChannelGoodsSettleOrder();
+        settleOrder.setSettleNum(channelGoodsList.stream().mapToInt(ChannelGoods::getSettleQty).sum());
+        Integer orderAmt = 0;
+        for (ChannelGoods channelGoods : channelGoodsList) {
+            orderAmt += channelGoods.getPurchaseCost() * channelGoods.getSettleQty();
+        }
+        settleOrder.setChannelId(channelGoodsList.get(0).getChannelId());
+        settleOrder.setOrderAmt(orderAmt);
+        settleOrder.setSettleAmt(settleVO.getSettleAmt());
+        settleOrder.setPayType("微信");
+        settleOrder.setStatus(ChannelGoodsOrderSettleEnum.NOT_PAY);
+        settleOrderService.save(settleOrder);
+
+        for (ChannelGoods channelGoods : channelGoodsList) {
+            ChannelGoodsSettleOrderItem settleOrderItem = new ChannelGoodsSettleOrderItem();
+            settleOrderItem.setOrderId(settleOrder.getOrderId());
+            settleOrderItem.setChannelId(channelGoods.getChannelId());
+            settleOrderItem.setChannelGoodsId(channelGoods.getId());
+            settleOrderItem.setTitle(channelGoods.getTitle());
+            settleOrderItem.setPicUrl(channelGoods.getPicUrl());
+            settleOrderItem.setQuantity(channelGoods.getQuantity());
+            settleOrderItem.setPurchaseCost(channelGoods.getPurchaseCost());
+            settleOrderItem.setVerifyQty(channelGoods.getVerifyQty());
+            settleOrderItem.setRemainQty(channelGoods.getRemainQty());
+            settleOrderItem.setSettleQty(channelGoods.getSettleQty());
+            settleOrderItemService.save(settleOrderItem);
+        }
+
+        boolean update = channelGoodsService.update(new LambdaUpdateWrapper<ChannelGoods>().set(ChannelGoods::getStatus, ChannelGoodsSettleStatusTypeEnum.DOING).eq(ChannelGoods::getOrderId, settleVO.getOrderId()));
+        Assert.isTrue(update, "更新门店采购商品信息失败:order_id =" + settleVO.getOrderId());
+
+        return settleOrder.getOrderId();
+    }
+}

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

@@ -11,14 +11,12 @@
         <result column="title" property="title" />
         <result column="pic_url" property="picUrl" />
         <result column="type" property="type" />
-        <result column="description" property="description" />
         <result column="ref_id" property="refId" />
         <result column="purchase_price" property="purchasePrice" />
         <result column="purchase_cost" property="purchaseCost" />
         <result column="quantity" property="quantity" />
         <result column="verify_qty" property="verifyQty" />
         <result column="status" property="status" />
-        <result column="merchant_info" property="merchantInfo" />
         <result column="supplier_id" property="supplierId" />
         <result column="sort_weight" property="sortWeight" />
         <result column="multi_sku" property="multiSku" />

+ 7 - 1
mp-service/src/main/resources/mapper/channel/ChannelGoodsOrderMapper.xml

@@ -51,11 +51,17 @@
             ${ew.customSqlSegment}
     </select>
     <select id="selectChannelGoodsSettleList" resultType="com.qs.mp.channel.domain.vo.ChannelGoodsSettleVO">
-        select t1.order_id,t1.created_time,t1.title,t2.name as channelName,t1.tel,t3.quantity,t3.verify_qty,t3.remain_qty,t3.purchase_cost,t3.settle_qty,t3.status
+        select t1.order_id,t1.created_time,t2.name as channelName,t1.tel
         from mp_channel_goods_order t1
         left join mp_channel t2 on t1.channel_id = t2.channel_id
         left join mp_channel_goods t3 on t1.order_id = t3.order_id
             ${ew.customSqlSegment}
     </select>
+    <select id="listChannelGoodsOrder" resultType="com.qs.mp.channel.domain.vo.ChannelGoodsOrderVO">
+        select t1.*,t2.name as channelName
+        from mp_channel_goods_order t1
+        left join mp_channel t2 on t1.channel_id = t2.channel_id
+            ${ew.customSqlSegment}
+    </select>
 
 </mapper>

+ 27 - 0
mp-service/src/main/resources/mapper/channel/ChannelGoodsSettleOrderItemMapper.xml

@@ -0,0 +1,27 @@
+<?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.qs.mp.channel.mapper.ChannelGoodsSettleOrderItemMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.qs.mp.channel.domain.ChannelGoodsSettleOrderItem">
+        <id column="item_id" property="itemId" />
+        <result column="channel_id" property="channelId" />
+        <result column="order_id" property="orderId" />
+        <result column="channel_goods_id" property="channelGoodsId" />
+        <result column="title" property="title" />
+        <result column="pic_url" property="picUrl" />
+        <result column="quantity" property="quantity" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="purchase_cost" property="purchaseCost" />
+        <result column="verify_qty" property="verifyQty" />
+        <result column="remain_qty" property="remainQty" />
+        <result column="settle_qty" property="settleQty" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        item_id, channel_id, order_id, channel_goods_id, title, pic_url, goods_num, created_time, updated_time, purchase_cost, verify_qty, remain_qty, settle_qty
+    </sql>
+
+</mapper>

+ 27 - 0
mp-service/src/main/resources/mapper/channel/ChannelGoodsSettleOrderMapper.xml

@@ -0,0 +1,27 @@
+<?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.qs.mp.channel.mapper.ChannelGoodsSettleOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.qs.mp.channel.domain.ChannelGoodsSettleOrder">
+        <id column="order_id" property="orderId" />
+        <result column="channel_id" property="channelId" />
+        <result column="title" property="title" />
+        <result column="settle_num" property="settleNum" />
+        <result column="order_amt" property="orderAmt" />
+        <result column="settle_amt" property="settleAmt" />
+        <result column="type" property="type" />
+        <result column="pay_type" property="payType" />
+        <result column="status" property="status" />
+        <result column="settle_channel" property="settleChannel" />
+        <result column="pay_time" property="payTime" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        order_id, channel_id, title, settle_num, order_amt, settle_amt, type, pay_type, status, settle_channel, pay_time, created_time, updated_time
+    </sql>
+
+</mapper>