Ver código fonte

改动过的

huanglizhi 1 ano atrás
pai
commit
bf1fb539ff
41 arquivos alterados com 826 adições e 273 exclusões
  1. 10 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/GoodsSnController.java
  2. 14 6
      module-erp/src/main/java/com/hys/app/controller/erp/use/KdnController.java
  3. 3 3
      module-erp/src/main/java/com/hys/app/controller/erp/use/OrderController.java
  4. 42 5
      module-erp/src/main/java/com/hys/app/controller/erp/use/ProductManagerController.java
  5. 0 6
      module-erp/src/main/java/com/hys/app/controller/erp/use/WarehouseOutManagerController.java
  6. 2 3
      module-erp/src/main/java/com/hys/app/mapper/erp/OrderMapper.java
  7. 3 0
      module-erp/src/main/java/com/hys/app/mapper/erp/ProductStockMapper.java
  8. 1 0
      module-erp/src/main/java/com/hys/app/mapper/goods/ProductMapper.java
  9. 6 6
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderDO.java
  10. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java
  11. 5 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendDO.java
  12. 13 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendItemDO.java
  13. 4 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductDO.java
  14. 14 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductGroupDO.java
  15. 9 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductGroupItemDO.java
  16. 4 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseDO.java
  17. 13 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutItemDO.java
  18. 3 3
      module-erp/src/main/java/com/hys/app/model/erp/dto/GoodsDTO.java
  19. 7 3
      module-erp/src/main/java/com/hys/app/model/erp/dto/GoodsSnDTO.java
  20. 12 6
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderDTO.java
  21. 2 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderQueryParams.java
  22. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java
  23. 24 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductGroupQueryParams.java
  24. 6 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductQueryParams.java
  25. 4 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseDTO.java
  26. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderStatusEnum.java
  27. 10 3
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderSendItemVO.java
  28. 2 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/ProductStockVO.java
  29. 28 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/TransitVO.java
  30. 9 1
      module-erp/src/main/java/com/hys/app/service/erp/OrderManager.java
  31. 38 1
      module-erp/src/main/java/com/hys/app/service/erp/ProductManager.java
  32. 13 6
      module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java
  33. 175 69
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java
  34. 94 24
      module-erp/src/main/java/com/hys/app/service/erp/impl/ProductManagerImpl.java
  35. 57 71
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryManagerImpl.java
  36. 11 19
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java
  37. 7 4
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java
  38. 57 29
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java
  39. 100 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/CreateStoreModel.java
  40. 13 0
      module-erp/src/main/resources/mapper/ProductStockMapper.xml
  41. 2 2
      server/src/main/resources/application.yml

+ 10 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/GoodsSnController.java

@@ -53,10 +53,20 @@ public class GoodsSnController {
     public GoodsSnVO getDetail(@PathVariable Long id) {
         return goodsSnManager.getDetail(id);
     }
+
+
     @ApiOperation(value = "分页列表")
     @GetMapping
     public WebPage<GoodsSnVO> list(GoodsSnQueryParams queryParams) {
         return goodsSnManager.list(queryParams);
     }
+
+
+    @ApiOperation(value = "删除序列号")
+    @PostMapping("/removeById/{snId}")
+    @Log(client = LogClient.admin, detail = "删除序列号")
+    public void removeById(@PathVariable Long snId) {
+        goodsSnManager.removeById(snId);
+    }
 }
 

+ 14 - 6
module-erp/src/main/java/com/hys/app/controller/erp/use/KdnController.java

@@ -27,19 +27,27 @@ import javax.validation.Valid;
 @Slf4j
 @AllArgsConstructor
 public class KdnController {
-    private  KuaiDiNiaoService kuaiDiNiaoService;
+    private KuaiDiNiaoService kuaiDiNiaoService;
 
     @PostMapping("/returnBack")
-    public resReturnBackBase kdnReturnBack( ReturnBackBase returnBackBase) {
-       return kuaiDiNiaoService.kdnReturnBack(returnBackBase);
+    public resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase) {
+        return kuaiDiNiaoService.kdnReturnBack(returnBackBase);
     }
 
     @ApiOperation(value = "快递鸟发货获取单号")
     @PostMapping("/kdShip/{orderId}")
-    @Log(client = LogClient.admin, detail = "出库单[${shipDTO.id}]发货")
+    @Log(client = LogClient.admin, detail = "订单[${orderId}]发货")
     public String kdShip(@PathVariable(value = "orderId") Long orderId
             , @RequestBody @Valid PreOrderModel preOrderModel
-            ,@RequestBody AddressDTO addressDTO) {
-        return kuaiDiNiaoService.kdShip(preOrderModel,orderId,addressDTO);
+            , @RequestBody AddressDTO addressDTO) {
+        return kuaiDiNiaoService.kdShip(preOrderModel, orderId, addressDTO);
+    }
+
+
+    @ApiOperation(value = "快递鸟创建单号")
+    @PostMapping("/createStore")
+    @Log(client = LogClient.admin, detail = "快递鸟创建店铺")
+    public void createStore(@RequestBody @Valid CreateStoreModel createStoreModel) {
+         kuaiDiNiaoService.createStore(createStoreModel);
     }
 }

+ 3 - 3
module-erp/src/main/java/com/hys/app/controller/erp/use/OrderController.java

@@ -87,10 +87,10 @@ public class OrderController {
 
 
     @ApiOperation(value = "发货")
-    @PostMapping("/orderSend/{orderId}")
+    @PostMapping("/orderSend/{orderSendId}")
     @Log(client = LogClient.admin, detail = "销售列表发货")
-    public void orderSend(@PathVariable(value = "orderId") Long orderId ) {
-         orderManager.orderSend(orderId);
+    public void orderSend(@PathVariable(value = "orderSendId") Long orderSendId,@RequestBody OrderSendDO orderSendDO) {
+         orderManager.orderSend(orderSendId,orderSendDO);
     }
 
 

+ 42 - 5
module-erp/src/main/java/com/hys/app/controller/erp/use/ProductManagerController.java

@@ -1,11 +1,17 @@
 package com.hys.app.controller.erp.use;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.model.erp.dos.ProductGroupDO;
 import com.hys.app.model.erp.dto.OrderDTO;
+import com.hys.app.model.erp.dto.ProductGroupQueryParams;
 import com.hys.app.model.erp.dto.ProductQueryParams;
+import com.hys.app.model.erp.vo.ProductStockVO;
 import com.hys.app.model.erp.vo.ProductVO;
+import com.hys.app.model.erp.vo.TransitVO;
+import com.hys.app.model.support.LogClient;
+import com.hys.app.model.support.validator.annotation.Log;
 import com.hys.app.service.erp.ProductManager;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -14,6 +20,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 产品相关API
@@ -46,7 +53,7 @@ public class ProductManagerController {
     @ApiOperation(value = "产品分组")
     @PostMapping("/productGroup")
     public void productGroup(@RequestBody @Valid ProductGroupDO productGroupDO) {
-         productManager.productGroup(productGroupDO);
+        productManager.productGroup(productGroupDO);
     }
 
     @ApiOperation(value = "删除产品分组")
@@ -56,16 +63,15 @@ public class ProductManagerController {
     }
 
 
-
     @PostMapping("/update/{id}")
     @ApiOperation(value = "修改产品分组")
-    public void updateProductGroup(@PathVariable(value = "id") Long id,@RequestBody @Valid ProductGroupDO productGroupDO) {
-        productManager.updateProductGroup(id,productGroupDO);
+    public void updateProductGroup(@PathVariable(value = "id") Long id, @RequestBody @Valid ProductGroupDO productGroupDO) {
+        productManager.updateProductGroup(id, productGroupDO);
     }
 
     @ApiOperation(value = "获取产品分组")
     @GetMapping("/list")
-    public Page<ProductGroupDO> page(ProductQueryParams queryParams) {
+    public Page<ProductGroupDO> page(ProductGroupQueryParams queryParams) {
         return productManager.getGroupPage(queryParams);
     }
 
@@ -76,5 +82,36 @@ public class ProductManagerController {
         return productManager.getGroupById(id);
     }
 
+    @ApiOperation(value = "根据分组信息获取选中的sku")
+    @GetMapping("/getProductByGroup/{warehouseId}/{groupId}")
+    @Log(client = LogClient.admin, detail = "新增入库获取所有的sku信息")
+    public List<ProductStockVO> getProductByGroup(@PathVariable(value = "groupId") Long groupId, @PathVariable(value = "warehouseId") List<Long> warehouseId) {
+        return productManager.getProductByGroup(groupId, warehouseId);
+    }
+
+    @ApiOperation(value = "设置库存预警")
+    @PostMapping("/updateWarnStock/{stockId}/{warnNum}")
+    @Log(client = LogClient.admin, detail = "新增入库获取所有的sku信息")
+    public void updateWarnStock(@PathVariable(value = "stockId") Long stockId, @PathVariable(value = "warnNum") Integer warnNum) {
+        productManager.updateWarnStock(stockId, warnNum);
+    }
+
+    @ApiOperation(value = "首页获取库存预警列表")
+    @GetMapping("/getWarnStock/{warehouseId}")
+    @Log(client = LogClient.admin, detail = "新增入库获取所有的sku信息")
+    public List<ProductStockVO> getWarnStock(@PathVariable(value = "warehouseId") Long warehouseId) {
+
+        return productManager.getWarnStock(warehouseId);
+    }
+
+    @ApiOperation(value = "获取获取在途明细")
+    @GetMapping("/transitDetail/{stockId}")
+    @Log(client = LogClient.admin, detail = "新增入库获取所有的sku信息")
+    public List<TransitVO> transitDetail(@PathVariable(value = "stockId") Long stockId) {
+
+        return productManager.transitDetail(stockId);
+    }
+
+
 }
 

+ 0 - 6
module-erp/src/main/java/com/hys/app/controller/erp/use/WarehouseOutManagerController.java

@@ -90,12 +90,6 @@ public class WarehouseOutManagerController {
         warehouseOutManager.audit(ids, status, remark);
     }
 
-    @ApiOperation(value = "发货")
-    @PostMapping("/ship")
-    @Log(client = LogClient.admin, detail = "出库单[${shipDTO.id}]发货")
-    public void ship(@RequestBody @Valid WarehouseOutShipDTO shipDTO) {
-        warehouseOutManager.ship(shipDTO);
-    }
 
     @ApiOperation(value = "查询出库单统计分页列表数据")
     @GetMapping("/statistics")

+ 2 - 3
module-erp/src/main/java/com/hys/app/mapper/erp/OrderMapper.java

@@ -19,11 +19,10 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
     default WebPage<OrderDO> selectPage(OrderQueryParams params) {
         return lambdaQuery()
                 .andX(StringUtil.notEmpty(params.getKeywords()),
-                        w -> w.like(OrderDO::getSn, params.getKeywords()).or().like(OrderDO::getMemberName, params.getKeywords()))
+                        w -> w.like(OrderDO::getSn, params.getKeywords()))
                 .likeIfPresent(OrderDO::getSn, params.getSn())
                 .eqIfPresent(OrderDO::getStatus, params.getStatus())
                 .eqIfPresent(OrderDO::getMemberId, params.getMemberId())
-                .likeIfPresent(OrderDO::getMemberName, params.getMemberName())
                 .betweenIfPresent(OrderDO::getOrderTime, params.getOrderTime())
                 .eqIfPresent(OrderDO::getWarehouseId, params.getWarehouseId())
                 .likeIfPresent(OrderDO::getWarehouseName, params.getWarehouseName())
@@ -41,7 +40,7 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
                 .likeIfPresent(OrderDO::getLogisticsCompanyName, params.getLogisticsCompanyName())
                 .likeIfPresent(OrderDO::getLogisticsTrackingNumber, params.getLogisticsTrackingNumber())
                 .eqIfPresent(OrderDO::getType, params.getType())
-                .orderByDesc(OrderDO::getId)
+                .orderByDesc(OrderDO::getCreateTime)
                 .page(params);
     }
 

+ 3 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/ProductStockMapper.java

@@ -8,6 +8,7 @@ import com.hys.app.model.erp.dto.ProductStockQueryParams;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.model.erp.vo.ProductStockV1;
 import com.hys.app.model.erp.vo.ProductStockWarningVO;
+import com.hys.app.model.erp.vo.TransitVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -42,5 +43,7 @@ public interface ProductStockMapper extends BaseMapperX<ProductStockDO> {
      * @return
      */
     IPage<ProductStockWarningVO> listWarningStockPage(Page page, @Param("warehouseId") Long warehouseId, @Param("deptId") Long deptId, @Param("name") String name);
+
+    List<TransitVO> transitDetail(@Param("stockId") Long stockId);
 }
 

+ 1 - 0
module-erp/src/main/java/com/hys/app/mapper/goods/ProductMapper.java

@@ -21,6 +21,7 @@ public interface ProductMapper extends BaseMapperX<ProductDO> {
                 .likeIfPresent(ProductDO::getSn, params.getSn())
                 .likeIfPresent(ProductDO::getName, params.getName())
                 .eqIfPresent(ProductDO::getCategoryId, params.getCategoryId())
+                .eqIfPresent(ProductDO::getHireOrSail, params.getHireOrSail())
                 .likeIfPresent(ProductDO::getUnit, params.getUnit())
                 .eqIfPresent(ProductDO::getMarketEnable, params.getMarketEnable())
                 .orderByDesc(ProductDO::getId)

+ 6 - 6
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderDO.java

@@ -55,14 +55,14 @@ public class OrderDO extends BaseDO {
     @ApiModelProperty(name = "member_id", value = "会员id/企业id")
     private Long memberId;
 
-    @ApiModelProperty(name = "pay_type", value = "支付方式")
-    private String payType;
+    @ApiModelProperty(name = "attachment", value = "客户电话")
+    private String customerPhone;
 
-    @ApiModelProperty(name = "member_name", value = "会员名称/企业名称")
-    private String memberName;
+    @ApiModelProperty(name = "attachment", value = "客户名称")
+    private String customerName;
 
-    @ApiModelProperty(name = "member_mobile", value = "会员手机号/企业手机号")
-    private String memberMobile;
+    @ApiModelProperty(name = "pay_type", value = "支付方式")
+    private String payType;
 
     @ApiModelProperty(name = "order_time", value = "下单时间")
     private Long orderTime;

+ 3 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java

@@ -116,4 +116,7 @@ public class OrderItemDO implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date endTime;
 
+    @ApiModelProperty(name = "has_return", value = "租赁订单详情是否返回")
+    private Boolean hasReturn = false;
+
 }

+ 5 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendDO.java

@@ -53,6 +53,8 @@ public class OrderSendDO extends BaseDO {
     @ApiModelProperty(name = "type", value = "订单类型")
     private OrderTypeEnum orderType;
 
+    @ApiModelProperty(name = "subtract_stock", value = "是否允许负库存")
+    private Boolean subtractStock;
 
     @ApiModelProperty(name = "warehouse_out_flag", value = "是否已出库")
     private Boolean warehouseOutFlag = false;
@@ -244,4 +246,7 @@ public class OrderSendDO extends BaseDO {
     @TableField(exist = false)
     private List<OrderSendItemVO> orderItemVOS;
 
+    @TableField(exist = false)
+    private WarehouseDO warehouseVO;
+
 }

+ 13 - 1
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendItemDO.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.model.erp.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -44,9 +45,20 @@ public class OrderSendItemDO implements Serializable {
     @ApiModelProperty(name = "pay_price", value = "应付金额(总)")
     private Double payPrice;
 
-    @ApiModelProperty(name = "pay_price", value = "应付金额(总)")
+    @ApiModelProperty(name = "product_stock_id", value = "库存id")
     private Long productStockId;
 
+    @ApiModelProperty(name = "end_time", value = "结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+
+    @ApiModelProperty(name = "type", value = "订单类型")
+    private OrderTypeEnum orderType;
+
+
+
     @ApiModelProperty(name = "remark", value = "备注")
     private String remark;
 

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductDO.java

@@ -119,6 +119,10 @@ public class ProductDO extends BaseDO {
     @ApiModelProperty(name = "是否有序列号", value = "商品视频")
     private Boolean haveSn;
 
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    @NotBlank(message = "出租商品  售卖商品")
+    private String hireOrSail;
+
     /**
      * 解决JacksonTypeHandler反序列化问题
      */

+ 14 - 1
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductGroupDO.java

@@ -2,10 +2,15 @@ package com.hys.app.model.erp.dos;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import java.util.List;
 
 /**
@@ -25,11 +30,19 @@ public class ProductGroupDO extends BaseDO {
     @TableId(type = IdType.ASSIGN_ID)
     private Long id;
 
+    @NotBlank
     private String name;
 
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    @NotBlank(message = "出租商品  售卖商品")
+    private String hireOrSail;
+
+
     private String remark;
 
     @TableField(exist = false)
-    List<ProductGroupItemDO> itemDOList;
+    @Valid
+    @NotEmpty
+    List<ProductGroupItemDO> itemDoList;
 
 }

+ 9 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductGroupItemDO.java

@@ -5,10 +5,14 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * 订单 DO
  *
@@ -28,8 +32,10 @@ public class ProductGroupItemDO extends BaseDO {
 
     private Long groupId;
 
+    @NotNull(message = "sku不能为空")
     private Long productId;
 
+    @NotNull(message = "商品不能为空")
     private Long goodsId;
 
     @TableField(exist = false)
@@ -38,4 +44,7 @@ public class ProductGroupItemDO extends BaseDO {
     @TableField(exist = false)
     private GoodsDO goodsVO;
 
+    @TableField(exist = false)
+    private String hireOrSail;
+
 }

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseDO.java

@@ -44,6 +44,10 @@ public class WarehouseDO extends BaseDO {
     @NotNull(message = "管理员id不能为空")
     private Long adminId;
 
+    @ApiModelProperty(name = "user_name", value = "负责人名称")
+    @NotBlank(message = "负责人名称")
+    private String userName;
+
     @ApiModelProperty(name = "phone", value = "管理员id")
     @NotBlank(message = "仓库省市区")
     private String phone;

+ 13 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutItemDO.java

@@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.model.erp.enums.OrderTypeEnum;
 import com.hys.app.model.erp.enums.ScanFormCodeTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.util.Date;
 import java.util.List;
 
 
@@ -118,4 +122,13 @@ public class WarehouseOutItemDO implements Serializable {
     @TableField(exist = false)
     private List<GoodsSnDO> snCodeList;
 
+    @ApiModelProperty(name = "end_time", value = "结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+
+    @ApiModelProperty(name = "type", value = "订单类型")
+    private OrderTypeEnum orderType;
+
 }

+ 3 - 3
module-erp/src/main/java/com/hys/app/model/erp/dto/GoodsDTO.java

@@ -31,7 +31,7 @@ public class GoodsDTO {
     private Long id;
 
     @ApiModelProperty(name = "imageList", value = "商品相册")
-    @NotEmpty(message = "出租商品  售卖商品")
+    @NotBlank(message = "出租商品  售卖商品")
     private String hireOrSail;
 
     @ApiModelProperty(name = "name", value = "商品名称")
@@ -85,8 +85,8 @@ public class GoodsDTO {
 
 
     @ApiModelProperty(name = "imageList", value = "商品相册")
-    @NotEmpty(message = "商品相册不能为空")
-    private List<GoodsGalleryDO> imageSmall;
+    @NotEmpty(message = "商品图标不能为空")
+    private List<GoodsGalleryDO> imageSmallList;
 
     @ApiModelProperty(name = "是否有序列号", value = "商品视频")
     private Boolean haveSn;

+ 7 - 3
module-erp/src/main/java/com/hys/app/model/erp/dto/GoodsSnDTO.java

@@ -27,8 +27,12 @@ public class GoodsSnDTO {
     private Long productId;
 
     @ApiModelProperty(name = "sku_id", value = "skuId")
-    @NotNull(message = "生成数量不能为空")
-    @Min(1)
-    private Integer num;
+    private Integer num= 1;
+
+    @ApiModelProperty(name = "sku_id", value = "skuId")
+    private String snCode;
+
+    @ApiModelProperty(name = "type", value = "skuId")
+    private String type;
 }
 

+ 12 - 6
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderDTO.java

@@ -51,9 +51,15 @@ public class OrderDTO {
     @ApiModelProperty(name = "marketing_id", value = "销售人员")
     private Long marketingId;
 
-    @ApiModelProperty(name = "member_id", value = "销售人员")
+    @ApiModelProperty(name = "member_id", value = "客户id选填")
     private Long memberId;
 
+    @ApiModelProperty(name = "attachment", value = "附件")
+    private String customerPhone;
+
+    @ApiModelProperty(name = "attachment", value = "附件")
+    private String customerName;
+
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
     @NotNull(message = "仓库id不能为空")
     private List<Long> warehouseId;
@@ -87,15 +93,15 @@ public class OrderDTO {
     private Double realPrice;
 
 
-    @ApiModelProperty(name = "province_city_area_address", value = "支付方式")
-    @NotBlank(message = "地址不能为空")
+    @ApiModelProperty(name = "province_city_area_address", value = "地址不能为空")
+//    @NotBlank(message = "地址不能为空")
     private String provinceCityAreaAddress;
 
-    @ApiModelProperty(name = "address", value = "支付方式")
-    @NotBlank(message = "地址不能为空")
+    @ApiModelProperty(name = "address", value = "地址不能为空")
+//    @NotBlank(message = "地址不能为空")
     private String address;
 
-    @ApiModelProperty(name = "province_city_area", value = "支付方式")
+    @ApiModelProperty(name = "province_city_area", value = "地址不能为空")
     @NotBlank(message = "地址不能为空")
     private String provinceCityArea;
 

+ 2 - 1
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderQueryParams.java

@@ -1,6 +1,7 @@
 package com.hys.app.model.erp.dto;
 
 import com.hys.app.framework.database.BaseQueryParam;
+import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
@@ -28,7 +29,7 @@ public class OrderQueryParams extends BaseQueryParam {
     private String sn;
 
     @ApiModelProperty(name = "status", value = "订单状态")
-    private String status;
+    private SaleOrderStatusEnum status;
 
     @ApiModelProperty(name = "member_id", value = "会员id")
     private Long memberId;

+ 3 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java

@@ -66,5 +66,8 @@ public class ProductDTO {
     @ApiModelProperty(name = "是否有序列号", value = "商品视频")
     private Boolean haveSn;
 
+    @ApiModelProperty(name = "hireOrSail", value = "商品相册")
+    private String hireOrSail;
+
 }
 

+ 24 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/ProductGroupQueryParams.java

@@ -0,0 +1,24 @@
+package com.hys.app.model.erp.dto;
+
+import com.hys.app.framework.database.BaseQueryParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * 产品查询参数
+ *
+ * @author 张崧
+ * 2023-11-30 16:06:44
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ProductGroupQueryParams extends BaseQueryParam {
+
+    @ApiModelProperty(name = "keyword", value = "订单选择的分组类型")
+    private String orderChooseType;
+
+}
+

+ 6 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/ProductQueryParams.java

@@ -6,6 +6,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.NotBlank;
+
 /**
  * 产品查询参数
  *
@@ -41,5 +43,9 @@ public class ProductQueryParams extends BaseQueryParam {
     @ApiModelProperty(name = "market_enable", value = "是否上架 true上架")
     private Boolean marketEnable;
 
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    @NotBlank(message = "出租商品  售卖商品")
+    private String hireOrSail;
+
 }
 

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseDTO.java

@@ -29,6 +29,10 @@ public class WarehouseDTO {
     @ApiModelProperty(name = "admin_id", value = "管理员id")
     private Long adminId;
 
+    @ApiModelProperty(name = "user_name", value = "负责人名称")
+    @NotBlank(message = "负责人名称")
+    private String userName;
+
     @ApiModelProperty(name = "ware_pro_city_area", value = "手机号")
     @NotBlank(message = "手机号")
     private String phone;

+ 3 - 0
module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderStatusEnum.java

@@ -15,6 +15,9 @@ public enum SaleOrderStatusEnum {
 
     TO_BE_COMMIT("TO_BE_COMMIT", "待确认"),
     TO_BE_SEND("TO_BE_SEND", "已确认"),
+    SENDING("SENDING", "已发货"),
+    ORDER_END("ORDER_END", "已完成"),
+    TO_BE_RETURN("TO_BE_RETURN", "待返回"),
     SALE_AFTER_ING("SALE_AFTER_ING", "售后中"),
     SALE_AFTER_END("SALE_AFTER_END", "售后完成"),
     SALE_AFTER_CANCEL("SALE_AFTER_CANCEL", "售后关闭");

+ 10 - 3
module-erp/src/main/java/com/hys/app/model/erp/vo/OrderSendItemVO.java

@@ -1,8 +1,7 @@
 package com.hys.app.model.erp.vo;
 
-import com.hys.app.model.erp.dos.OrderItemDO;
-import com.hys.app.model.erp.dos.OrderSendItemDO;
-import com.hys.app.model.erp.dos.ProductDO;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.hys.app.model.erp.dos.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -11,6 +10,7 @@ import lombok.ToString;
 
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * 订单明细详情
@@ -37,6 +37,13 @@ public class OrderSendItemVO extends OrderSendItemDO {
 
     private ProductDO productVO;
 
+    private WarehouseDO warehouseVO;
+
     private Integer useAbleStock;
+
+    private Integer actualStock;
+
+    @ApiModelProperty(name = "sn_code_list", value = "货物信息,最大数量50")
+    private List<GoodsSnDO> snCodeList;
 }
 

+ 2 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/ProductStockVO.java

@@ -39,5 +39,7 @@ public class ProductStockVO extends ProductStockDO {
 
     @ApiModelProperty(name = "scan_order_item_id", value = "商品信息")
     private Long scanOrderItemId;
+
+
 }
 

+ 28 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/TransitVO.java

@@ -0,0 +1,28 @@
+package com.hys.app.model.erp.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 商品库存详情
+ *
+ * @author 张崧
+ * @since 2023-12-07 10:08:44
+ */
+@Data
+public class TransitVO {
+
+    @ApiModelProperty("返回时间")
+    private Date endTime;
+
+    @ApiModelProperty("在途库存数量")
+    private  Integer transitStock;
+
+    @ApiModelProperty("订单编号")
+    private String orderSn;
+
+    
+}
+

+ 9 - 1
module-erp/src/main/java/com/hys/app/service/erp/OrderManager.java

@@ -15,6 +15,7 @@ import com.hys.app.model.erp.vo.OrderVO;
 import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.service.kuaidiniao.entity.AddressDTO;
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
+import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
 
 import java.util.List;
 
@@ -91,7 +92,7 @@ public interface OrderManager extends BaseService<OrderDO> {
      *
      * @param orderId
      */
-    void orderSend(Long orderId);
+    void orderSend(Long orderId,OrderSendDO orderSendDO);
 
     /**
      * 获取发货单详情
@@ -105,5 +106,12 @@ public interface OrderManager extends BaseService<OrderDO> {
 
     void extension(Long orderId, OrderDTO orderDTO);
 
+    /**
+     * 首页查询待发货的订单
+     *
+     * @param queryParam
+     * @return
+     */
+    resReturnBackBase toBeSendOrder(BaseQueryParam queryParam);
 }
 

+ 38 - 1
module-erp/src/main/java/com/hys/app/service/erp/ProductManager.java

@@ -8,8 +8,11 @@ import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.dos.ProductGroupDO;
 import com.hys.app.model.erp.dto.GoodsQueryParams;
 import com.hys.app.model.erp.dto.ProductDTO;
+import com.hys.app.model.erp.dto.ProductGroupQueryParams;
 import com.hys.app.model.erp.dto.ProductQueryParams;
+import com.hys.app.model.erp.vo.ProductStockVO;
 import com.hys.app.model.erp.vo.ProductVO;
+import com.hys.app.model.erp.vo.TransitVO;
 
 import java.util.List;
 
@@ -88,16 +91,50 @@ public interface ProductManager extends BaseService<ProductDO> {
 
     /**
      * 获取产品分组列表
+     *
      * @param queryParams
      * @return
      */
-    Page<ProductGroupDO> getGroupPage(ProductQueryParams queryParams);
+    Page<ProductGroupDO> getGroupPage(ProductGroupQueryParams queryParams);
 
     /**
      * 获取产品分组详情
+     *
      * @param id
      * @return
      */
     ProductGroupDO getGroupById(Long id);
+
+    /**
+     * 根据分区获取分组所有的sku信息
+     *
+     * @param groupId
+     * @return
+     */
+    List<ProductStockVO> getProductByGroup(Long groupId, List<Long> warehouseId);
+
+    /**
+     * 设置库存预警
+     *
+     * @param stockId
+     * @param warnNum
+     * @return
+     */
+    void updateWarnStock(Long stockId, Integer warnNum);
+
+    /**
+     * 首页获取库存预警列表
+     *
+     * @param warehouseId
+     */
+    List<ProductStockVO> getWarnStock(Long warehouseId);
+
+    /**
+     * 获取在途明细 去发货列表里面找
+     * @param stockId
+     * @return
+     */
+    List<TransitVO> transitDetail(Long stockId);
+
 }
 

+ 13 - 6
module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java

@@ -68,12 +68,15 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
         GoodsDO goodsDO = BeanUtil.copyProperties(goodsDTO, GoodsDO.class);
         List<ProductDO> bean = BeanUtils.toBean(goodsDTO.getProductList(), ProductDO.class);
         super.save(goodsDO);
-        bean.forEach(item -> item.setGoodsId(goodsDO.getId()));
+        bean.forEach(item ->{
+            item.setGoodsId(goodsDO.getId());
+            item.setHireOrSail(goodsDO.getHireOrSail());
+        });
         productManager.saveBatch(bean);
         // 保存相册
         this.goodsGalleryManager.add(goodsDTO.getImageList(), goodsDO.getId());
         //保存图标
-        this.goodsGalleryManager.add(goodsDTO.getImageSmall(), goodsDO.getId()+99);
+        this.goodsGalleryManager.add(goodsDTO.getImageSmallList(), goodsDO.getId()+99);
 
         //初始化库存
         productStockManager.intStock(bean);
@@ -90,18 +93,22 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(GoodsDTO goodsDTO) {
+        GoodsDO goodsDO = getById(goodsDTO.getId());
         checkParams(goodsDTO);
         // 更新商品
-        GoodsDO aDo = BeanUtil.copyProperties(goodsDTO, GoodsDO.class);
+        BeanUtil.copyProperties(goodsDTO, goodsDO);
         //先删除sku在新增
         productManager.remove(new LambdaQueryWrapper<ProductDO>().eq(ProductDO::getGoodsId, goodsDTO.getId()));
         List<ProductDO> bean = BeanUtils.toBean(goodsDTO.getProductList(), ProductDO.class);
-        updateById(aDo);
-        bean.forEach(item -> item.setGoodsId(goodsDTO.getId()));
+        updateById(goodsDO);
+        bean.forEach(item ->{
+            item.setGoodsId(goodsDO.getId());
+            item.setHireOrSail(goodsDO.getHireOrSail());
+        });
         productManager.saveBatch(bean);
         goodsGalleryManager.edit(goodsDTO.getImageList(), goodsDTO.getId());
         //保存图标
-        this.goodsGalleryManager.edit(goodsDTO.getImageSmall(), goodsDTO.getId()+99);
+        this.goodsGalleryManager.edit(goodsDTO.getImageSmallList(), goodsDTO.getId()+99);
 
         // 发送商品消息
 //        GoodsChangeMessage message = new GoodsChangeMessage(GoodsChangeMessage.GoodsChangeType.Edit, goodsDTO.getId());

+ 175 - 69
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -1,13 +1,14 @@
 package com.hys.app.service.erp.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.converter.erp.OrderConverter;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
 import com.hys.app.framework.exception.ServiceException;
@@ -21,18 +22,22 @@ import com.hys.app.model.erp.dto.OrderItemDTO;
 import com.hys.app.model.erp.dto.OrderQueryParams;
 import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
 import com.hys.app.model.erp.enums.*;
-import com.hys.app.model.erp.vo.*;
+import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.OrderSendItemVO;
+import com.hys.app.model.erp.vo.OrderVO;
+import com.hys.app.model.erp.vo.ProductVO;
+import com.hys.app.model.goods.dos.GoodsGalleryDO;
 import com.hys.app.service.erp.*;
-import com.hys.app.service.kuaidiniao.KuaiDiNiaoService;
-import com.hys.app.service.kuaidiniao.entity.AddressDTO;
-import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
+import com.hys.app.service.goods.GoodsGalleryManager;
+import com.hys.app.service.kuaidiniao.GaoDeUtil;
+import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -56,6 +61,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     private ProductManager productManager;
     private OrderSendManager orderSendManager;
     private OrderSendItemManager orderSendItemManager;
+    private GoodsGalleryManager goodsGalleryManager;
+    private WarehouseManager warehouseManager;
+    private ItemSnCodeManager itemSnCodeManager;
+    private GoodsSnManager goodsSnManager;
 
     @Override
     public WebPage<OrderVO> list(OrderQueryParams queryParams) {
@@ -71,6 +80,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
                 throw new ServiceException("租用时间不能为空");
             }
         }
+        GaoDeUtil.getLongitudeLatitude(orderDTO.getProvinceCityAreaAddress());
         OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
         orderDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.Order, orderDO.getDeptId()));
         // 保存订单
@@ -84,21 +94,6 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         return orderDO.getId();
     }
 
-    private void checkStock(OrderDO orderDO, List<OrderItemDO> itemList) {
-
-        for (OrderItemDO aDo : itemList) {
-            ProductStockDO byId = productStockManager.getById(aDo.getProductStockId());
-            if (!orderDO.getSubtractStock()) {
-                if (aDo.getNum() > byId.getUsableStock()) {
-                    throw new ServiceException(aDo.getProductId() + "的可用库存数量不足");
-                }
-            }
-            byId.setUsableStock(byId.getUsableStock() - aDo.getNum());
-            productStockManager.updateById(byId);
-        }
-    }
-
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(OrderDTO orderDTO) {
@@ -107,6 +102,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
                 throw new ServiceException("租用时间不能为空");
             }
         }
+        GaoDeUtil.getLongitudeLatitude(orderDTO.getProvinceCityAreaAddress());
         OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
         // 更新订单
         updateById(orderDO);
@@ -132,8 +128,12 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
             ProductVO productVO = BeanUtil.copyProperties(productDOList.stream().filter(item -> item.getId().equals(dto.getProductId())).findFirst().get(), ProductVO.class);
             dto.setProductVO(productVO);
             GoodsVO goodsVO = BeanUtil.copyProperties(goodsMapper.selectById(productVO.getGoodsId()), GoodsVO.class);
+            // 商品图标
+            List<GoodsGalleryDO> gallerySmallList = goodsGalleryManager.list(id + 99);
+            goodsVO.setImageSmallList(gallerySmallList);
             dto.setGoodsVO(goodsVO);
             dto.setUsableStock(productStockManager.getById(dto.getProductStockId()).getUsableStock());
+
         }
         orderVO.setItemList(itemList);
         return orderVO;
@@ -168,29 +168,67 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
             throw new ServiceException("该订单已确认");
         }
         List<OrderItemDO> dos = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
-        //校验库存
-        checkStock(aDo, dos);
+
         Set<Long> set = dos.stream().map(OrderItemDO::getWarehouseId).collect(Collectors.toSet());
         for (Long warehouseId : set) {
-            OrderSendDO orderSendDO = new OrderSendDO();
-            orderSendDO.setOrderId(id);
-            orderSendDO.setWarehouseId(warehouseId);
-            orderSendDO.setOrderType(aDo.getType());
-            orderSendDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.OrderSend, 86L));
-            orderSendManager.save(orderSendDO);
+            //如果允许负库存 把所有不够库存的做成一个发货单打上标记,剩下的做成一个发货单
             List<OrderItemDO> collect = dos.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
-            List<OrderSendItemDO> itemList = BeanUtils.toBean(collect, OrderSendItemDO.class);
-            itemList.forEach(item ->{
-                item.setOrderId(id);
-                item.setSendOrderId(orderSendDO.getId());
-            } );
-            orderSendItemManager.saveBatch(itemList);
+            List<Long> stockIds = collect.stream().map(OrderItemDO::getProductStockId).collect(Collectors.toList());
+            List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, stockIds));
+            List<OrderItemDO> arrayList = new ArrayList<>();
+            if (aDo.getSubtractStock()) {
+                for (OrderItemDO itemDO : collect) {
+                    ProductStockDO stockDO = list.stream().filter(item -> item.getId().equals(itemDO.getProductStockId())).findFirst().get();
+                    if (itemDO.getNum() - stockDO.getUsableStock() > 0) {
+                        OrderItemDO orderItemDO = new OrderItemDO();
+                        BeanUtil.copyProperties(itemDO, orderItemDO);
+                        orderItemDO.setNum(itemDO.getNum() - stockDO.getUsableStock());
+                        arrayList.add(orderItemDO);
+                        itemDO.setNum(stockDO.getUsableStock());
+                    }
+                }
+            }
+            savaSendOrder(aDo, warehouseId, dos, false);
+            if (CollUtil.isNotEmpty(arrayList)) {
+                savaSendOrder(aDo, warehouseId, arrayList, true);
+            }
+        }
+        //校验库存
+        List<OrderItemDO> dos2 = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
+        for (OrderItemDO orderItemDO : dos2) {
+            ProductStockDO byId = productStockManager.getById(orderItemDO.getProductStockId());
+            if (!aDo.getSubtractStock()) {
+                if (orderItemDO.getNum() > byId.getUsableStock()) {
+                    throw new ServiceException(orderItemDO.getProductId() + "的可用库存数量不足");
+                }
+            }
+            byId.setUsableStock(byId.getUsableStock() - orderItemDO.getNum());
+            productStockManager.updateById(byId);
         }
-
         aDo.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
         updateById(aDo);
     }
 
+    private void savaSendOrder(OrderDO aDo, Long warehouseId, List<OrderItemDO> dos, Boolean subtractStock) {
+        OrderSendDO orderSendDO = new OrderSendDO();
+        orderSendDO.setOrderId(aDo.getId());
+        orderSendDO.setSubtractStock(subtractStock);
+        orderSendDO.setWarehouseId(warehouseId);
+        orderSendDO.setOrderType(aDo.getType());
+        orderSendDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.OrderSend, 86L));
+        orderSendManager.save(orderSendDO);
+        List<OrderItemDO> collect = dos.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
+        List<OrderSendItemDO> itemList = BeanUtils.toBean(collect, OrderSendItemDO.class);
+        itemList.forEach(item -> {
+            item.setId(null);
+            item.setOrderId(aDo.getId());
+            item.setSendOrderId(orderSendDO.getId());
+            item.setOrderType(orderSendDO.getOrderType());
+            //如果是租赁订单把租赁表计和租赁返回时间塞入到发货列表详细里面,出库的时候统计在途库存会用到
+        });
+        orderSendItemManager.saveBatch(itemList);
+    }
+
     @Override
     public IPage<OrderSendDO> hasSendOrder(OrderQueryParams queryParams) {
         Page<OrderSendDO> page = new Page<>(queryParams.getPageNo(), queryParams.getPageSize());
@@ -213,68 +251,125 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void orderSend(Long sendOrderId) {
+    public void orderSend(Long sendOrderId, OrderSendDO orderSendDO) {
         OrderSendDO aDo = orderSendManager.getById(sendOrderId);
+        OrderDO orderDO = getById(aDo.getOrderId());
         //根据订单查找到这个订单的所有货物扣减库存
-        List<OrderItemDO> orderItemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderSendId, sendOrderId));
-//        List<Long> productId = orderItemDOS.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
-//        //查找这些商品在指定仓库的库存,减去对应数量
-//        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
-//                .eq(ProductStockDO::getWarehouseId, aDo.getWarehouseId()).in(ProductStockDO::getProductId, productId));
-//        for (ProductStockDO stockDO : stockDOList) {
-//            Integer num = orderItemDOS.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get().getNum();
-//
-//            if (num < stockDO.getUsableStock()) {
-//                if (OrderTypeEnum.TO_B.equals(aDo.getOrderType())) {
-//                    //扣减可用库存
-////                    stockDO.setUsableStock(stockDO.getUsableStock() - num);
-//                    //扣减实际库存
-//                    stockDO.setActualStock(stockDO.getActualStock() - num);
-//                } else if (OrderTypeEnum.TO_C.equals(aDo.getOrderType())) {
-//                    //扣减可用库存
-//                    stockDO.setActualStock(stockDO.getUsableStock() - num);
-//                    //增加在途库存
-//                    stockDO.setTransitStock(stockDO.getTransitStock() + num);
-//                }
-//            } else {
-//                throw new ServiceException(stockDO.getProductId() + "的库存不够");
-//            }
-//        }
-//        productStockManager.updateBatchById(stockDOList);
+        List<OrderSendItemVO> list = orderSendDO.getOrderItemVOS();
+        List<OrderSendItemDO> selectList = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, sendOrderId));
+        for (OrderSendItemDO itemDO : selectList) {
+            Optional<OrderSendItemVO> first = list.stream().filter(item -> item.getId().equals(itemDO.getId())).findFirst();
+            if (!first.isPresent()) {
+                throw new ServiceException("发货商品不能修改");
+            }
+            if (first.get().getNum() != itemDO.getNum()) {
+                throw new ServiceException("发货数量不能修改");
+            }
+        }
+        List<Long> productId = selectList.stream().map(OrderSendItemDO::getProductId).collect(Collectors.toList());
+        //查找这些商品在指定仓库的库存,减去对应数量
+        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, aDo.getWarehouseId()).in(ProductStockDO::getProductId, productId));
+        for (ProductStockDO stockDO : stockDOList) {
+            Integer num = list.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get().getNum();
+            stockDO.setActualStock(stockDO.getActualStock() - num);
+            if (OrderTypeEnum.TO_C.equals(aDo.getOrderType())) {
+                //如果是出租商品增加在途库存
+                stockDO.setTransitStock(stockDO.getTransitStock() + num);
+            }
+        }
+        productStockManager.updateBatchById(stockDOList);
         //生成出库单
         WarehouseOutDO outDO = new WarehouseOutDO();
-        outDO.setType(WarehouseOutTypeEnum.SALE_OUT);
+        if (OrderTypeEnum.TO_C.equals(orderDO.getType())) {
+            outDO.setType(WarehouseOutTypeEnum.HAIL_OUT);
+        } else if (OrderTypeEnum.TO_B.equals(orderDO.getType())) {
+            outDO.setType(WarehouseOutTypeEnum.SALE_OUT);
+        }
         outDO.setOrderIdList(sendOrderId);
         outDO.setOrderId(aDo.getOrderId());
+        outDO.setHasSubmit("Y");
         outDO.setWarehouseId(aDo.getWarehouseId());
         outDO.setNotes("发货单生成的出货单");
         outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
         warehouseOutMapper.insert(outDO);
+        List<ItemSnCodeDO> itemSnCodeDOS = new ArrayList<>();
         //保存出库单明细
-        List<WarehouseOutItemDO> beanList = BeanUtils.toBean(orderItemDOS, WarehouseOutItemDO.class);
+        List<WarehouseOutItemDO> beanList = BeanUtils.toBean(list, WarehouseOutItemDO.class);
+        //保存发货单明细和序列号的关系
+        for (OrderSendItemVO sendItemVO : list) {
+            //判断发货数量是不是和明细数量一致,不一样不让保存
+            ProductDO byId = productManager.getById(sendItemVO.getProductId());
+            if (byId.getHaveSn()) {
+                if (CollUtil.isEmpty(sendItemVO.getSnCodeList())) {
+                    throw new ServiceException("有序列号的商品出库必须录入序列号");
+                }
+                if (sendItemVO.getSnCodeList().size() != sendItemVO.getNum()) {
+                    throw new ServiceException("录入的序列号数量和发货数量必须一样多");
+                }
+            }
+
+            if (CollUtil.isNotEmpty(sendItemVO.getSnCodeList())) {
+                for (GoodsSnDO snDO : sendItemVO.getSnCodeList()) {
+                    //出库明细和序列号的关系
+                    ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
+                    itemSnCodeDO.setItemId(sendItemVO.getId());
+                    itemSnCodeDO.setEntryOutHouseId(sendOrderId);
+                    itemSnCodeDO.setType("send");
+                    itemSnCodeDO.setSnCodeId(snDO.getId());
+                    itemSnCodeDOS.add(itemSnCodeDO);
+                }
+            }
+        }
+        //保存出库单明细和序列号的关系
         beanList.forEach(item -> {
             item.setWarehouseOutId(outDO.getId());
-            Integer num = orderItemDOS.stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getNum();
+            Integer num = list.stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getNum();
             item.setOutNum(num);
+            //发货明细和sncode做关联
+            if (CollUtil.isNotEmpty(item.getSnCodeList())) {
+                for (GoodsSnDO snDO : item.getSnCodeList()) {
+                    //出库明细和序列号的关系
+                    ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
+                    itemSnCodeDO.setItemId(item.getId());
+                    itemSnCodeDO.setEntryOutHouseId(outDO.getId());
+                    itemSnCodeDO.setType("out");
+                    itemSnCodeDO.setSnCodeId(snDO.getId());
+                    itemSnCodeDOS.add(itemSnCodeDO);
+                }
+            }
         });
         warehouseOutItemManager.saveBatch(beanList);
-        //更改订单状态56789=m+
 
+        //保存序列号和子表的关系
+        itemSnCodeManager.saveBatch(itemSnCodeDOS);
+        //更改发货单状态
         aDo.setStatus(SaleOrderSendStatusEnum.SENDING);
         aDo.setWarehouseOutId(outDO.getId());
         orderSendManager.updateById(aDo);
+        //更改订单状态
+        orderDO.setStatus(SaleOrderStatusEnum.SENDING);
+        updateById(orderDO);
     }
 
     @Override
     public OrderSendDO getSendOrderDetail(String id) {
         OrderSendDO byId = orderSendManager.getById(id);
         OrderDO aDo = getById(byId.getOrderId());
+        byId.setWarehouseVO(warehouseManager.getById(byId.getWarehouseId()));
         List<OrderSendItemDO> list = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, id));
         List<OrderSendItemVO> bean = BeanUtils.toBean(list, OrderSendItemVO.class);
         for (OrderSendItemVO itemDO : bean) {
             itemDO.setProductVO(productManager.getById(itemDO.getProductId()));
             itemDO.setGoodsVO(BeanUtil.copyProperties(goodsMapper.selectById(itemDO.getGoodsId()), GoodsVO.class));
-            itemDO.setUseAbleStock(productStockManager.getById(itemDO.getProductStockId()).getUsableStock());
+            ProductStockDO productStockDO = productStockManager.getById(itemDO.getProductStockId());
+            itemDO.setUseAbleStock(productStockDO.getUsableStock());
+            itemDO.setActualStock(productStockDO.getActualStock());
+            List<ItemSnCodeDO> list2 = itemSnCodeManager.list(new LambdaQueryWrapper<ItemSnCodeDO>().eq(ItemSnCodeDO::getItemId, itemDO.getId()));
+            if (CollUtil.isNotEmpty(list2)) {
+                List<Long> collected = list2.stream().map(ItemSnCodeDO::getSnCodeId).collect(Collectors.toList());
+                itemDO.setSnCodeList(goodsSnManager.list(new LambdaQueryWrapper<GoodsSnDO>().in(GoodsSnDO::getId, collected)));
+            }
         }
         byId.setOrderVo(aDo);
         byId.setOrderItemVOS(bean);
@@ -287,6 +382,10 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         if (ObjectUtil.isNull(orderDO)) {
             throw new ServiceException("请录入正确的订单号");
         }
+        if (!OrderTypeEnum.TO_C.equals(orderDO.getType())) {
+            throw new ServiceException("只有租赁订单才可做入库单");
+        }
+
         OrderVO orderVO = BeanUtil.copyProperties(orderDO, OrderVO.class);
         List<OrderItemDO> list = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDO.getId()));
         List<Long> goodIdlist = list.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
@@ -346,11 +445,11 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
             orderSendManager.save(orderSendDO);
             List<OrderItemDO> collect = sendNewList.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
             List<OrderSendItemDO> itemList = BeanUtils.toBean(collect, OrderSendItemDO.class);
-            itemList.forEach(item ->{
+            itemList.forEach(item -> {
                 item.setId(null);
                 item.setOrderId(orderId);
                 item.setSendOrderId(orderSendDO.getId());
-            } );
+            });
             orderSendItemManager.saveBatch(itemList);
         }
         List<OrderItemDO> itemList = BeanUtils.toBean(orderDTO.getItemList(), OrderItemDO.class);
@@ -358,5 +457,12 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderId));
         orderItemManager.saveBatch(itemList);
     }
+
+    @Override
+    public resReturnBackBase toBeSendOrder(BaseQueryParam queryParam) {
+
+
+        return null;
+    }
 }
 

+ 94 - 24
module-erp/src/main/java/com/hys/app/service/erp/impl/ProductManagerImpl.java

@@ -10,22 +10,23 @@ import com.hys.app.converter.erp.ProductConverter;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
 import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.BeanUtils;
+import com.hys.app.mapper.erp.ProductStockMapper;
 import com.hys.app.mapper.goods.GoodsMapper;
 import com.hys.app.mapper.goods.ProductMapper;
-import com.hys.app.model.erp.dos.GoodsDO;
-import com.hys.app.model.erp.dos.ProductDO;
-import com.hys.app.model.erp.dos.ProductGroupDO;
-import com.hys.app.model.erp.dos.ProductGroupItemDO;
-import com.hys.app.model.erp.dto.GoodsQueryParams;
-import com.hys.app.model.erp.dto.ProductDTO;
-import com.hys.app.model.erp.dto.ProductQueryParams;
-import com.hys.app.model.erp.dto.ProductSpec;
+import com.hys.app.model.erp.dos.*;
+import com.hys.app.model.erp.dto.*;
+import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductStockVO;
 import com.hys.app.model.erp.vo.ProductVO;
+import com.hys.app.model.erp.vo.TransitVO;
+import com.hys.app.model.goods.dos.GoodsGalleryDO;
 import com.hys.app.service.erp.ProductGroupItemManager;
 import com.hys.app.service.erp.ProductGroupManager;
 import com.hys.app.service.erp.ProductManager;
 import com.hys.app.service.erp.ProductStockManager;
 import com.hys.app.service.goods.CategoryManager;
+import com.hys.app.service.goods.GoodsGalleryManager;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -48,24 +49,21 @@ import static com.hys.app.framework.util.CollectionUtils.convertMap;
 public class ProductManagerImpl extends BaseServiceImpl<ProductMapper, ProductDO> implements ProductManager {
 
     private ProductConverter converter;
-    private CategoryManager categoryManager;
+    private GoodsGalleryManager goodsGalleryManager;
     private ProductStockManager productStockManager;
     private ProductGroupManager productGroupManager;
     private ProductGroupItemManager productGroupItemManager;
     private GoodsMapper goodsMapper;
+    private ProductStockMapper productStockMapper;
 
     @Override
     public WebPage<ProductVO> list(ProductQueryParams queryParams) {
         WebPage<ProductDO> webPage = baseMapper.selectPage(queryParams);
-
-        // 查询商品分类
-        Map<Long, String> categoryNameMap = categoryManager.mapNameByIds(convertList(webPage.getData(), ProductDO::getCategoryId));
-        // 查询库存信息
-        List<Long> warehouseIds = queryParams.getWarehouseId() == null ? null : Collections.singletonList(queryParams.getWarehouseId());
-        List<Long> productIds = convertList(webPage.getData(), ProductDO::getId);
-        Map<Long, Integer> stockNumMap = productStockManager.queryStockNum(warehouseIds, productIds);
-
-        return converter.combination(webPage, categoryNameMap, stockNumMap);
+        WebPage<ProductVO> convert = converter.convert(webPage);
+        for (ProductVO datum : convert.getData()) {
+            datum.setGoodsVo(BeanUtil.copyProperties(goodsMapper.selectById(datum.getGoodsId()), GoodsVO.class));
+        }
+        return convert;
     }
 
     @Override
@@ -128,10 +126,20 @@ public class ProductManagerImpl extends BaseServiceImpl<ProductMapper, ProductDO
     public void productGroup(ProductGroupDO productGroupDO) {
         ProductGroupDO one = productGroupManager.getOne(new LambdaQueryWrapper<ProductGroupDO>().eq(ProductGroupDO::getName, productGroupDO.getName()));
         if (ObjectUtil.isNotNull(one)) {
-            throw new ServiceException("分组名称不等你重复");
+            throw new ServiceException("分组名称不能重复");
+        }
+        List<String> collect = productGroupDO.getItemDoList().stream().map(ProductGroupItemDO::getHireOrSail).collect(Collectors.toList());
+        Set<String> set = new HashSet<>(collect);
+        if (set.size()>1){
+            throw new ServiceException("只能选择同一种商品类型");
+        }else {
+            if (!collect.get(0).equals(productGroupDO.getHireOrSail())){
+                throw new ServiceException("所选商品和分组类型不符合");
+            }
         }
         productGroupManager.save(productGroupDO);
-        productGroupItemManager.saveBatch(productGroupDO.getItemDOList());
+        productGroupDO.getItemDoList().forEach(item ->item.setGroupId(productGroupDO.getId()));
+        productGroupItemManager.saveBatch(productGroupDO.getItemDoList());
     }
 
     @Override
@@ -151,12 +159,23 @@ public class ProductManagerImpl extends BaseServiceImpl<ProductMapper, ProductDO
         BeanUtil.copyProperties(productGroupDO, byId);
         productGroupManager.updateById(byId);
         productGroupItemManager.remove(new LambdaQueryWrapper<ProductGroupItemDO>().eq(ProductGroupItemDO::getGroupId, id));
-        productGroupItemManager.saveBatch(productGroupDO.getItemDOList());
+        productGroupDO.getItemDoList().forEach(item ->item.setGroupId(id));
+        productGroupItemManager.saveBatch(productGroupDO.getItemDoList());
     }
 
     @Override
-    public Page<ProductGroupDO> getGroupPage(ProductQueryParams queryParams) {
-        return productGroupManager.page(new Page<>(queryParams.getPageSize(), queryParams.getPageNo()));
+    public Page<ProductGroupDO> getGroupPage(ProductGroupQueryParams queryParams) {
+        if (StrUtil.isNotBlank(queryParams.getOrderChooseType())){
+            if ("TO_C".equals(queryParams.getOrderChooseType())){
+                queryParams.setOrderChooseType("hire");
+            }
+            if ("TO_B".equals(queryParams.getOrderChooseType())){
+                queryParams.setOrderChooseType("sail");
+            }
+        }
+        Page<ProductGroupDO> page = productGroupManager.page(new Page<>(queryParams.getPageNo(), queryParams.getPageSize()),
+                new LambdaQueryWrapper<ProductGroupDO>().eq(StrUtil.isNotBlank(queryParams.getOrderChooseType()),ProductGroupDO::getHireOrSail,queryParams.getOrderChooseType()));
+        return page;
     }
 
     @Override
@@ -167,8 +186,59 @@ public class ProductManagerImpl extends BaseServiceImpl<ProductMapper, ProductDO
             aDo.setProductVO(getById(aDo.getProductId()));
             aDo.setGoodsVO((goodsMapper.selectById(aDo.getGoodsId())));
         }
-        byId.setItemDOList(list);
+        byId.setItemDoList(list);
         return byId;
     }
+
+    @Override
+    public List<ProductStockVO> getProductByGroup(Long groupId,List<Long> warehouseId) {
+        List<ProductGroupItemDO> list = productGroupItemManager.list(new LambdaQueryWrapper<ProductGroupItemDO>().eq(ProductGroupItemDO::getGroupId, groupId));
+        List<Long> collect = list.stream().map(ProductGroupItemDO::getProductId).collect(Collectors.toList());
+        if (CollUtil.isEmpty(collect)) {
+            throw new ServiceException("该分组没添加任何商品");
+        }
+        List<ProductStockDO> listed = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .in(ProductStockDO::getWarehouseId, warehouseId).in(ProductStockDO::getProductId, collect));
+        List<ProductStockVO> bean = BeanUtils.toBean(listed, ProductStockVO.class);
+        for (ProductStockVO vo : bean) {
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsMapper.selectById(vo.getGoodsId()), GoodsVO.class);
+            // 商品图标
+            List<GoodsGalleryDO> gallerySmallList = goodsGalleryManager.list(goodsVO.getId()+99);
+            goodsVO.setImageSmallList(gallerySmallList);
+            vo.setGoodsVO(goodsVO);
+            vo.setProductVO(BeanUtil.copyProperties(getById(vo.getProductId()), ProductVO.class));
+        }
+        return bean;
+    }
+
+    @Override
+    public void updateWarnStock(Long stockId, Integer warnNum) {
+        if (warnNum<0){
+            throw new ServiceException("预警库存不能小于0");
+        }
+        ProductStockDO byId = productStockManager.getById(stockId);
+        if (ObjectUtil.isNull(byId)){
+            throw new ServiceException("未找到库存信息");
+        }
+        byId.setWarningStock(warnNum);
+        productStockManager.updateById(byId);
+    }
+
+    @Override
+    public List<ProductStockVO> getWarnStock(Long warehouseId) {
+        LambdaQueryWrapper<ProductStockDO> queryWrapper = new LambdaQueryWrapper<ProductStockDO>().eq(ProductStockDO::getWarehouseId, warehouseId).last("and usable_stock <warning_stock limit 10 ");
+        List<ProductStockDO> list = productStockManager.list(queryWrapper);
+        List<ProductStockVO> bean = BeanUtils.toBean(list, ProductStockVO.class);
+        bean.forEach(item ->{
+            item.setProductVO(BeanUtil.copyProperties(getById(item.getProductId()),ProductVO.class));
+            item.setGoodsVO(BeanUtil.copyProperties(goodsMapper.selectById(item.getGoodsId()),GoodsVO.class));
+        });
+        return bean;
+    }
+
+    @Override
+    public List<TransitVO> transitDetail(Long stockId) {
+        return productStockMapper.transitDetail(stockId);
+    }
 }
 

+ 57 - 71
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryManagerImpl.java

@@ -85,6 +85,7 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
     private ItemSnCodeManager itemSnCodeManager;
     private WarehouseOutMapper warehouseOutMapper;
     private StockTransferMapper stockTransferMapper;
+    private OrderItemManager orderItemManager;
 
 
     @Override
@@ -113,17 +114,17 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         warehouseEntryProductManager.saveBatch(productList);
         //保存子表和序列号的关系
         warehouseEntryDTO.setId(warehouseEntryDO.getId());
-        saveSnCode(warehouseEntryDTO,productList);
+        saveSnCode(warehouseEntryDTO.getId(), productList);
 
         //如果是入库就要增加库存
         if ("submit".equals(warehouseEntryDTO.getSaveOrSubmit())) {
-            updateStock(warehouseEntryDTO, getById(warehouseEntryDO.getId()),productList);
+            updateStock(warehouseEntryDTO, getById(warehouseEntryDO.getId()), productList);
         }
         return warehouseEntryDO.getId();
     }
 
 
-    private void saveSnCode(WarehouseEntryDTO warehouseEntryDO,  List<WarehouseEntryProductDO> productList){
+    private void saveSnCode(Long entryHouseId, List<WarehouseEntryProductDO> productList) {
         List<ItemSnCodeDO> itemSnCodeDOS = new ArrayList<>();
         //如果有序列号,保存序列号和入库单的关系,更爱序列号的状态
         for (WarehouseEntryProductDO aDo : productList) {
@@ -132,7 +133,7 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
                     item.setItemId(aDo.getId());
                     ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
                     itemSnCodeDO.setItemId(aDo.getId());
-                    itemSnCodeDO.setEntryOutHouseId(warehouseEntryDO.getId());
+                    itemSnCodeDO.setEntryOutHouseId(entryHouseId);
                     itemSnCodeDO.setType("in");
                     itemSnCodeDO.setSnCodeId(item.getId());
                     itemSnCodeDOS.add(itemSnCodeDO);
@@ -161,14 +162,14 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         warehouseEntryProductManager.saveBatch(productList);
         //保存子表和序列号的关系
         warehouseEntryDTO.setId(warehouseEntryDO.getId());
-        saveSnCode(warehouseEntryDTO,productList);
+        saveSnCode(warehouseEntryDTO.getId(), productList);
 
         if ("submit".equals(warehouseEntryDTO.getSaveOrSubmit())) {
-            updateStock(warehouseEntryDTO, getById(warehouseEntryDO.getId()),productList);
+            updateStock(warehouseEntryDTO, getById(warehouseEntryDO.getId()), productList);
         }
     }
 
-    private void updateStock(WarehouseEntryDTO warehouseEntryDTO, WarehouseEntryDO warehouseEntryDO,ArrayList<WarehouseEntryProductDO> productList) {
+    private void updateStock(WarehouseEntryDTO warehouseEntryDTO, WarehouseEntryDO warehouseEntryDO, ArrayList<WarehouseEntryProductDO> productList) {
         if ("Y".equals(warehouseEntryDO.getHasSubmit())) {
             throw new ServiceException("数据已入库,请勿重复操作");
         }
@@ -184,9 +185,9 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
             }
         }
         //如果是调拨单得先出库才能入库,入库完之后改变调拨单得状态
-        if (WarehouseEntyrTypeEnum.TRANSFER_ENTRY.equals(warehouseEntryDO.getType()) ){
-            WarehouseOutDO outDO = warehouseOutMapper.selectOne(new LambdaQueryWrapper<WarehouseOutDO>().eq(WarehouseOutDO::getOrderIdList,warehouseEntryDO.getOrderId()).last("limit 1"));
-            if ("N".equals(outDO.getHasSubmit())){
+        if (WarehouseEntyrTypeEnum.TRANSFER_ENTRY.equals(warehouseEntryDO.getType())) {
+            WarehouseOutDO outDO = warehouseOutMapper.selectOne(new LambdaQueryWrapper<WarehouseOutDO>().eq(WarehouseOutDO::getOrderIdList, warehouseEntryDO.getOrderId()).last("limit 1"));
+            if ("N".equals(outDO.getHasSubmit())) {
                 throw new ServiceException("商品还未调拨出库");
             }
             StockTransferDO aDo = stockTransferMapper.selectById(warehouseEntryDO.getOrderId());
@@ -211,10 +212,10 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         warehouseEntryDO.setHasSubmit("Y");
         updateById(warehouseEntryDO);
 
-        List<ItemSnCodeDO> list1 = itemSnCodeManager.list(new LambdaQueryWrapper<ItemSnCodeDO>().eq(ItemSnCodeDO::getEntryOutHouseId,warehouseEntryDO.getId()));
-        if (CollUtil.isNotEmpty(list1)){
+        List<ItemSnCodeDO> list1 = itemSnCodeManager.list(new LambdaQueryWrapper<ItemSnCodeDO>().eq(ItemSnCodeDO::getEntryOutHouseId, warehouseEntryDO.getId()));
+        if (CollUtil.isNotEmpty(list1)) {
             List<Long> collect1 = list1.stream().map(ItemSnCodeDO::getSnCodeId).collect(Collectors.toList());
-            List<GoodsSnDO> list = goodsSnManager.list(new LambdaQueryWrapper<GoodsSnDO>().in(GoodsSnDO::getId,collect1));
+            List<GoodsSnDO> list = goodsSnManager.list(new LambdaQueryWrapper<GoodsSnDO>().in(GoodsSnDO::getId, collect1));
 
             //更爱序列号状态
             for (GoodsSnDO aDo : list) {
@@ -223,6 +224,34 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
             }
             goodsSnManager.updateBatchById(list);
         }
+        //如果是租赁订单
+        if (WarehouseEntyrTypeEnum.HAIL_ENTRY.equals(warehouseEntryDTO.getType())) {
+            OrderDO aDo = orderManager.getById(warehouseEntryDTO.getOrderId());
+            List<OrderItemDO> list = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, aDo.getId()));
+
+            List<WarehouseEntryDO> entryDOS = list(new LambdaQueryWrapper<WarehouseEntryDO>()
+                    .eq(WarehouseEntryDO::getHasSubmit, "Y")
+                    .eq(WarehouseEntryDO::getOrderId, aDo.getId())
+                    .eq(WarehouseEntryDO::getType, WarehouseEntyrTypeEnum.HAIL_ENTRY));
+            List<Long> collected = entryDOS.stream().map(WarehouseEntryDO::getId).collect(Collectors.toList());
+            //todo 后面报失 租转买的商品须累加
+            List<WarehouseEntryProductDO> doList = warehouseEntryProductManager.list(new LambdaQueryWrapper<WarehouseEntryProductDO>()
+                    .in(WarehouseEntryProductDO::getWarehouseEntryId, collected));
+            List<OrderItemDO> objects = new ArrayList<>();
+            for (OrderItemDO itemDO : list) {
+                Optional<WarehouseEntryProductDO> first = doList.stream().filter(item -> item.getScanOrderItemId().equals(itemDO.getId())).findFirst();
+                if (first.isPresent()) {
+                    if (first.get().getNum() == itemDO.getNum()) {
+                        objects.add(itemDO);
+                    }
+                }
+            }
+            //如果入库单的所有详细累加起来等于订单的详细 则该订单改为已完成
+            if (list.size() == objects.size()) {
+                aDo.setStatus(SaleOrderStatusEnum.ORDER_END);
+                orderManager.updateById(aDo);
+            }
+        }
     }
 
     @Override
@@ -460,6 +489,21 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
             if (!OrderTypeEnum.TO_C.equals(aDo.getType())) {
                 throw new ServiceException("该订单不是租赁订单");
             }
+            List<OrderItemDO> list = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, warehouseEntryDTO.getOrderId()));
+            List<OrderItemDO> objects = new ArrayList<>();
+            warehouseEntryDTO.getProductList().forEach(item -> {
+                if (ObjectUtil.isNull(item.getScanOrderItemId())) {
+                    throw new ServiceException("租赁订单返回的商品必须在租赁订单里面");
+                }
+                Optional<OrderItemDO> first = list.stream().filter(it -> it.getId().equals(item.getScanOrderItemId())).findFirst();
+                if (!first.isPresent()) {
+                    throw new ServiceException("租赁订单返回的商品必须在租赁订单里面");
+                }
+                objects.add(first.get());
+            });
+            //更改订单详情的是否返回 统计在途库存会用到
+            objects.forEach(item ->item.setHasReturn(true));
+            orderItemManager.updateBatchById(objects);
         }
         WarehouseDO warehouseDO = warehouseManager.getById(warehouseEntryDTO.getWarehouseId());
         if (warehouseDO == null) {
@@ -476,64 +520,6 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
                 }
             }
         }
-
-
-//
-//        SupplierDO supplierDO = supplierManager.getById(warehouseEntryDTO.getSupplierId());
-//        if (supplierDO == null) {
-//            throw new ServiceException("供应商不存在");
-//        }
-//
-//        AdminUser handledBy = adminUserManager.getModel(warehouseEntryDTO.getHandledById());
-//        if (handledBy == null) {
-//            throw new ServiceException("经手人不存在");
-//        }
-//
-//        Map<Long, WarehouseEntryProductDTO> warehouseEntryProductDTOMap = convertMap(warehouseEntryDTO.getProductList(), WarehouseEntryProductDTO::getProductId, Function.identity());
-//
-//        if (warehouseEntryDTO.getContractId()!=null){
-//            ProcurementContract contract = contractManager.getById(warehouseEntryDTO.getContractId());
-//            if (contract == null) {
-//                throw new ServiceException("合同不存在");
-//            }
-//            if (!ContractStatusEnum.EXECUTING.name().equals(contract.getContractStatus())) {
-//                throw new ServiceException("只能选择执行中的合同");
-//            }
-//            // 查询合同商品明细
-//            List<ProcurementContractProduct> contractProductList = contractProductManager.list(warehouseEntryDTO.getContractId());
-//            Map<Long, ProcurementContractProduct> contractProductMap = convertMap(contractProductList, ProcurementContractProduct::getProductId, Function.identity());
-//            List<Long> noContractProductIds = Lists.newArrayList();
-//            // 校验入库的商品
-//            for (WarehouseEntryProductDTO warehouseEntryProductDTO : warehouseEntryDTO.getProductList()) {
-//                ProcurementContractProduct contractProduct = contractProductMap.get(warehouseEntryProductDTO.getProductId());
-//                if (contractProduct != null) {
-//                    // 本次最大可入库数量 = 合同数量 - 已入库数量
-//                    int maxEntryNum = contractProduct.getNum() - contractProduct.getStockNum();
-//
-//                    if (warehouseEntryProductDTO.getNum() > maxEntryNum) {
-//                        throw new ServiceException("商品:" + contractProduct.getProductName() + "的入库数量不能超过最大可入库数量:" + maxEntryNum);
-//                    }
-//                }else{
-//                    noContractProductIds.add(warehouseEntryProductDTO.getProductId());
-//                }
-//            }
-//
-//            if (CollectionUtil.isNotEmpty(noContractProductIds)){
-//                contractProductMap = convertNoContractProduct(contractProductMap,noContractProductIds,warehouseEntryProductDTOMap);
-//            }
-//
-//            warehouseEntryDTO.setContract(contract);
-//            warehouseEntryDTO.setContractProductMap(contractProductMap);
-//        }else{
-//            List<Long> noContractProductIds = warehouseEntryDTO.getProductList().stream().map(WarehouseEntryProductDTO::getProductId).collect(Collectors.toList());
-//            Map<Long, ProcurementContractProduct> contractProductMap = convertNoContractProduct(new HashMap(),noContractProductIds,warehouseEntryProductDTOMap);
-//            warehouseEntryDTO.setContractProductMap(contractProductMap);
-//        }
-
-//        warehouseEntryDTO.setDeptDO(deptDO);
-//        warehouseEntryDTO.setSupplierDO(supplierDO);
-//        warehouseEntryDTO.setWarehouseDO(warehouseDO);
-//        warehouseEntryDTO.setHandledBy(handledBy);
     }
 
     /**

+ 11 - 19
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java

@@ -108,7 +108,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         warehouseOutItemManager.saveBatch(productList);
         //保存序列号和子表的关系
         warehouseOutDTO.setId(warehouseOutDO.getId());
-        saveSnCode(warehouseOutDTO, productList);
+        saveSnCode(warehouseOutDTO.getId(), productList);
         //如果是出库就要扣减库存
         if ("submit".equals(warehouseOutDTO.getSaveOrSubmit())) {
             updateStock(warehouseOutDTO, getById(warehouseOutDO.getId()), productList);
@@ -129,7 +129,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         warehouseOutItemManager.deleteByWarehouseOutId(Collections.singletonList(warehouseOutDTO.getId()));
         warehouseOutItemManager.saveBatch(productList);
         //保存序列号和子表的关系
-        saveSnCode(warehouseOutDTO, productList);
+        saveSnCode(warehouseOutDO.getId(), productList);
         //如果是出库就要扣减库存
         if ("submit".equals(warehouseOutDTO.getSaveOrSubmit())) {
             updateStock(warehouseOutDTO, getById(warehouseOutDO.getId()), productList);
@@ -159,23 +159,18 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
             aDo.setStatus(DamageinventoryEnum.HAS_HANDLE);
             stockDamageReportManager.updateById(aDo);
         }
+
         List<Long> collect = warehouseOutDTO.getProductList().stream().map(WarehouseOutProductDTO::getProductId).collect(Collectors.toList());
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, warehouseOutDTO.getWarehouseId()).in(ProductStockDO::getProductId, collect));
         for (ProductStockDO aDo : stockDOList) {
             WarehouseOutProductDTO productDO = warehouseOutDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findFirst().get();
-
-            if (WarehouseOutTypeEnum.SALE_OUT.equals(warehouseOutDTO.getType())) {
-                //销售出库只用扣减实际库存,做订单的时候已经扣减了可用库存
-                aDo.setActualStock(aDo.getActualStock() - productDO.getOutNum());
-            } else {
-                if (productDO.getOutNum() > aDo.getUsableStock()) {
-                    throw new ServiceException(productDO.getProductId() + "的可用库存不够,请核对数据");
-                }
-                //循环判断每一条数据可用库存够不够扣减
-                aDo.setUsableStock(aDo.getUsableStock() - productDO.getOutNum());
-                aDo.setActualStock(aDo.getActualStock() - productDO.getOutNum());
+            if (productDO.getOutNum() > aDo.getUsableStock()) {
+                throw new ServiceException(productDO.getProductId() + "的可用库存不够,请核对数据");
             }
+            //循环判断每一条数据可用库存够不够扣减
+            aDo.setUsableStock(aDo.getUsableStock() - productDO.getOutNum());
+            aDo.setActualStock(aDo.getActualStock() - productDO.getOutNum());
         }
         productStockManager.updateBatchById(stockDOList);
         //入库之后数据不能被操作
@@ -195,18 +190,15 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         }
     }
 
-    private void saveSnCode(WarehouseOutDTO warehouseOutDTO, List<WarehouseOutItemDO> productList) {
+    private void saveSnCode(Long warehouseOutId, List<WarehouseOutItemDO> productList) {
         List<ItemSnCodeDO> itemSnCodeDOS = new ArrayList<>();
         //如果有序列号,保存序列号和入库单的关系,更爱序列号的状态
         for (WarehouseOutItemDO aDo : productList) {
-
-
             if (CollUtil.isNotEmpty(aDo.getSnCodeList())) {
                 aDo.getSnCodeList().forEach(item -> {
-                    item.setItemId(aDo.getId());
                     ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
                     itemSnCodeDO.setItemId(aDo.getId());
-                    itemSnCodeDO.setEntryOutHouseId(warehouseOutDTO.getId());
+                    itemSnCodeDO.setEntryOutHouseId(warehouseOutId);
                     itemSnCodeDO.setType("out");
                     itemSnCodeDO.setSnCodeId(item.getId());
                     itemSnCodeDOS.add(itemSnCodeDO);
@@ -429,7 +421,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         Page<ProductStockVO> convert = productStockConverter.convert(page1);
         for (ProductStockVO record : convert.getRecords()) {
             GoodsVO goodsVO = BeanUtil.copyProperties(goodsMapper.selectById(record.getGoodsId()), GoodsVO.class);
-            List<GoodsGalleryDO> gallerySmallList = goodsGalleryManager.list(goodsVO.getId()+99);
+            List<GoodsGalleryDO> gallerySmallList = goodsGalleryManager.list(goodsVO.getId() + 99);
             goodsVO.setImageSmallList(gallerySmallList);
             record.setGoodsVO(goodsVO);
             record.setProductVO(BeanUtil.copyProperties(productManager.getById(record.getProductId()), ProductVO.class));

+ 7 - 4
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java

@@ -1,9 +1,6 @@
 package com.hys.app.service.kuaidiniao;
 
-import com.hys.app.service.kuaidiniao.entity.AddressDTO;
-import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
-import com.hys.app.service.kuaidiniao.entity.ReturnBackBase;
-import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
+import com.hys.app.service.kuaidiniao.entity.*;
 
 public interface KuaiDiNiaoService {
 
@@ -23,4 +20,10 @@ public interface KuaiDiNiaoService {
      * @param preOrderModel
      */
     String kdShip(PreOrderModel preOrderModel, Long orderId, AddressDTO addressDTO);
+
+    /**
+     * 快递鸟创建门店
+     * @param createStoreModel
+     */
+    void createStore(CreateStoreModel createStoreModel);
 }

+ 57 - 29
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -3,33 +3,29 @@ package com.hys.app.service.kuaidiniao;
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.core.util.URLUtil;
-import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.converter.erp.OrderConverter;
 import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.exception.ServiceException;
-import com.hys.app.framework.security.model.Admin;
-import com.hys.app.framework.util.DateUtil;
 import com.hys.app.framework.util.ScriptUtil;
 import com.hys.app.model.erp.dos.OrderDO;
 import com.hys.app.model.erp.dos.OrderSendDO;
+import com.hys.app.model.erp.enums.OrderTypeEnum;
 import com.hys.app.model.erp.enums.SaleOrderSendStatusEnum;
 import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
 import com.hys.app.service.erp.OrderManager;
 import com.hys.app.service.erp.OrderSendManager;
 import com.hys.app.service.kuaidiniao.entity.*;
-import lombok.AllArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Map;
 
@@ -56,6 +52,9 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     @Autowired
     private OrderSendManager orderSendManager;
 
+    @Autowired
+    private OrderManager orderManager;
+
     @Autowired
     private OrderConverter converter;
 
@@ -63,13 +62,13 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
 
 
     @Override
-    public String kdShip(PreOrderModel preOrderModel, Long orderId,AddressDTO addressDTO) {
+    public String kdShip(PreOrderModel preOrderModel, Long orderId, AddressDTO addressDTO) {
         fillParam(preOrderModel);
-        String kdnCode = sendUrl(JSONUtil.toJsonStr(preOrderModel), KdConstants.preOrder);
+        String kdnCode = sendUrl(JSONUtil.toJsonStr(preOrderModel));
         if (StrUtil.isNotEmpty(kdnCode)) {
             //如果快递鸟下单成功保存 快递信息
             OrderSendDO aDo = orderSendManager.getById(orderId);
-            log.info("快递鸟下单成功 我们的订单号:---------------------"+orderId);
+            log.info("快递鸟下单成功 我们的订单号:---------------------" + orderId);
             converter.copyProperties(aDo, preOrderModel, preOrderModel.getReceiver(), preOrderModel.getSender());
             aDo.setGoodsList(preOrderModel.getGoodsList());
             aDo.setKdnOrderCode(kdnCode);
@@ -80,18 +79,36 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         return kdnCode;
     }
 
+    @Override
+    public void createStore(CreateStoreModel createStoreModel) {
+        try {
+            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(createStoreModel) + apiKey)), "UTF-8");
+            System.out.println("创建店铺签名--------------------------------------" + design);
+            //拼接参数
+            String param = "interfaceType=" + KdConstants.createStore + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(createStoreModel) + "&dataSign=" + design;
+            //发请求
+            String res = HttpUtil.post(url, param);
+            Map map = JSON.parseObject(res, Map.class);
+            if (ObjectUtil.isNotNull(map.get("resultCode")) && !(100 == Integer.valueOf(map.get("resultCode").toString()))){
+                throw new ServiceException("店铺创建失败" + map.get("reason").toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ServiceException("店铺创建异常");
+        }
+    }
+
 
     /**
-     * @param dataJson      业务参数
-     * @param interfaceType 请求接口指令
+     * @param dataJson 业务参数
      * @return 返回JSON
      */
-    private String sendUrl(String dataJson, String interfaceType) {
+    private String sendUrl(String dataJson) {
         try {
             String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(dataJson + apiKey)), "UTF-8");
-            System.out.println("--------------------------------------"+design);
+            System.out.println("--------------------------------------" + design);
             //拼接参数
-            String param = "interfaceType=" + interfaceType + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
+            String param = "interfaceType=" + KdConstants.preOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
             //发请求
             String res = HttpUtil.post(url, param);
             Map map = JSON.parseObject(res, Map.class);
@@ -105,7 +122,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 //resultCode == 100表示下单成功,预下单成功后立马调用下单接口
                 if (ObjectUtil.isNotNull(mapCreate.get("resultCode")) && 100 == Integer.valueOf(mapCreate.get("resultCode").toString())) {
                     Map mapData = JSON.parseObject(mapCreate.get("data").toString(), Map.class);
-                    log.info("快递鸟下单成功 单号:--------------------------------"+mapData.get("kdnOrderCode").toString());
+                    log.info("快递鸟下单成功 单号:--------------------------------" + mapData.get("kdnOrderCode").toString());
                     return mapData.get("kdnOrderCode").toString();
                 }
             } else {
@@ -153,47 +170,59 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         base.setKdnOrderCode(map.get("kdnOrderCode").toString());
         //验签
         OrderSendDO aDo = orderSendManager.getById(Long.valueOf(map.get("orderCode").toString()));
+        OrderDO orderDO = orderManager.getById(aDo.getOrderId());
         //        if (!checkDesign(aDo, returnBackBase.getDataSign())) {
 //            base.setRequestData("验签失败");
 //            base.setResultCode(1002);
 //            return base;
 //        }
-        if (ObjectUtil.isNull(aDo)){
+        if (ObjectUtil.isNull(aDo)) {
             base.setReason("未找到对应的订单");
-            log.error("未找到对应的订单-------------------------------"+map.get("orderCode").toString());
+            log.error("未找到对应的订单-------------------------------" + map.get("orderCode").toString());
             base.setResultCode(1002);
             return base;
         }
 
-
-        switch (Integer.valueOf(map.get("orderStatus").toString())) {
-            case 100:
+        switch (map.get("orderStatus").toString()) {
+            case KdConstants.callBackPreAccept:
                 aDo.setCreateOrderSuccess(map);
                 break;
-            case 201:
+            case KdConstants.callBackAccept:
                 aDo.setUserTakeOrder(map);
                 break;
-            case 202:
+            case KdConstants.callBackAttain:
                 aDo.setUserArrives(map);
                 break;
-            case 300:
+            case KdConstants.callBackSending:
                 aDo.setUserSending(map);
                 break;
-            case 401:
+            case KdConstants.callBackSign:
                 aDo.setSignIn(map);
                 aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE);
+                if (OrderTypeEnum.TO_B.equals(orderDO.getType())){
+                    orderDO.setStatus(SaleOrderStatusEnum.ORDER_END);
+                }
+                if (OrderTypeEnum.TO_C.equals(orderDO.getType())){
+                    orderDO.setStatus(SaleOrderStatusEnum.TO_BE_RETURN);
+                }
                 break;
-            case 402:
+            case KdConstants.callBackSignRefuse:
                 aDo.setSignIn(map);
                 aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE);
+                if (OrderTypeEnum.TO_B.equals(orderDO.getType())){
+                    orderDO.setStatus(SaleOrderStatusEnum.ORDER_END);
+                }
+                if (OrderTypeEnum.TO_C.equals(orderDO.getType())){
+                    orderDO.setStatus(SaleOrderStatusEnum.TO_BE_RETURN);
+                }
                 break;
-            case 500:
+            case KdConstants.callBackCancelStatus:
                 aDo.setCancelOrderKdn(map);
                 break;
-            case 600:
+            case KdConstants.callBackCreateOrderFail:
                 aDo.setCreateOrderFail(map);
                 break;
-            case 206:
+            case KdConstants.callBackFeeStatus:
                 aDo.setOrderFee(map);
                 break;
             default:
@@ -220,5 +249,4 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     }
 
 
-
 }

+ 100 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/CreateStoreModel.java

@@ -0,0 +1,100 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * 预下单参数
+ */
+@Data
+public class CreateStoreModel {
+
+    @ApiModelProperty(value = "1、storeCode平台门店编码(商家自定义门店编码,唯一),个人即时配编码固定传storeCode;2、merchantCode快递鸟门店编码(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
+    @NotBlank
+    private String storeCode;
+
+    @ApiModelProperty(value = "门店名称(自定义且不可重复,不允许出现“测试”、“test”等字眼)")
+    @NotBlank
+    private String storeName;
+
+    @ApiModelProperty(value = "门店物品类型")
+    @NotBlank
+    private String storeGoodsType;
+
+    @ApiModelProperty(value = "省")
+    @NotBlank
+    private String provinceName;
+
+    @ApiModelProperty(value = "市")
+    @NotBlank
+    private String cityName;
+
+    @ApiModelProperty(value = "县")
+    @NotBlank
+    private String areaName;
+
+    @ApiModelProperty(value = "门店详细地址")
+    @NotBlank
+    private String address;
+
+    @ApiModelProperty(value = "坐标类型1:百度地图、 2:高德地图 、3:腾讯地图")
+    @NotBlank
+    private Integer lbsType = 2;
+
+    @ApiModelProperty(value = "经度,精确到小数点后5位")
+    @NotBlank
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度,精确到小数点后5位")
+    @NotBlank
+    private String latitude;
+
+    @ApiModelProperty(value = "门店联系人姓名,存在配送员上门前联系门店场景,如没有找到门店,联系门店联系人进行确认")
+    @NotBlank
+    private String contactName;
+
+    @ApiModelProperty(value = "门店联系人手机号(门店联系人手机号和座机号必填一项)")
+    @NotBlank
+    private String  mobile;
+
+    @ApiModelProperty(value = "门店联系人电话(门店联系人手机号和座机号必填一项)")
+    @NotBlank
+    private String phone;
+
+    @ApiModelProperty(value = "身份证正面图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCardFront;
+
+    @ApiModelProperty(value = "身份证反面图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCardBack;
+
+    @ApiModelProperty(value = "身份证号(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCard;
+
+    @ApiModelProperty(value = "身份证姓名(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCardName;
+
+    @ApiModelProperty(value = "营业执照图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String license;
+
+    @ApiModelProperty(value = "社会统一信用代码(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String creditCode;
+
+    @ApiModelProperty(value = "门店照图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String  shopPicture;
+
+    @ApiModelProperty(value = "门店拥有人手持身份证、营业执照图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String handheldLicencePic;
+}

+ 13 - 0
module-erp/src/main/resources/mapper/ProductStockMapper.xml

@@ -94,5 +94,18 @@
             </if>
         </where>
     </select>
+    <select id="transitDetail" resultType="com.hys.app.model.erp.vo.TransitVO">
+        SELECT
+            eo.sn order_sn,
+            eoi.num,
+            eoi.end_time
+        FROM
+            erp_order_item eoi
+                LEFT JOIN erp_order eo ON eoi.order_id = eo.id
+        WHERE
+            eoi.product_stock_id = #{stockId}
+          AND eo.type = "TO_C"
+          AND `status` = "TO_BE_RETURN"
+    </select>
 
 </mapper>

+ 2 - 2
server/src/main/resources/application.yml

@@ -39,8 +39,8 @@ erp:
   #token加密秘钥,请务必更换此词串,且注意保密
   token-secret: 85d6ce9da4e943ff4dcd367ab3d94164
   timeout:
-    accessTokenTimeout:  1200000 #访问token失效时间 单位秒
-    refreshTokenTimeout: 1800000 #刷新token失效时间 单位秒
+    accessTokenTimeout:  12000000 #访问token失效时间 单位秒
+    refreshTokenTimeout: 18000000 #刷新token失效时间 单位秒
     captchaTimout:  120       #验证码失效时间 单位秒
     smscodeTimout: 120        #短信验证码失效时间 单位秒