ghj 1 vuosi sitten
vanhempi
sitoutus
b5a2cdeb5a
79 muutettua tiedostoa jossa 1340 lisäystä ja 1509 poistoa
  1. 15 13
      module-erp/src/main/java/com/hys/app/controller/erp/purchase/WarehouseEntryManagerController.java
  2. 10 4
      module-erp/src/main/java/com/hys/app/controller/erp/purchase/WarehouseEntryProductManagerController.java
  3. 15 30
      module-erp/src/main/java/com/hys/app/controller/erp/sale/OrderController.java
  4. 28 10
      module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseOutManagerController.java
  5. 0 58
      module-erp/src/main/java/com/hys/app/converter/erp/OrderConverter.java
  6. 0 49
      module-erp/src/main/java/com/hys/app/converter/erp/OrderItemConverter.java
  7. 1 1
      module-erp/src/main/java/com/hys/app/converter/erp/OrderPaymentConverter.java
  8. 0 19
      module-erp/src/main/java/com/hys/app/converter/erp/WarehouseEntryConverter.java
  9. 11 163
      module-erp/src/main/java/com/hys/app/converter/erp/WarehouseOutConverter.java
  10. 0 47
      module-erp/src/main/java/com/hys/app/converter/erp/WarehouseOutItemConverter.java
  11. 0 1
      module-erp/src/main/java/com/hys/app/mapper/erp/OrderMapper.java
  12. 1 1
      module-erp/src/main/java/com/hys/app/mapper/erp/ProductStockMapper.java
  13. 1 1
      module-erp/src/main/java/com/hys/app/mapper/erp/WarehouseOutItemMapper.java
  14. 5 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/GoodsDO.java
  15. 26 8
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderDO.java
  16. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java
  17. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderPaymentDO.java
  18. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderReturnItemDO.java
  19. 4 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductDO.java
  20. 0 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductStockDO.java
  21. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseEntryDO.java
  22. 7 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseEntryProductDO.java
  23. 8 2
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutDO.java
  24. 3 3
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutItemDO.java
  25. 5 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/GoodsDTO.java
  26. 22 115
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderDTO.java
  27. 5 37
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java
  28. 8 3
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderQueryParams.java
  29. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderReturnDTO.java
  30. 6 2
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java
  31. 30 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/WareQueryGoodParams.java
  32. 5 56
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseEntryDTO.java
  33. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseEntryProductDTO.java
  34. 17 53
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseOutDTO.java
  35. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseOutPreviewDTO.java
  36. 34 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseOutProductDTO.java
  37. 2 2
      module-erp/src/main/java/com/hys/app/model/erp/enums/OrderTypeEnum.java
  38. 40 0
      module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderStatusEnum.java
  39. 7 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/GoodsVO.java
  40. 0 24
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderAllowable.java
  41. 13 2
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderItemVO.java
  42. 81 14
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderVO.java
  43. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/ProductStockV1.java
  44. 52 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/WareOutGoodsVO.java
  45. 19 65
      module-erp/src/main/java/com/hys/app/model/erp/vo/WarehouseOutVO.java
  46. 1 1
      module-erp/src/main/java/com/hys/app/model/goods/dos/BrandDO.java
  47. 7 0
      module-erp/src/main/java/com/hys/app/model/system/vo/UploaderVO.java
  48. 1 1
      module-erp/src/main/java/com/hys/app/service/base/plugin/upload/OSSPlugin.java
  49. 3 3
      module-erp/src/main/java/com/hys/app/service/erp/OrderItemManager.java
  50. 10 34
      module-erp/src/main/java/com/hys/app/service/erp/OrderManager.java
  51. 2 2
      module-erp/src/main/java/com/hys/app/service/erp/OrderPaymentManager.java
  52. 3 3
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseEntryManager.java
  53. 8 0
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseEntryProductManager.java
  54. 2 2
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseOutItemManager.java
  55. 18 2
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseOutManager.java
  56. 3 3
      module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java
  57. 3 3
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderItemManagerImpl.java
  58. 75 373
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java
  59. 2 2
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderPaymentManagerImpl.java
  60. 3 6
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderReturnManagerImpl.java
  61. 9 7
      module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java
  62. 8 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaManagerImpl.java
  63. 80 61
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryManagerImpl.java
  64. 36 2
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryProductManagerImpl.java
  65. 1 1
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseManagerImpl.java
  66. 3 3
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutItemManagerImpl.java
  67. 113 198
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java
  68. 48 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/GaoDeUtil.java
  69. 58 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KdConstants.java
  70. 14 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java
  71. 98 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java
  72. 29 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/KdGood.java
  73. 17 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/LongitudeLatitude.java
  74. 105 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/PreOrderModel.java
  75. 39 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReceiverSender.java
  76. 32 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReturnCreateOrderFail.java
  77. 14 9
      module-erp/src/main/resources/mapper/ProductStockMapper.xml
  78. 1 1
      module-erp/src/main/resources/mapper/WarehouseEntryProductMapper.xml
  79. 1 1
      module-erp/src/main/resources/mapper/WarehouseOutItemMapper.xml

+ 15 - 13
module-erp/src/main/java/com/hys/app/controller/erp/purchase/WarehouseEntryManagerController.java

@@ -1,6 +1,7 @@
 package com.hys.app.controller.erp.purchase;
 
 import com.hys.app.framework.database.WebPage;
+import com.hys.app.model.erp.dos.WarehouseEntryDO;
 import com.hys.app.model.erp.dto.WarehouseEntryDTO;
 import com.hys.app.model.erp.dto.WarehouseEntryQueryParams;
 import com.hys.app.model.erp.dto.WarehouseEntryStatisticsParam;
@@ -44,16 +45,17 @@ public class WarehouseEntryManagerController {
 
     @ApiOperation(value = "分页列表")
     @GetMapping
-    public WebPage<WarehouseEntryVO> list(WarehouseEntryQueryParams queryParams) {
-        WebPage<WarehouseEntryVO> datalist= warehouseEntryManager.list(queryParams);
-        for(WarehouseEntryVO vo:datalist.getData()){
-            if(!Objects.isNull(vo.getAreaId()) && vo.getAreaId()>0){
-                WarehouseAreaVO areaVO=warehouseAreaManager.getDetail(vo.getAreaId());
-                vo.setWarehouseArea(areaVO);
-            }
-        }
-
-        return datalist;
+    public WebPage<WarehouseEntryDO> list(WarehouseEntryQueryParams queryParams) {
+        return warehouseEntryManager.list(queryParams);
+
+//        for(WarehouseEntryVO vo:datalist.getData()){
+//            if(!Objects.isNull(vo.getAreaId()) && vo.getAreaId()>0){
+//                WarehouseAreaVO areaVO=warehouseAreaManager.getDetail(vo.getAreaId());
+//                vo.setWarehouseArea(areaVO);
+//            }
+//        }
+//
+//        return datalist;
     }
 
     @ApiOperation(value = "添加")
@@ -92,10 +94,10 @@ public class WarehouseEntryManagerController {
     }
 
     @ApiOperation(value = "删除")
-    @DeleteMapping("/{ids}")
+    @DeleteMapping("/{id}")
     @Log(client = LogClient.admin, detail = "删除ID为[${ids}]的入库单")
-    public void delete(@PathVariable List<Long> ids) {
-        warehouseEntryManager.delete(ids);
+    public void delete(@PathVariable Long id) {
+        warehouseEntryManager.delete(id);
     }
 
     @ApiOperation(value = "审核入库单")

+ 10 - 4
module-erp/src/main/java/com/hys/app/controller/erp/purchase/WarehouseEntryProductManagerController.java

@@ -1,8 +1,10 @@
 package com.hys.app.controller.erp.purchase;
 
 import com.hys.app.framework.database.WebPage;
+import com.hys.app.model.erp.dto.WareQueryGoodParams;
 import com.hys.app.model.erp.dto.WarehouseEntryProductQueryParams;
 import com.hys.app.model.erp.dto.WarehouseInQueryParams;
+import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.WarehouseEntryItemV1;
 import com.hys.app.model.erp.vo.WarehouseEntryProductVO;
 import com.hys.app.service.erp.WarehouseEntryProductManager;
@@ -10,10 +12,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -51,5 +50,12 @@ public class WarehouseEntryProductManagerController {
         webPage.setPageNo(queryParams.getPageNo());
         return webPage;
     }
+
+    @ApiOperation(value = "查找这个商品在这个仓库的库存")
+    @PostMapping("/getStockByWarehouseGood")
+    public List<GoodsVO>  getStockByWarehouseGood(@RequestBody WareQueryGoodParams params) {
+       return warehouseEntryProductManager.getStockByWarehouseGood(params);
+    }
+
 }
 

+ 15 - 30
module-erp/src/main/java/com/hys/app/controller/erp/sale/OrderController.java

@@ -1,5 +1,6 @@
 package com.hys.app.controller.erp.sale;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.model.erp.dto.OrderDTO;
 import com.hys.app.model.erp.dto.OrderQueryParams;
@@ -56,44 +57,28 @@ public class OrderController {
 
     @ApiOperation(value = "查询")
     @GetMapping("/{id}")
-    public OrderVO getDetail(@PathVariable String id) {
+    public OrderVO getDetail(@PathVariable Long id) {
         return orderManager.getDetail(id);
     }
 
-    @ApiOperation(value = "提交")
-    @PostMapping("/{ids}/submit")
-    @Log(client = LogClient.admin, detail = "提交ID为[${ids}]的订单")
-    public void submit(@PathVariable List<String> ids) {
-        orderManager.submit(ids);
-    }
-
-    @ApiOperation(value = "撤销提交")
-    @PostMapping("/{ids}/withdraw")
-    @Log(client = LogClient.admin, detail = "撤销提交ID为[${ids}]的订单")
-    public void withdraw(@PathVariable List<String> ids) {
-        orderManager.withdraw(ids);
-    }
-
-    @ApiOperation(value = "审核")
-    @PostMapping("/{ids}/audit")
-    @Log(client = LogClient.admin, detail = "审核ID为[${ids}]的订单")
-    public void audit(@PathVariable List<Long> ids, @NotNull Boolean isPass, String remark) {
-        orderManager.audit(ids, isPass, remark);
+    @ApiOperation(value = "确认")
+    @PostMapping("/{id}/submit")
+    @Log(client = LogClient.admin, detail = "提交ID为[${id}]的订单")
+    public void submit(@PathVariable Long id) {
+        orderManager.submit(id);
     }
 
     @ApiOperation(value = "删除")
-    @DeleteMapping("/{ids}")
-    @Log(client = LogClient.admin, detail = "删除id为[${ids}]的订单")
-    public void delete(@PathVariable List<String> ids) {
-        orderManager.delete(ids);
+    @DeleteMapping("/{id}")
+    @Log(client = LogClient.admin, detail = "删除id为[${id}]的订单")
+    public void delete(@PathVariable Long id) {
+        orderManager.delete(id);
     }
 
-    @ApiOperation(value = "标记为已支付")
-    @PostMapping("/{ids}/payment")
-    @Log(client = LogClient.admin, detail = "将id为[${ids}]的订单标记为已支付")
-    public void payment(@PathVariable List<Long> ids) {
-        orderManager.payment(ids);
+    @ApiOperation(value = "已发货分页列表")
+    @GetMapping("hasSendOrder/list")
+    public WebPage<OrderVO> hasSendOrder(OrderQueryParams queryParams) {
+        return orderManager.hasSendOrder(queryParams);
     }
-
 }
 

+ 28 - 10
module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseOutManagerController.java

@@ -1,12 +1,16 @@
 package com.hys.app.controller.erp.warehouse;
 
+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.dto.*;
 import com.hys.app.model.erp.enums.WarehouseOutStatusEnum;
+import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.WarehouseOutVO;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
 import com.hys.app.service.erp.WarehouseOutManager;
+import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.Api;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,13 +56,13 @@ public class WarehouseOutManagerController {
         warehouseOutManager.add(warehouseOutDTO);
     }
 
-//    @ApiOperation(value = "编辑")
-//    @PutMapping("/{id}")
-//    @Log(client = LogClient.admin, detail = "编辑id为[${id}]出库单")
-//    public void edit(@PathVariable Long id, @RequestBody @Valid WarehouseOutDTO warehouseOutDTO) {
-//        warehouseOutDTO.setId(id);
-//        warehouseOutManager.edit(warehouseOutDTO);
-//    }
+    @ApiOperation(value = "编辑")
+    @PutMapping("/{id}")
+    @Log(client = LogClient.admin, detail = "编辑id为[${id}]出库单")
+    public void edit(@PathVariable Long id, @RequestBody @Valid WarehouseOutDTO warehouseOutDTO) {
+        warehouseOutDTO.setId(id);
+        warehouseOutManager.edit(warehouseOutDTO);
+    }
 
     @ApiOperation(value = "查询")
     @GetMapping("/{id}")
@@ -67,10 +71,10 @@ public class WarehouseOutManagerController {
     }
 
     @ApiOperation(value = "删除")
-    @DeleteMapping("/{ids}")
+    @DeleteMapping("/{id}")
     @Log(client = LogClient.admin, detail = "删除ID为[${ids}]的出库单")
-    public void delete(@PathVariable List<String> ids) {
-        warehouseOutManager.delete(ids);
+    public void delete(@PathVariable Long id) {
+        warehouseOutManager.delete(id);
     }
 
     @ApiOperation(value = "审核")
@@ -98,5 +102,19 @@ public class WarehouseOutManagerController {
     public void export(HttpServletResponse response, WarehouseOutStatisticsParam params) {
         this.warehouseOutManager.export(response, params);
     }
+
+    @ApiOperation(value = "快递鸟发货")
+    @PostMapping("/kdShip")
+    @Log(client = LogClient.admin, detail = "出库单[${shipDTO.id}]发货")
+    public void kdShip(@RequestBody @Valid PreOrderModel preOrderModel) {
+        warehouseOutManager.kdShip(preOrderModel);
+    }
+
+    @ApiOperation(value = "根据仓库找到所有库存大于0的商品")
+    @GetMapping("/getGoodByWarehouse/{warehouseId}")
+    @Log(client = LogClient.admin, detail = "根据仓库找到所有库存大于0的商品")
+    public Page<GoodsVO> getGoodByWarehouse(@PathVariable(value = "warehouseId" )Long warehouseId, BaseQueryParam queryParam) {
+       return warehouseOutManager.getGoodByWarehouse(warehouseId,queryParam);
+    }
 }
 

+ 0 - 58
module-erp/src/main/java/com/hys/app/converter/erp/OrderConverter.java

@@ -29,68 +29,10 @@ public interface OrderConverter {
 
     OrderDO convert(OrderDTO orderDTO);
 
-    @Mapping(target = "allowable", expression = "java(new com.hys.app.model.erp.vo.OrderAllowable(orderDO))")
-    @Mapping(target = "statusText", expression = "java(orderDO.getStatus().getText())")
-    @Mapping(target = "deliveryTypeText", expression = "java(orderDO.getDeliveryType().getText())")
-    @Mapping(target = "paymentStatusText", expression = "java(orderDO.getPaymentStatus().getText())")
-    OrderVO convert(OrderDO orderDO);
-
     List<OrderVO> convertList(List<OrderDO> list);
 
-    List<OrderExcelVO> convertExcel(List<OrderVO> list);
-
     WebPage<OrderVO> convertPage(WebPage<OrderDO> webPage);
 
-    default OrderDO combination(OrderDTO orderDTO) {
-        boolean isToC = orderDTO.getType() == OrderTypeEnum.TO_C;
-        OrderDO orderDO = convert(orderDTO);
-        if (isToC) {
-            // 会员
-            orderDO.setMemberName(orderDTO.getMemberDO().getName());
-            orderDO.setMemberMobile(orderDTO.getMemberDO().getMobile());
-        } else {
-            // 企业
-            orderDO.setMemberName(orderDTO.getEnterpriseDO().getName());
-            orderDO.setMemberMobile(orderDTO.getEnterpriseDO().getMobile());
-        }
-        // 仓库
-        orderDO.setWarehouseName(orderDTO.getWarehouseDO().getName());
-        // 部门
-        orderDO.setDeptId(orderDTO.getDeptDO().getId());
-        orderDO.setDeptName(orderDTO.getDeptDO().getName());
-        // 销售经理
-        orderDO.setMarketingName(orderDTO.getMarketingManagerDO() == null ? "" : orderDTO.getMarketingManagerDO().getRealName());
-        // 配送信息
-        orderDO.setStoreName(orderDTO.getStoreDO() == null ? "" : orderDTO.getStoreDO().getStoreName());
-        orderDO.setWarehouseOutFlag(false);
-        orderDO.setShipFlag(false);
-
-        return orderDO;
-    }
-
-    default OrderVO convert(OrderDO orderDO, List<OrderItemDO> itemList, List<OrderPaymentDO> paymentList, StoreDO storeDO, Map<Long, Integer> stockNumMap) {
-        OrderVO orderVO = convert(orderDO);
-
-        // 订单明细
-        List<OrderItemVO> orderItemList = convertItemList(itemList);
-        orderItemList.forEach(orderItemVO -> {
-            if (orderDO.getType() == OrderTypeEnum.TO_B) {
-                orderItemVO.setStockNum(stockNumMap.get(orderItemVO.getProductId()));
-            }else {
-                orderItemVO.setStockNum(stockNumMap.get(orderItemVO.getBatchId()));
-            }
-        });
-        orderVO.setItemList(orderItemList);
-        // 支付列表
-        orderVO.setPaymentList(paymentList);
-        // 门店信息
-        orderVO.setStore(storeDO);
-
-        return orderVO;
-    }
-
-    List<OrderItemVO> convertItemList(List<OrderItemDO> itemList);
-
     default OrderStatusEnum convertAuditStatus(Boolean isPass, OrderTypeEnum type) {
         if (isPass) {
             return type == OrderTypeEnum.TO_C ? OrderStatusEnum.COMPLETE : OrderStatusEnum.WAIT_WAREHOUSE_OUT;

+ 0 - 49
module-erp/src/main/java/com/hys/app/converter/erp/OrderItemConverter.java

@@ -39,55 +39,6 @@ public interface OrderItemConverter {
 
     WebPage<OrderItemVO> convertPage(WebPage<OrderItemDO> webPage);
 
-    default List<OrderItemDO> convert(OrderDTO orderDTO, OrderDO orderDO) {
-        List<OrderItemDTO> itemList = orderDTO.getItemList();
-        Map<Long, ProductDO> productMap = orderDTO.getProductMap();
-        Map<Long, WarehouseEntryBatchDO> batchMap = orderDTO.getBatchMap();
-        Map<Long, CategoryDO> categoryMap = orderDTO.getCategoryMap();
-
-        return itemList.stream().map(orderItemDTO -> {
-
-            OrderItemDO orderItemDO = convert(orderItemDTO);
-            // 订单信息
-            orderItemDO.setOrderId(orderDO.getId());
-            orderItemDO.setOrderSn(orderDO.getSn());
-
-            if (orderDTO.getType() == OrderTypeEnum.TO_C) {
-                WarehouseEntryBatchDO batchDO = batchMap.get(orderItemDTO.getBatchId());
-                CategoryDO categoryDO = categoryMap.get(batchDO.getCategoryId());
-
-                // 商品信息
-                orderItemDO.setBatchId(batchDO.getId());
-                orderItemDO.setBatchSn(batchDO.getSn());
-                orderItemDO.setGoodsId(batchDO.getGoodsId());
-                orderItemDO.setProductId(batchDO.getProductId());
-                orderItemDO.setProductSn(batchDO.getProductSn());
-                orderItemDO.setProductName(batchDO.getProductName());
-                orderItemDO.setProductSpecification(batchDO.getProductSpecification());
-                orderItemDO.setProductUnit(batchDO.getProductUnit());
-                orderItemDO.setCategoryId(batchDO.getCategoryId());
-                orderItemDO.setCategoryName(categoryDO == null ? "" : categoryDO.getName());
-
-            } else {
-                ProductDO productDO = productMap.get(orderItemDTO.getProductId());
-                CategoryDO categoryDO = categoryMap.get(productDO.getCategoryId());
-                // 商品信息
-                orderItemDO.setGoodsId(productDO.getGoodsId());
-                orderItemDO.setProductId(productDO.getId());
-                orderItemDO.setProductSn(productDO.getSn());
-                orderItemDO.setProductName(productDO.getName());
-                orderItemDO.setProductSpecification(productDO.getSpecification());
-                orderItemDO.setProductUnit(productDO.getUnit());
-                orderItemDO.setCategoryId(productDO.getCategoryId());
-                orderItemDO.setCategoryName(categoryDO == null ? "" : categoryDO.getName());
-            }
-
-            orderItemDO.setReturnNum(0);
-
-            return orderItemDO;
-        }).collect(Collectors.toList());
-    }
-
     default List<StockUpdateDTO> convertStockUpdate(List<OrderItemDO> itemList){
         return itemList.stream().map(orderItemDO -> {
             StockUpdateDTO stockUpdateDTO = new StockUpdateDTO();

+ 1 - 1
module-erp/src/main/java/com/hys/app/converter/erp/OrderPaymentConverter.java

@@ -31,7 +31,7 @@ public interface OrderPaymentConverter {
     
     WebPage<OrderPaymentVO> convertPage(WebPage<OrderPaymentDO> webPage);
 
-    default List<OrderPaymentDO> convert(String orderId, List<OrderPaymentDTO> paymentList, Map<String, CollectingAccountDO> collectingAccountMap){
+    default List<OrderPaymentDO> convert(Long orderId, List<OrderPaymentDTO> paymentList, Map<String, CollectingAccountDO> collectingAccountMap){
         return paymentList.stream().map(orderPaymentDTO -> {
             CollectingAccountDO collectingAccountDO = collectingAccountMap.get(orderPaymentDTO.getCollectingAccountId());
             OrderPaymentDO orderPaymentDO = new OrderPaymentDO();

+ 0 - 19
module-erp/src/main/java/com/hys/app/converter/erp/WarehouseEntryConverter.java

@@ -33,31 +33,12 @@ public interface WarehouseEntryConverter {
 
     WarehouseEntryDO convert(WarehouseEntryDTO warehouseEntryDTO);
 
-    @Mapping(target = "allowable", expression = "java(new com.hys.app.model.erp.vo.WarehouseEntryAllowable(warehouseEntryDO))")
     WarehouseEntryVO convert(WarehouseEntryDO warehouseEntryDO);
 
     WebPage<WarehouseEntryVO> convert(WebPage<WarehouseEntryDO> webPage);
 
     List<WarehouseEntryVO> convert(List<WarehouseEntryDO> list);
 
-    default WarehouseEntryDO combination(WarehouseEntryDTO warehouseEntryDTO) {
-        WarehouseEntryDO warehouseEntryDO = convert(warehouseEntryDTO);
-
-        if (warehouseEntryDTO.getProcurementPlan()!=null){
-            warehouseEntryDO.setProcurementPlanSn(warehouseEntryDTO.getProcurementPlan().getSn());
-        }
-        if (warehouseEntryDTO.getContract()!=null){
-            warehouseEntryDO.setContractSn(warehouseEntryDTO.getContract().getSn());
-        }
-        //warehouseEntryDO.setDeptName(warehouseEntryDTO.getDeptDO().getName());
-        warehouseEntryDO.setWarehouseName(warehouseEntryDTO.getWarehouseDO().getName());
-        //warehouseEntryDO.setSupplierName(warehouseEntryDTO.getSupplierDO().getCustomName());
-        //warehouseEntryDO.setSupplierSn(warehouseEntryDTO.getSupplierDO().getCustomSn());
-        warehouseEntryDO.setHandledByName(warehouseEntryDTO.getHandledBy().getRealName());
-
-        return warehouseEntryDO;
-    }
-
     default WarehouseEntryVO combination(WarehouseEntryDO warehouseEntryDO, List<WarehouseEntryProductVO> productList, List<ProcurementContractProduct> contractProductList, List<WarehouseEntryBatchVO> batchList) {
         WarehouseEntryVO warehouseEntryVO = convert(warehouseEntryDO);
 

+ 11 - 163
module-erp/src/main/java/com/hys/app/converter/erp/WarehouseOutConverter.java

@@ -32,41 +32,19 @@ public interface WarehouseOutConverter {
 
     WarehouseOutDO convert(WarehouseOutDTO warehouseOutDTO);
 
-    @Mapping(target = "allowable", expression = "java(this.getAllowable(warehouseOutDO))")
     WarehouseOutVO convert(WarehouseOutDO warehouseOutDO);
 
-    WebPage<WarehouseOutVO> convert(WebPage<WarehouseOutDO> webPage);
-
-    /**
-     * 组装出库单
-     *
-     * @param warehouseOutDTO 出库单DTO
-     * @return 出库单
-     */
-    default WarehouseOutDO combination(WarehouseOutDTO warehouseOutDTO) {
-        WarehouseOutDO warehouseOutDO = new WarehouseOutDO();
-
-        Collection<OrderDO> orderList = warehouseOutDTO.getOrderMap().values();
-        OrderDO orderDO = orderList.iterator().next();
-
-        warehouseOutDO.setId(warehouseOutDTO.getId());
-        warehouseOutDO.setOutTime(warehouseOutDTO.getOutTime());
-        warehouseOutDO.setWarehouseConsigneeId(warehouseOutDTO.getWarehouseConsigneeId());
-        warehouseOutDO.setWarehouseConsigneeName(warehouseOutDTO.getWarehouseConsignee().getRealName());
-        warehouseOutDO.setDeptId(orderDO.getDeptId());
-        warehouseOutDO.setDeptName(orderDO.getDeptName());
-        warehouseOutDO.setWarehouseId(orderDO.getWarehouseId());
-        warehouseOutDO.setWarehouseName(orderDO.getWarehouseName());
-        warehouseOutDO.setMemberRealName(orderDO.getMemberName());
-        warehouseOutDO.setMemberMobile(orderDO.getMemberMobile());
-        warehouseOutDO.setDeliveryType(orderDO.getDeliveryType());
-        warehouseOutDO.setOrderIdList(convertList(orderList, OrderDO::getId));
-        warehouseOutDO.setOrderSnList(convertList(orderList, OrderDO::getSn));
-        warehouseOutDO.setStoreId(orderDO.getStoreId());
-        warehouseOutDO.setStoreName(orderDO.getStoreName());
-
-        return warehouseOutDO;
-    }
+    List<WarehouseOutVO> convert(List<WarehouseOutDO> warehouseOutDO);
+
+    default WebPage<WarehouseOutVO> convert(WebPage<WarehouseOutDO> webPage){
+        List<WarehouseOutVO> convert = convert(webPage.getData());
+        WebPage<WarehouseOutVO> resPage = new WebPage();
+        resPage.setData(convert);
+        resPage.setPageNo(webPage.getPageNo());
+        resPage.setPageSize(webPage.getPageSize());
+        resPage.setDataTotal(webPage.getDataTotal());
+        return resPage;
+    };
 
     default WebPage<WarehouseOutVO> combination(WebPage<WarehouseOutDO> webPage, Map<Long, String> deptNameMap, Map<Long, String> warehouseNameMap) {
         WebPage<WarehouseOutVO> page = convert(webPage);
@@ -96,136 +74,6 @@ public interface WarehouseOutConverter {
         }).collect(Collectors.toList());
     }
 
-    default WarehouseOutVO convert(WarehouseOutDO warehouseOutDO, List<WarehouseOutItemDO> allItemList, List<WarehouseEntryBatchDO> batchList){
-        WarehouseOutVO warehouseOutVO = convert(warehouseOutDO);
-
-        // 批次
-        Map<Long, WarehouseEntryBatchDO> batchMap = convertMap(batchList, WarehouseEntryBatchDO::getId, Function.identity());
-        // 出库明细
-        warehouseOutVO.setItemList(allItemList);
-        // 出库明细按照订单分组
-        Map<String, List<WarehouseOutItemDO>> itemListMap = allItemList.stream().collect(Collectors.groupingBy(WarehouseOutItemDO::getOrderId));
-        warehouseOutVO.setOrderList(convertList(itemListMap.values(), itemList -> convertWarehouseOutOrder(itemList, batchMap)));
-
-        return warehouseOutVO;
-    }
-
-    default WarehouseOutVO.Order convertWarehouseOutOrder(List<WarehouseOutItemDO> itemList, Map<Long, WarehouseEntryBatchDO> batchMap){
-        WarehouseOutVO.Order warehouseOutOrderVO = new WarehouseOutVO.Order();
-
-        warehouseOutOrderVO.setOrderId(itemList.get(0).getOrderId());
-        warehouseOutOrderVO.setOrderSn(itemList.get(0).getOrderSn());
-
-        // 按照订单明细id分组
-        Map<Long, List<WarehouseOutItemDO>> itemListMap = itemList.stream().collect(Collectors.groupingBy(WarehouseOutItemDO::getOrderItemId));
-        warehouseOutOrderVO.setOrderItemList(convertList(itemListMap.values(), list -> convertWarehouseOutOrderItem(list, batchMap)));
-
-        return warehouseOutOrderVO;
-    }
-
-    default WarehouseOutVO convertPreview(List<OrderDO> orderList, List<OrderItemDO> orderItemList, Map<Long, List<WarehouseEntryBatchDO>> batchMap){
-        Map<String, List<OrderItemDO>> orderItemListMap = orderItemList.stream().collect(Collectors.groupingBy(OrderItemDO::getOrderId));
-
-        // 组装数据返回
-        WarehouseOutVO warehouseOutVO = new WarehouseOutVO();
-        warehouseOutVO.setWarehouseId(orderList.get(0).getWarehouseId());
-        warehouseOutVO.setWarehouseName(orderList.get(0).getWarehouseName());
-        warehouseOutVO.setOrderList(convertList(orderList, orderDO -> convertWarehouseOutOrder(orderDO, orderItemListMap.get(orderDO.getId()), batchMap)));
-        return warehouseOutVO;
-    }
-
-    default WarehouseOutVO.Order convertWarehouseOutOrder(OrderDO orderDO, List<OrderItemDO> orderItemList, Map<Long, List<WarehouseEntryBatchDO>> batchMap){
-        WarehouseOutVO.Order order = new WarehouseOutVO.Order();
-
-        order.setOrderId(orderDO.getId());
-        order.setOrderSn(orderDO.getSn());
-        order.setOrderItemList(convertList(orderItemList, orderItemDO -> convertWarehouseOutOrderItem(orderItemDO, batchMap.get(orderItemDO.getProductId()))));
-
-        return order;
-    }
-
-    default WarehouseOutVO.OrderItem convertWarehouseOutOrderItem(OrderItemDO orderItemDO, List<WarehouseEntryBatchDO> batchList){
-        WarehouseOutVO.OrderItem orderItem = new WarehouseOutVO.OrderItem();
-
-        orderItem.setOrderItemId(orderItemDO.getId());
-        orderItem.setProductId(orderItemDO.getProductId());
-        orderItem.setProductSn(orderItemDO.getProductSn());
-        orderItem.setProductName(orderItemDO.getProductName());
-        orderItem.setProductSpecification(orderItemDO.getProductSpecification());
-        orderItem.setProductUnit(orderItemDO.getProductUnit());
-        orderItem.setNum(orderItemDO.getNum());
-
-        // 该产品需要出库的数量
-        int productOutNum = orderItemDO.getNum();
-        // 循环批次的剩余库存,直到数量达到出库数量
-        List<WarehouseOutVO.StockBatch> usedBatch = new ArrayList<>();
-        if (batchList != null) {
-            for (WarehouseEntryBatchDO warehouseEntryBatchDO : batchList) {
-                // 批次剩余数量如果为0,继续找其他批次
-                if(warehouseEntryBatchDO.getRemainNum() == 0){
-                    continue;
-                }
-
-                // 计算该批次出库的数量
-                int batchOutNum = Math.min(productOutNum, warehouseEntryBatchDO.getRemainNum());
-//                // 减少该批次剩余数量(这里需要把剩余库存减掉,其他订单如果也存在相同的商品,还会用到该批次)
-//                warehouseEntryBatchDO.setRemainNum(warehouseEntryBatchDO.getRemainNum() - batchOutNum);
-                // 加入使用的批次列表
-                usedBatch.add(convert(warehouseEntryBatchDO, batchOutNum));
-                // 减掉商品数量,如果减到0,就跳出循环
-                productOutNum = productOutNum - batchOutNum;
-                if (productOutNum == 0) {
-                    break;
-                }
-            }
-        }
-
-        // 设置该商品出库时使用的批次
-        orderItem.setBatchList(usedBatch);
-
-        return orderItem;
-    }
-    default WarehouseOutVO.OrderItem convertWarehouseOutOrderItem(List<WarehouseOutItemDO> itemList, Map<Long, WarehouseEntryBatchDO> batchMap){
-        WarehouseOutVO.OrderItem orderItem = new WarehouseOutVO.OrderItem();
-
-        WarehouseOutItemDO warehouseOutItemDO = itemList.get(0);
-        orderItem.setOrderItemId(warehouseOutItemDO.getOrderItemId());
-        orderItem.setProductId(warehouseOutItemDO.getProductId());
-        orderItem.setProductSn(warehouseOutItemDO.getProductSn());
-        orderItem.setProductName(warehouseOutItemDO.getProductName());
-        orderItem.setProductSpecification(warehouseOutItemDO.getProductSpecification());
-        orderItem.setProductUnit(warehouseOutItemDO.getProductUnit());
-        orderItem.setNum(itemList.stream().mapToInt(WarehouseOutItemDO::getOutNum).sum());
-
-        // 批次
-        List<WarehouseOutVO.StockBatch> stockBatchList = itemList.stream().map(item -> {
-            WarehouseEntryBatchDO batchDO = batchMap.get(item.getWarehouseEntryBatchId());
-
-            WarehouseOutVO.StockBatch stockBatch = new WarehouseOutVO.StockBatch();
-            stockBatch.setWarehouseEntrySn(item.getWarehouseEntrySn());
-            stockBatch.setBatchId(item.getWarehouseEntryBatchId());
-            stockBatch.setBatchSn(item.getWarehouseEntryBatchSn());
-            stockBatch.setRemainNum(batchDO.getRemainNum());
-            stockBatch.setOutNum(item.getOutNum());
-
-            return stockBatch;
-        }).collect(Collectors.toList());
-        orderItem.setBatchList(stockBatchList);
-
-        return orderItem;
-    }
-
-    default WarehouseOutVO.StockBatch convert(WarehouseEntryBatchDO warehouseEntryBatchDO, int batchOutNum){
-        WarehouseOutVO.StockBatch stockBatch = new WarehouseOutVO.StockBatch();
-
-        stockBatch.setWarehouseEntrySn(warehouseEntryBatchDO.getWarehouseEntrySn());
-        stockBatch.setBatchId(warehouseEntryBatchDO.getId());
-        stockBatch.setBatchSn(warehouseEntryBatchDO.getSn());
-        stockBatch.setRemainNum(warehouseEntryBatchDO.getRemainNum());
-        stockBatch.setOutNum(batchOutNum);
-
-        return stockBatch;
-    }
 
 }
 

+ 0 - 47
module-erp/src/main/java/com/hys/app/converter/erp/WarehouseOutItemConverter.java

@@ -27,52 +27,5 @@ public interface WarehouseOutItemConverter {
     List<WarehouseOutItemVO> convert(List<WarehouseOutItemDO> list);
 
     WebPage<WarehouseOutItemVO> convert(WebPage<WarehouseOutItemDO> webPage);
-
-    default List<WarehouseOutItemDO> combination(WarehouseOutDTO warehouseOutDTO) {
-        List<WarehouseOutItemDO> warehouseOutItemList = new ArrayList<>();
-
-        for (WarehouseOutDTO.Order order : warehouseOutDTO.getOrderList()) {
-            for (WarehouseOutDTO.OrderItem orderItem : order.getOrderItemList()) {
-                for (WarehouseOutDTO.StockBatch stockBatch : orderItem.getBatchList()) {
-                    OrderDO orderDO = warehouseOutDTO.getOrderMap().get(order.getOrderId());
-                    OrderItemDO orderItemDO = warehouseOutDTO.getOrderItemMap().get(orderItem.getOrderItemId());
-                    WarehouseEntryBatchDO batchDO = warehouseOutDTO.getBatchMap().get(stockBatch.getBatchId());
-
-                    WarehouseOutItemDO warehouseOutItemDO = new WarehouseOutItemDO();
-                    warehouseOutItemDO.setWarehouseOutId(warehouseOutDTO.getId());
-
-                    warehouseOutItemDO.setWarehouseEntryId(batchDO.getWarehouseEntryId());
-                    warehouseOutItemDO.setWarehouseEntrySn(batchDO.getWarehouseEntrySn());
-                    warehouseOutItemDO.setWarehouseEntryItemId(batchDO.getWarehouseEntryItemId());
-                    warehouseOutItemDO.setWarehouseEntryBatchId(batchDO.getId());
-                    warehouseOutItemDO.setWarehouseEntryBatchSn(batchDO.getSn());
-
-                    warehouseOutItemDO.setOrderId(orderDO.getId());
-                    warehouseOutItemDO.setOrderSn(orderDO.getSn());
-
-                    warehouseOutItemDO.setOrderItemId(orderItemDO.getId());
-                    warehouseOutItemDO.setGoodsId(orderItemDO.getGoodsId());
-                    warehouseOutItemDO.setProductId(orderItemDO.getProductId());
-                    warehouseOutItemDO.setProductSn(orderItemDO.getProductSn());
-                    warehouseOutItemDO.setProductName(orderItemDO.getProductName());
-                    warehouseOutItemDO.setProductSpecification(orderItemDO.getProductSpecification());
-                    warehouseOutItemDO.setProductUnit(orderItemDO.getProductUnit());
-                    warehouseOutItemDO.setCategoryId(orderItemDO.getCategoryId());
-                    warehouseOutItemDO.setCategoryName(orderItemDO.getCategoryName());
-
-                    warehouseOutItemDO.setProductPrice(batchDO.getEntryPrice());
-                    warehouseOutItemDO.setProductCostPrice(batchDO.getProductCostPrice());
-                    warehouseOutItemDO.setTaxRate(batchDO.getTaxRate());
-                    warehouseOutItemDO.setOutNum(stockBatch.getOutNum());
-                    warehouseOutItemDO.setReturnNum(0);
-
-                    warehouseOutItemList.add(warehouseOutItemDO);
-                }
-            }
-        }
-
-        return warehouseOutItemList;
-    }
-
 }
 

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

@@ -22,7 +22,6 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
                         w -> w.like(OrderDO::getSn, params.getKeywords()).or().like(OrderDO::getMemberName, params.getKeywords()))
                 .likeIfPresent(OrderDO::getSn, params.getSn())
                 .eqIfPresent(OrderDO::getStatus, params.getStatus())
-                .eqIfPresent(OrderDO::getPaymentStatus, params.getPaymentStatus())
                 .eqIfPresent(OrderDO::getMemberId, params.getMemberId())
                 .likeIfPresent(OrderDO::getMemberName, params.getMemberName())
                 .betweenIfPresent(OrderDO::getOrderTime, params.getOrderTime())

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

@@ -29,7 +29,7 @@ public interface ProductStockMapper extends BaseMapperX<ProductStockDO> {
 
     ProductStockDO getOne(String id);
 
-    List<ProductStockV1> selectList(@Param("request") ProductStockQueryParams request);
+    List<ProductStockV1> queryList(@Param("request") ProductStockQueryParams request);
 
     Long selectCount(@Param("request") ProductStockQueryParams request);
     /**

+ 1 - 1
module-erp/src/main/java/com/hys/app/mapper/erp/WarehouseOutItemMapper.java

@@ -25,7 +25,7 @@ public interface WarehouseOutItemMapper extends BaseMapperX<WarehouseOutItemDO>
     }
 
 
-    List<WarehouseOutItemV1> selectList(@Param("request") WarehouseOutItemQueryParams request);
+    List<WarehouseOutItemV1> queryList(@Param("request") WarehouseOutItemQueryParams request);
 
     Long selectCount(@Param("request") WarehouseOutItemQueryParams request);
 

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

@@ -10,6 +10,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.NotEmpty;
+
 
 /**
  * 商品实体类
@@ -94,6 +96,9 @@ public class GoodsDO extends BaseDO {
     @ApiModelProperty(name = "mkt_price", value = "市场价格")
     private Double mktPrice;
 
+    @ApiModelProperty(name = "hire_or_sail", value = "出租商品 售卖商品")
+    private String hireOrSail;
+
     public void setPropertiesFromProduct(ProductDTO minPriceProduct){
         this.setPrice(minPriceProduct.getPrice());
         this.setCostPrice(minPriceProduct.getCostPrice());

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

@@ -6,14 +6,18 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 import com.hys.app.model.erp.enums.OrderDeliveryType;
-import com.hys.app.model.erp.enums.OrderPaymentStatusEnum;
 import com.hys.app.model.erp.enums.OrderStatusEnum;
 import com.hys.app.model.erp.enums.OrderTypeEnum;
+import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
 /**
  * 订单 DO
  *
@@ -29,7 +33,7 @@ public class OrderDO extends BaseDO {
     private static final long serialVersionUID = 1L;
 
     @TableId(type = IdType.ASSIGN_ID)
-    private String id;
+    private Long id;
 
     // ================== 基本信息 ==================
 
@@ -37,10 +41,7 @@ public class OrderDO extends BaseDO {
     private String sn;
 
     @ApiModelProperty(name = "status", value = "订单状态")
-    private OrderStatusEnum status;
-
-    @ApiModelProperty(name = "payment_status", value = "支付状态")
-    private OrderPaymentStatusEnum paymentStatus;
+    private SaleOrderStatusEnum status = SaleOrderStatusEnum.TO_BE_COMMIT;
 
     @ApiModelProperty(name = "payment_time", value = "支付时间")
     private Long paymentTime;
@@ -48,8 +49,8 @@ public class OrderDO extends BaseDO {
     @ApiModelProperty(name = "member_id", value = "会员id/企业id")
     private Long memberId;
 
-    @ApiModelProperty(name = "order_type", value = "支付方式")
-    private String orderType;
+    @ApiModelProperty(name = "pay_type", value = "支付方式")
+    private String payType;
 
     @ApiModelProperty(name = "member_name", value = "会员名称/企业名称")
     private String memberName;
@@ -140,4 +141,21 @@ public class OrderDO extends BaseDO {
     @TableLogic
     private Boolean deleted;
 
+    @ApiModelProperty(name = "province_city_area_address", value = "支付方式")
+    private String  provinceCityAreaAddress;
+
+    @ApiModelProperty(name = "address", value = "支付方式")
+    private String  address;
+
+    @ApiModelProperty(name = "province_city_area", value = "支付方式")
+    private String  provinceCityArea;
+
+//    @ApiModelProperty(name = "end_time", value = "开始时间")
+//    private LocalDateTime endTime;
+//
+//    @ApiModelProperty(name = "start_time", value = "结束时间")
+//    private LocalDateTime startTime;
+
+    @ApiModelProperty(name = "start_time", value = "结束时间")
+    private String hasSubmit;
 }

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

@@ -24,7 +24,7 @@ public class OrderItemDO implements Serializable {
     private Long id;
 
     @ApiModelProperty(name = "order_id", value = "订单id")
-    private String orderId;
+    private Long orderId;
 
     @ApiModelProperty(name = "order_sn", value = "订单编号")
     private String orderSn;

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

@@ -24,7 +24,7 @@ public class OrderPaymentDO implements Serializable {
     private String id;
 
     @ApiModelProperty(name = "order_id", value = "订单id")
-    private String orderId;
+    private Long orderId;
 
     @ApiModelProperty(name = "collecting_account_id", value = "收款账户id")
     private String collectingAccountId;

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

@@ -47,7 +47,7 @@ public class OrderReturnItemDO implements Serializable {
      * {@link WarehouseOutItemDO#getId()}
      */
     @ApiModelProperty(name = "warehouse_out_item_id", value = "对应的出库项id(订单类型为ToB时有该字段)")
-    private String warehouseOutItemId;
+    private Long warehouseOutItemId;
 
     /**
      * {@link OrderItemDO#getId()}

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

@@ -13,6 +13,7 @@ import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.ToString;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 
 
@@ -94,6 +95,9 @@ public class ProductDO extends BaseDO {
     @ApiModelProperty(name = "market_enable", value = "是否上架 true上架")
     private Boolean marketEnable;
 
+    @ApiModelProperty(name = "day_price", value = "日租金")
+    private BigDecimal dayPrice;
+
     public void setPropertiesFromGoods(GoodsDO goodsDO) {
         this.setGoodsId(goodsDO.getId());
 

+ 0 - 1
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductStockDO.java

@@ -85,7 +85,6 @@ public class ProductStockDO implements Serializable {
     public ProductStockDO(Long warehouseId, Long goodsId, Long productId, Integer num) {
         this.setWarehouseId(warehouseId);
         this.setGoodsId(goodsId);
-        this.setProductId(productId);
         this.setNum(num);
     }
 

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

@@ -116,4 +116,7 @@ public class WarehouseEntryDO extends BaseDO {
     @ApiModelProperty(name = "supplier_settlement_id", value = "供应商结算单id")
     private Long supplierSettlementId;
 
+    @ApiModelProperty(name = "has_submit", value = "是否已经入库")
+    private String hasSubmit;
+
 }

+ 7 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseEntryProductDO.java

@@ -81,4 +81,11 @@ public class WarehouseEntryProductDO implements Serializable {
     @ApiModelProperty(name = "return_num", value = "退货数量")
     private Integer returnNum;
 
+    @ApiModelProperty(name = "商品")
+    @TableField(exist = false)
+    private GoodsDO goodsDO ;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    @TableField(exist = false)
+    private Integer usableStock;
 }

+ 8 - 2
module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutDO.java

@@ -33,7 +33,7 @@ public class WarehouseOutDO extends BaseDO {
 
     @TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(hidden = true)
-    private String id;
+    private Long id;
 
     @ApiModelProperty(name = "sn", value = "出库单编号")
     private String sn;
@@ -75,7 +75,7 @@ public class WarehouseOutDO extends BaseDO {
 
     @ApiModelProperty(name = "order_id_list", value = "订单id集合")
     @TableField(typeHandler = LongListTypeHandler.class)
-    private List<String> orderIdList;
+    private List<Long> orderIdList;
 
     @ApiModelProperty(name = "order_sn_list", value = "订单编号集合")
     @TableField(typeHandler = StringListTypeHandler.class)
@@ -126,4 +126,10 @@ public class WarehouseOutDO extends BaseDO {
     @ApiModelProperty(name = "notes", value = "备注")
     private String notes;
 
+    @ApiModelProperty(name = "has_submit", value = "是否已经入库")
+    private String hasSubmit;
+
+    @ApiModelProperty(name = "type", value = "出库类型")
+    private String type;
+
 }

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

@@ -23,10 +23,10 @@ public class WarehouseOutItemDO implements Serializable {
 
     @TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(hidden = true)
-    private String id;
+    private Long id;
 
     @ApiModelProperty(name = "warehouse_out_id", value = "出库单id")
-    private String warehouseOutId;
+    private Long warehouseOutId;
 
     @ApiModelProperty(name = "warehouse_entry_id", value = "入库单id")
     private Long warehouseEntryId;
@@ -44,7 +44,7 @@ public class WarehouseOutItemDO implements Serializable {
     private String warehouseEntryBatchSn;
 
     @ApiModelProperty(name = "order_id", value = "订单id")
-    private String orderId;
+    private Long orderId;
 
     @ApiModelProperty(name = "order_sn", value = "订单编号")
     private String orderSn;

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

@@ -34,7 +34,7 @@ public class GoodsDTO {
     private String sn;
 
     @ApiModelProperty(name = "snCode", value = "商品序列号")
-    @NotBlank(message = "商品序列号不能为空")
+//    @NotBlank(message = "商品序列号不能为空")
     private String snCode;
 
 
@@ -100,5 +100,9 @@ public class GoodsDTO {
     @NotEmpty(message = "产品列表不能为空")
     @Valid
     private List<ProductDTO> productList;
+
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    @NotEmpty(message = "出租商品  售卖商品")
+    private String hireOrSail;
 }
 

+ 22 - 115
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderDTO.java

@@ -13,10 +13,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.Valid;
-import javax.validation.constraints.AssertFalse;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
+import javax.validation.constraints.*;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -38,34 +36,25 @@ public class OrderDTO {
     @NotNull(message = "订单类型不能为空")
     private OrderTypeEnum type;
 
-    @ApiModelProperty(name = "member_id", value = "会员id/企业id")
-    @NotNull(message = "会员id/企业id不能为空")
-    private Long memberId;
 
     @ApiModelProperty(name = "order_time", value = "下单时间")
     @NotNull(message = "下单时间不能为空")
     private Long orderTime;
 
+    @ApiModelProperty(name = "pay_type", value = "支付方式")
+//    @NotNull(message = "支付方式不能为空")
+    private String payType;
 
-    @ApiModelProperty(name = "order_type", value = "支付方式")
-    @NotNull(message = "支付方式不能为空")
-    private String orderType;
-
-
-    @ApiModelProperty(name = "payment_status", value = "支付状态")
-    @NotNull(message = "支付状态不能为空")
-    private OrderPaymentStatusEnum paymentStatus;
+    @ApiModelProperty(name = "marketing_id", value = "销售人员")
+    private Long marketingId;
 
-    @ApiModelProperty(name = "payment_time", value = "支付时间")
-    private Long paymentTime;
+    @ApiModelProperty(name = "member_id", value = "销售人员")
+    private Long memberId;
 
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
     @NotNull(message = "仓库id不能为空")
     private Long warehouseId;
 
-    @ApiModelProperty(name = "marketing_id", value = "销售经理id")
-    private Long marketingId;
-
     @ApiModelProperty(name = "attachment", value = "附件")
     private String attachment;
 
@@ -75,116 +64,34 @@ public class OrderDTO {
     @ApiModelProperty(name = "delivery_type", value = "配送方式")
     private OrderDeliveryType deliveryType;
 
-    @ApiModelProperty(name = "store_id", value = "自提门店id")
-    private Long storeId;
-
     @ApiModelProperty(name = "item_list", value = "订单项列表")
     @NotEmpty(message = "订单项不能为空")
     @Valid
     private List<OrderItemDTO> itemList;
 
-    @ApiModelProperty(name = "payment_list", value = "支付列表")
-    @NotEmpty(message = "支付信息不能为空")
-    @Valid
-    private List<OrderPaymentDTO> paymentList;
-
-    @ApiModelProperty(name = "total_price", value = "销售金额")
-    @NotNull(message = "销售金额不能为空")
-    @Min(value = 0, message = "销售金额不能小于0")
-    private Double totalPrice;
-
-    @ApiModelProperty(name = "discount_price", value = "优惠金额")
-    @NotNull(message = "优惠金额不能为空")
-    @Min(value = 0, message = "优惠金额不能小于0")
-    private Double discountPrice;
-
-    @ApiModelProperty(name = "tax_price", value = "税额")
-    @NotNull(message = "税额不能为空")
-    @Min(value = 0, message = "税额不能小于0")
-    private Double taxPrice;
 
     @ApiModelProperty(name = "pay_price", value = "应付金额")
     @NotNull(message = "应付金额不能为空")
     @Min(value = 0, message = "应付金额不能小于0")
     private Double payPrice;
 
-    @ApiModelProperty(name = "deposit_price", value = "定金金额")
-    @NotNull(message = "定金金额不能为空")
-    @Min(value = 0, message = "定金金额不能小于0")
-    private Double depositPrice;
-
-    // ============ 校验相关 ============
-
-    @JsonIgnore
-    @AssertFalse(message = "门店id不能为空")
-    public boolean isCheckStore() {
-        return deliveryType != null && deliveryType == OrderDeliveryType.self_pick && storeId == null;
-    }
-
-    @JsonIgnore
-    @AssertFalse(message = "定金金额不能大于应付金额")
-    public boolean isCheckDepositPrice() {
-        return depositPrice > payPrice;
-    }
+    @ApiModelProperty(name = "province_city_area_address", value = "支付方式")
+    @NotBlank(message = "地址不能为空")
+    private String  provinceCityAreaAddress;
 
-    @JsonIgnore
-    @AssertFalse(message = "支付时间不能为空")
-    public boolean isCheckPaymentTime() {
-        return paymentStatus == OrderPaymentStatusEnum.PAY && paymentTime == null;
-    }
+    @ApiModelProperty(name = "address", value = "支付方式")
+    @NotBlank(message = "地址不能为空")
+    private String  address;
 
-    @JsonIgnore
-    @AssertFalse(message = "配送方式不能为空")
-    public boolean isCheckDelivery() {
-        return type == OrderTypeEnum.TO_B && deliveryType == null;
-    }
+    @ApiModelProperty(name = "province_city_area", value = "支付方式")
+    @NotBlank(message = "地址不能为空")
+    private String  provinceCityArea;
 
+    @ApiModelProperty(name = "end_time", value = "开始时间")
+    private LocalDateTime endTime;
 
-    // ============ 非前端传参 ============
-
-    @JsonIgnore
-    @ApiModelProperty(value = "会员", hidden = true)
-    private MemberDO memberDO;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "企业", hidden = true)
-    private EnterpriseDO enterpriseDO;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "仓库", hidden = true)
-    private WarehouseDO warehouseDO;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "部门", hidden = true)
-    private DeptDO deptDO;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "销售经理", hidden = true)
-    private MarketingManagerDO marketingManagerDO;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "自提门店", hidden = true)
-    private StoreDO storeDO;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "产品", hidden = true)
-    private Map<Long, ProductDO> productMap;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "库存批次", hidden = true)
-    private Map<Long, WarehouseEntryBatchDO> batchMap;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "收款账户", hidden = true)
-    private Map<String, CollectingAccountDO> collectingAccountMap;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "商品分类", hidden = true)
-    private Map<Long, CategoryDO> categoryMap;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "品牌", hidden = true)
-    private Map<String, BrandDO> brandMap;
+    @ApiModelProperty(name = "start_time", value = "结束时间")
+    private LocalDateTime startTime;
 
 }
 

+ 5 - 37
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java

@@ -1,5 +1,6 @@
 package com.hys.app.model.erp.dto;
 
+import com.hys.app.model.erp.vo.GoodsVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -17,49 +18,16 @@ import javax.validation.constraints.NotNull;
 @ApiModel(value = "订单明细 新增|编辑 请求参数")
 public class OrderItemDTO {
 
-    @ApiModelProperty(name = "product_id", value = "产品id(订单为ToB时传递)")
-    private String productId;
-
-    @ApiModelProperty(name = "batch_id", value = "库存批次id(订单为ToC时传递)")
-    private String batchId;
+    @ApiModelProperty(name = "goods_id", value = "商品id")
+    @NotNull(message = "商品id不能为空")
+    private Long goodsId;
 
     @ApiModelProperty(name = "num", value = "数量")
     @NotNull(message = "数量不能为空")
     @Min(value = 1, message = "数量必须大于0")
     private Integer num;
 
-    @ApiModelProperty(name = "price", value = "销售价(单)")
-    @NotNull(message = "销售价(单)不能为空")
-    @Min(value = 0, message = "销售价(单)不能小于0")
-    private Double price;
-
-    @ApiModelProperty(name = "total_price", value = "销售价(总)")
-    @NotNull(message = "销售价(总)不能为空")
-    @Min(value = 0, message = "销售价(总)不能小于0")
-    private Double totalPrice;
-
-    @ApiModelProperty(name = "tax_rate", value = "税率")
-    @NotNull(message = "税率不能为空")
-    @Min(value = 0, message = "税率不能小于0")
-    private Double taxRate;
-
-    @ApiModelProperty(name = "tax_price", value = "税额(总)")
-    @NotNull(message = "税额(总)不能为空")
-    @Min(value = 0, message = "税额(总)不能小于0")
-    private Double taxPrice;
-
-    @ApiModelProperty(name = "pay_price", value = "应付金额(总)")
-    @NotNull(message = "应付金额(总)不能为空")
-    @Min(value = 0, message = "应付金额(总)不能小于0")
-    private Double payPrice;
-
-    @ApiModelProperty(name = "discount_price", value = "优惠金额(总)")
-    @NotNull(message = "优惠金额不能为空")
-    @Min(value = 0, message = "优惠金额不能小于0")
-    private Double discountPrice;
-
-    @ApiModelProperty(name = "remark", value = "备注")
-    private String remark;
+    private GoodsVO goodsVO;
 
 }
 

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

@@ -7,6 +7,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import java.time.LocalDateTime;
+
 /**
  * 订单分页查询参数
  *
@@ -28,9 +30,6 @@ public class OrderQueryParams extends BaseQueryParam {
     @ApiModelProperty(name = "status", value = "订单状态")
     private String status;
 
-    @ApiModelProperty(name = "payment_status", value = "支付状态")
-    private String paymentStatus;
-
     @ApiModelProperty(name = "member_id", value = "会员id")
     private Long memberId;
     
@@ -88,5 +87,11 @@ public class OrderQueryParams extends BaseQueryParam {
     @ApiModelProperty(name = "type", value = "订单类型")
     private String type;
 
+//    @ApiModelProperty(name = "end_time", value = "开始时间")
+//    private LocalDateTime endTime;
+//
+//    @ApiModelProperty(name = "start_time", value = "结束时间")
+//    private LocalDateTime startTime;
+
 }
 

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

@@ -57,7 +57,7 @@ public class OrderReturnDTO {
     private OrderDO orderDO;
 
     @JsonIgnore
-    private Map<String, WarehouseOutItemDO> warehouseOutItemMap;
+    private Map<Long, WarehouseOutItemDO> warehouseOutItemMap;
 
     @JsonIgnore
     private Map<Long, OrderItemDO> orderItemMap;

+ 6 - 2
module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -42,12 +43,12 @@ public class ProductDTO {
     private Double retailPrice;
 
     @ApiModelProperty(name = "tax_rate", value = "税率")
-    @NotNull(message = "税率不能为空")
+//    @NotNull(message = "税率不能为空")
     @Min(value = 0, message = "税率不能小于0")
     private Double taxRate;
 
     @ApiModelProperty(name = "mkt_price", value = "市场价格(暂时保留)", hidden = true)
-    @Min(value = 0, message = "市场价格不能小于0")
+//    @Min(value = 0, message = "市场价格不能小于0")
     private Double mktPrice;
 
     @ApiModelProperty(name = "weight", value = "重量")
@@ -66,5 +67,8 @@ public class ProductDTO {
     @ApiModelProperty(name = "spec_list", value = "规格列表")
     private ProductDO.SpecList specList;
 
+    @ApiModelProperty(name = "day_price", value = "日租金")
+    private BigDecimal dayPrice;
+
 }
 

+ 30 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/WareQueryGoodParams.java

@@ -0,0 +1,30 @@
+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;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 入库单查询参数
+ *
+ * @author 张崧
+ * @since 2023-12-05 11:25:07
+ */
+@Data
+public class WareQueryGoodParams {
+
+    @ApiModelProperty( value = "仓库ID")
+    @NotNull
+    private Long warehouseId;
+
+    @ApiModelProperty( value = "商品ID")
+    @NotEmpty
+    private List<Long> goodIds;
+}
+

+ 5 - 56
module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseEntryDTO.java

@@ -31,14 +31,6 @@ public class WarehouseEntryDTO {
     @ApiModelProperty(hidden = true)
     private Long id;
 
-//    @ApiModelProperty(name = "entry_time", value = "入库时间")
-//    private Long entryTime;
-    
-//    @ApiModelProperty(name = "supplier_id", value = "供应商id")
-//    private Long supplierId;
-    
-//    @ApiModelProperty(name = "dept_id", value = "部门id")
-//    private Long deptId;
     @ApiModelProperty(name = "type", value = "入库类型")
     private String type;
 
@@ -46,33 +38,12 @@ public class WarehouseEntryDTO {
     @ApiModelProperty(name = "memo", value = "订单备注")
     private String memo;
 
-    @ApiModelProperty(name = "order_id", value = "入库订单id") 
+    @ApiModelProperty(name = "order_id", value = "入库订单id")
     private Long orderId;
-//
-//    @ApiModelProperty(name = "area_id", value = "所在区域")
-//    private Long areaId;
-//
+
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
     @NotNull(message = "仓库不能为空")
     private Long warehouseId;
-//
-//    @ApiModelProperty(name = "contract_id", value = "合同id")
-//    private Long contractId;
-//
-//    @ApiModelProperty(name = "handled_by_id", value = "经手人id")
-//    private Long handledById;
-    
-//    @ApiModelProperty(name = "plate_number", value = "车牌号")
-//    private String plateNumber;
-    
-//    @ApiModelProperty(name = "purchase_plan_id", value = "采购计划id")
-//    private Long purchasePlanId;
-    
-//    @ApiModelProperty(name = "delivery_number", value = "送货单号")
-//    private String deliveryNumber;
-////
-//    @ApiModelProperty(name = "contract_attachment", value = "合同附件")
-//    private String contractAttachment;
 
     @ApiModelProperty(name = "product_list", value = "商品明细列表")
     @NotEmpty(message = "商品明细列表不能为空")
@@ -80,31 +51,9 @@ public class WarehouseEntryDTO {
     private List<WarehouseEntryProductDTO> productList;
 
 
-//    @JsonIgnore
-//    @ApiModelProperty(hidden = true)
-//    private DeptDO deptDO;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private WarehouseDO warehouseDO;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private SupplierDO supplierDO;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private ProcurementPlan procurementPlan;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private ProcurementContract contract;
-
-    @ApiModelProperty(name = "handled_by", value = "平台管理员")
-    private AdminUserVO1 handledBy;
-
-    @ApiModelProperty(name = "contractProduct_list", value = "采购合同产品")
-    private List<ProcurementContractProduct> contractProductList;
+    @ApiModelProperty(value = "操作類型")
+    @NotBlank(message = "操作类型不能为空,save保存submit入库")
+    private String saveOrSubmit;
 
 }
 

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

@@ -25,10 +25,10 @@ public class WarehouseEntryProductDTO {
     private Integer num;
 
     @ApiModelProperty(name = "price", value = "单价")
-    @NotNull(message = "本次入库单价不能为空")
     private Double price;
 
     @ApiModelProperty(name = "tax_rate", value = "税率")
     private Double taxRate;
+
 }
 

+ 17 - 53
module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseOutDTO.java

@@ -10,6 +10,7 @@ import lombok.Data;
 
 import javax.validation.Valid;
 import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -25,7 +26,7 @@ import java.util.Map;
 public class WarehouseOutDTO {
 
     @ApiModelProperty(hidden = true)
-    private String id;
+    private Long id;
 
     @ApiModelProperty(name = "out_time", value = "出库日期")
     @NotNull(message = "出库日期不能为空")
@@ -34,69 +35,32 @@ public class WarehouseOutDTO {
     @ApiModelProperty(name = "warehouse_consignee_id", value = "仓库提货人id")
     private Long warehouseConsigneeId;
 
-    @ApiModelProperty(name = "order_list", value = "订单列表")
-    @NotEmpty(message = "订单列表不能为空")
-    @Valid
-    private List<Order> orderList;
-
     @ApiModelProperty(name = "notes", value = "备注")
     private String notes;
 
-    // ========= 非前端传参 =========
-
-    @JsonIgnore
-    @ApiModelProperty(value = "订单", hidden = true)
-    private Map<String, OrderDO> orderMap;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "订单项", hidden = true)
-    private Map<String, OrderItemDO> orderItemMap;
-
-    @JsonIgnore
-    @ApiModelProperty(value = "批次", hidden = true)
-    private Map<String, WarehouseEntryBatchDO> batchMap;
+    @ApiModelProperty(name = "type", value = "出库类型")
+    private String type;
 
-    @JsonIgnore
-    @ApiModelProperty(value = "仓库提货人", hidden = true)
-    private AdminUser warehouseConsignee;
+    @ApiModelProperty(value = "操作類型")
+    @NotBlank(message = "操作类型不能为空,save保存submit入库")
+    private String saveOrSubmit;
 
-    // ========= 内部类 =========
-
-    @Data
-    public static class Order {
-
-        @ApiModelProperty(name = "order_id", value = "订单id")
-        private String orderId;
-
-        @ApiModelProperty(name = "order_item_list", value = "订单项列表")
-        @NotEmpty(message = "订单项不能为空")
-        @Valid
-        private List<OrderItem> orderItemList;
-    }
-
-    @Data
-    public static class OrderItem {
+    @ApiModelProperty(name = "product_list", value = "商品明细列表")
+    @NotEmpty(message = "商品明细列表不能为空")
+    @Valid
+    private List<WarehouseOutProductDTO> productList;
 
-        @ApiModelProperty(name = "order_item_id", value = "订单项id")
-        private String orderItemId;
+    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
+    @NotNull(message = "仓库不能为空")
+    private Long warehouseId;
 
-        @ApiModelProperty(name = "batch_list", value = "批次列表")
-        @Valid
-        private List<StockBatch> batchList;
-    }
 
-    @Data
-    public static class StockBatch {
+    @ApiModelProperty(value = "操作類型")
+    @NotBlank(message = "配送地址")
+    private String address;
 
-        @ApiModelProperty(name = "batch_id", value = "批次id")
-        private String batchId;
 
-        @ApiModelProperty(name = "out_num", value = "要出库的数量")
-        @NotNull(message = "要出库的数量不能为空")
-        @Min(value = 1, message = "要出库的数量必须大于0")
-        private Integer outNum;
 
-    }
 
 }
 

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

@@ -17,7 +17,7 @@ public class WarehouseOutPreviewDTO {
 
     @ApiModelProperty(name = "order_id_list", value = "订单id列表")
     @NotEmpty(message = "订单id不能为空")
-    private List<String> orderIdList;
+    private List<Long> orderIdList;
 
 }
 

+ 34 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseOutProductDTO.java

@@ -0,0 +1,34 @@
+package com.hys.app.model.erp.dto;
+
+import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.erp.vo.GoodsVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 入库单商品明细新增/编辑DTO
+ *
+ * @author 张崧
+ * @since 2023-12-05 15:30:10
+ */
+@Data
+public class WarehouseOutProductDTO {
+
+    @ApiModelProperty(name = "good_id", value = "商品id")
+    @NotNull(message = "商品id不能为空")
+    private Long goodsId;
+
+    @ApiModelProperty(name = "good_Name", value = "商品名称")
+    private Long goodName;
+
+    @ApiModelProperty(name = "out_num", value = "出库数量")
+    @NotNull(message = "出库数量不能为空")
+    @Min(value = 1, message = "出库数量最小为1")
+    private Integer outNum;
+
+    private GoodsVO goodsVO;
+}
+

+ 2 - 2
module-erp/src/main/java/com/hys/app/model/erp/enums/OrderTypeEnum.java

@@ -16,11 +16,11 @@ public enum OrderTypeEnum {
     /**
      * 零售订单
      */
-    TO_C("零售订单"),
+    TO_C("商品租赁"),
     /**
      * 企业销售订单
      */
-    TO_B("企业销售订单");
+    TO_B("商品售卖");
 
     private final String text;
 

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

@@ -0,0 +1,40 @@
+package com.hys.app.model.erp.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 订单状态枚举
+ *
+ * @author 张崧
+ * @since 2024-01-25
+ */
+@Getter
+public enum SaleOrderStatusEnum {
+
+    TO_BE_COMMIT("to_be_commit", "待确认"),
+    TO_BE_SEND("to_be_send", "待发货"),
+    SENDING("sending", "配送中"),
+    TO_BE_SINGE("to_be_singe", "待签收"),
+    TO_BE_AFTER_SALE("to_be_after_sale", "待售后"),
+    END("end", "待售后"),
+    CANCEL("cancel", "关闭");
+
+    private final String name;
+    private final String age;
+
+    // 枚举的构造函数总是私有的
+    private SaleOrderStatusEnum(String name, String age) {
+        this.name = name;
+        this.age = age;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getAge() {
+        return age;
+    }
+}

+ 7 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/GoodsVO.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.NotEmpty;
 import java.util.List;
 
 /**
@@ -42,5 +43,11 @@ public class GoodsVO extends GoodsDO {
     @ApiModelProperty(name = "label_names", value = "标签名称集合")
     private String labelNames;
 
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    private String hireOrSail;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    private Integer usableStock;
+
 }
 

+ 0 - 24
module-erp/src/main/java/com/hys/app/model/erp/vo/OrderAllowable.java

@@ -38,30 +38,6 @@ public class OrderAllowable {
     @ApiModelProperty(name = "payment", value = "是否允许支付")
     private Boolean payment;
 
-    public OrderAllowable(OrderDO orderDO) {
-        OrderStatusEnum status = orderDO.getStatus();
-        if (status == null) {
-            return;
-        }
-
-        this.setEdit(status == OrderStatusEnum.WAIT_SUBMIT ||
-                status == OrderStatusEnum.AUDIT_REJECT);
-
-        this.setSubmit(status == OrderStatusEnum.WAIT_SUBMIT ||
-                status == OrderStatusEnum.AUDIT_REJECT);
-
-        this.setWithdraw(status == OrderStatusEnum.WAIT_AUDIT);
-
-        this.setAudit(status == OrderStatusEnum.WAIT_AUDIT);
-
-        this.setDelete(status == OrderStatusEnum.WAIT_SUBMIT ||
-                status == OrderStatusEnum.WAIT_AUDIT ||
-                status == OrderStatusEnum.AUDIT_REJECT);
-
-        this.setWarehouseOut(status == OrderStatusEnum.WAIT_WAREHOUSE_OUT);
-
-        this.setPayment(orderDO.getPaymentStatus() == OrderPaymentStatusEnum.NOT_PAY);
-    }
 
 }
 

+ 13 - 2
module-erp/src/main/java/com/hys/app/model/erp/vo/OrderItemVO.java

@@ -7,6 +7,9 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
 /**
  * 订单明细详情
  *
@@ -19,7 +22,15 @@ import lombok.ToString;
 @ApiModel(value = "订单明细详情")
 public class OrderItemVO extends OrderItemDO {
 
-    @ApiModelProperty(name = "stock_num", value = "库存数量")
-    private Integer stockNum;
+    @ApiModelProperty(name = "goods_id", value = "商品id")
+    @NotNull(message = "商品id不能为空")
+    private Long goodsId;
+
+    @ApiModelProperty(name = "out_num", value = "出库数量")
+    @NotNull(message = "出库数量不能为空")
+    @Min(value = 1, message = "出库数量最小为1")
+    private Integer outNum;
+
+    private GoodsVO goodsVO;
 }
 

+ 81 - 14
module-erp/src/main/java/com/hys/app/model/erp/vo/OrderVO.java

@@ -1,14 +1,25 @@
 package com.hys.app.model.erp.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.hys.app.model.erp.dos.OrderDO;
 import com.hys.app.model.erp.dos.OrderPaymentDO;
 import com.hys.app.model.erp.dos.StoreDO;
+import com.hys.app.model.erp.dto.OrderItemDTO;
+import com.hys.app.model.erp.enums.OrderDeliveryType;
+import com.hys.app.model.erp.enums.OrderTypeEnum;
+import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -23,26 +34,82 @@ import java.util.List;
 @ApiModel(value = "订单详情")
 public class OrderVO extends OrderDO {
 
-    @ApiModelProperty(name = "item_list", value = "订单项集合")
-    private List<OrderItemVO> itemList;
 
-    @ApiModelProperty(name = "payment_list", value = "支付列表集合")
-    private List<OrderPaymentDO> paymentList;
 
-    @ApiModelProperty(name = "store", value = "门店信息")
-    private StoreDO store;
+    @ApiModelProperty(hidden = true)
+    private Long id;
 
-    @ApiModelProperty(name = "allowable", value = "允许的操作")
-    private OrderAllowable allowable;
+    @ApiModelProperty(name = "type", value = "订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private OrderTypeEnum type;
 
-    @ApiModelProperty(name = "status_text", value = "订单状态(中文描述)")
-    private String statusText;
 
-    @ApiModelProperty(name = "delivery_type_text", value = "配送类型(中文描述)")
-    private String deliveryTypeText;
+    @ApiModelProperty(name = "order_time", value = "下单时间")
+    @NotNull(message = "下单时间不能为空")
+    private Long orderTime;
+
+
+    @ApiModelProperty(name = "pay_type", value = "支付方式")
+//    @NotNull(message = "支付方式不能为空")
+    private String payType;
+
+    @ApiModelProperty(name = "marketing_id", value = "销售人员")
+    private Long marketingId;
+
+    @ApiModelProperty(name = "member_id", value = "销售人员")
+    private Long memberId;
+
+    @ApiModelProperty(name = "payment_time", value = "支付时间")
+    private Long paymentTime;
+
+    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
+    @NotNull(message = "仓库id不能为空")
+    private Long warehouseId;
+
+    @ApiModelProperty(name = "attachment", value = "附件")
+    private String attachment;
+
+    @ApiModelProperty(name = "remark", value = "备注")
+    private String remark;
+
+    @ApiModelProperty(name = "delivery_type", value = "配送方式")
+    private OrderDeliveryType deliveryType;
+
+    @ApiModelProperty(name = "item_list", value = "订单项列表")
+    @NotEmpty(message = "订单项不能为空")
+    @Valid
+    private List<OrderItemDTO> itemList;
+
+
+    @ApiModelProperty(name = "pay_price", value = "应付金额")
+    @NotNull(message = "应付金额不能为空")
+    @Min(value = 0, message = "应付金额不能小于0")
+    private Double payPrice;
+
+    @ApiModelProperty(name = "province_city_area_address", value = "支付方式")
+    @NotBlank(message = "地址不能为空")
+    private String  provinceCityAreaAddress;
+
+    @ApiModelProperty(name = "address", value = "支付方式")
+    @NotBlank(message = "地址不能为空")
+    private String  address;
+
+    @ApiModelProperty(name = "province_city_area", value = "支付方式")
+    @NotBlank(message = "地址不能为空")
+    private String  provinceCityArea;
+
+    @ApiModelProperty(name = "status", value = "订单状态")
+    private SaleOrderStatusEnum status;
+
+//    @ApiModelProperty(name = "end_time", value = "开始时间")
+//    @NotNull(message = "借用时间不能为空")
+//    private LocalDateTime  endTime;
+//
+//    @ApiModelProperty(name = "start_time", value = "结束时间")
+//    @NotNull(message = "借用时间不能为空")
+//    private LocalDateTime startTime;
+
 
-    @ApiModelProperty(name = "payment_status_text", value = "支付状态(中文描述)")
-    private String paymentStatusText;
 
 }
 

+ 3 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/ProductStockV1.java

@@ -37,6 +37,9 @@ public class ProductStockV1  {
     @ApiModelProperty(name = "goods_sn_code", value = "商品序列号")
     private String goodsSnCode;
 
+    @ApiModelProperty(name = "sn", value = "商品编号")
+    private String sn;
+
     @ApiModelProperty(name = "goods_style", value = "商品规格型号")
     private String goodsStyle;
 

+ 52 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/WareOutGoodsVO.java

@@ -0,0 +1,52 @@
+package com.hys.app.model.erp.vo;
+
+import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.goods.dos.GoodsGalleryDO;
+import com.hys.app.model.goods.vo.GoodsParamsGroupVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * 商品VO
+ *
+ * @author 张崧
+ * 2023-12-26 15:56:58
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class WareOutGoodsVO extends GoodsDO {
+
+    @ApiModelProperty(name = "category_name", value = "分类名称")
+    private String categoryName;
+
+    @ApiModelProperty(name = "category_name", value = "分类id集合")
+    private Long[] categoryIds;
+
+    @ApiModelProperty(name = "brand_name", value = "品牌名称")
+    private String brandName;
+
+    @ApiModelProperty(name = "product_list", value = "产品列表")
+    private List<ProductVO> productList;
+
+    @ApiModelProperty(name = "image_list", value = "商品相册")
+    private List<GoodsGalleryDO> imageList;
+
+    @ApiModelProperty(name = "params_list", value = "商品参数")
+    private List<GoodsParamsGroupVO> paramsList;
+
+    @ApiModelProperty(name = "label_names", value = "标签名称集合")
+    private String labelNames;
+
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    private String hireOrSail;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    private Integer usableStock;
+
+}
+

+ 19 - 65
module-erp/src/main/java/com/hys/app/model/erp/vo/WarehouseOutVO.java

@@ -2,11 +2,16 @@ package com.hys.app.model.erp.vo;
 
 import com.hys.app.model.erp.dos.WarehouseOutDO;
 import com.hys.app.model.erp.dos.WarehouseOutItemDO;
+import com.hys.app.model.erp.dto.WarehouseOutProductDTO;
 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;
 
 /**
@@ -20,80 +25,29 @@ import java.util.List;
 @ToString(callSuper = true)
 public class WarehouseOutVO extends WarehouseOutDO {
 
-    @ApiModelProperty(name = "allowable", value = "允许的操作")
-    private WarehouseOutAllowable allowable;
+    @ApiModelProperty(hidden = true)
+    private Long id;
 
-    @ApiModelProperty(name = "item_list", value = "出库明细列表")
-    private List<WarehouseOutItemDO> itemList;
+    @ApiModelProperty(name = "out_time", value = "出库日期")
+    private Long outTime;
 
-    @ApiModelProperty(name = "order_list", value = "订单列表")
-    private List<Order> orderList;
+    @ApiModelProperty(name = "warehouse_consignee_id", value = "仓库提货人id")
+    private Long warehouseConsigneeId;
 
     @ApiModelProperty(name = "notes", value = "备注")
     private String notes;
 
+    @ApiModelProperty(name = "type", value = "出库类型")
+    private String type;
 
-    @Data
-    public static class Order {
+    @ApiModelProperty(value = "操作類型")
+    private String saveOrSubmit;
 
-        @ApiModelProperty(name = "order_id", value = "订单id")
-        private String orderId;
+    @ApiModelProperty(name = "product_list", value = "商品明细列表")
+    private List<WarehouseOutProductDTO> productList;
 
-        @ApiModelProperty(name = "order_sn", value = "订单编号")
-        private String orderSn;
-
-        @ApiModelProperty(name = "order_item_list", value = "订单项列表")
-        private List<OrderItem> orderItemList;
-
-    }
-
-    @Data
-    public static class OrderItem {
-
-        @ApiModelProperty(name = "order_item_id", value = "订单项id")
-        private Long orderItemId;
-
-        @ApiModelProperty(name = "product_id", value = "产品id")
-        private Long productId;
-
-        @ApiModelProperty(name = "product_sn", value = "产品编号")
-        private String productSn;
-
-        @ApiModelProperty(name = "product_name", value = "产品名称")
-        private String productName;
-
-        @ApiModelProperty(name = "product_specification", value = "产品规格")
-        private String productSpecification;
-
-        @ApiModelProperty(name = "product_unit", value = "产品单位")
-        private String productUnit;
-
-        @ApiModelProperty(name = "num", value = "销售数量")
-        private Integer num;
-
-        @ApiModelProperty(name = "batch_list", value = "批次列表")
-        private List<StockBatch> batchList;
-
-    }
-
-    @Data
-    public static class StockBatch {
-        @ApiModelProperty(name = "warehouse_entry_sn", value = "入库单编号")
-        private String warehouseEntrySn;
-
-        @ApiModelProperty(name = "id", value = "入库批次id")
-        private Long batchId;
-
-        @ApiModelProperty(name = "sn", value = "入库批次号")
-        private String batchSn;
-
-        @ApiModelProperty(name = "remain_num", value = "剩余库存数量")
-        private Integer remainNum;
-
-        @ApiModelProperty(name = "out_num", value = "出库数量")
-        private Integer outNum;
-
-    }
+    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
+    private Long warehouseId;
 
 }
 

+ 1 - 1
module-erp/src/main/java/com/hys/app/model/goods/dos/BrandDO.java

@@ -58,7 +58,7 @@ public class BrandDO implements Serializable {
 
 
     @NotEmpty(message = "品牌图标不能为空")
-    @ApiModelProperty(value = "品牌图标", required = true)
+//    @ApiModelProperty(value = "品牌图标", required = true)
     private String logo;
     /**
      * 是否删除,0删除1未删除

+ 7 - 0
module-erp/src/main/java/com/hys/app/model/system/vo/UploaderVO.java

@@ -8,10 +8,13 @@ import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.springframework.core.io.support.PropertiesLoaderUtils;
 
 import javax.validation.constraints.NotEmpty;
+import java.io.IOException;
 import java.io.Serializable;
 import java.util.List;
+import java.util.Properties;
 
 /**
  * 存储方案实体
@@ -129,5 +132,9 @@ public class UploaderVO implements Serializable {
         return serialVersionUID;
     }
 
+    public static void main(String[] args) throws IOException {
+        Properties props = new Properties();
+        props= PropertiesLoaderUtils.loadAllProperties("erp.token-secret");
+    }
 
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/base/plugin/upload/OSSPlugin.java

@@ -181,7 +181,7 @@ public class OSSPlugin implements Uploader {
 			ossClient.putObject(request);
 			// 设置Object权限
 			boolean found = ossClient.doesObjectExist(bucketName, fileName);
-			if (found = true) {
+			if (found) {
 				ossClient.setObjectAcl(bucketName, fileName, CannedAccessControlList.PublicRead);
 			}
 			Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);

+ 3 - 3
module-erp/src/main/java/com/hys/app/service/erp/OrderItemManager.java

@@ -39,7 +39,7 @@ public interface OrderItemManager extends BaseService<OrderItemDO> {
      *
      * @param orderId
      */
-    void deleteByOrderId(String orderId);
+    void deleteByOrderId(Long orderId);
 
     /**
      * 根据订单id查询
@@ -47,7 +47,7 @@ public interface OrderItemManager extends BaseService<OrderItemDO> {
      * @param orderIds
      * @return
      */
-    List<OrderItemDO> listByOrderIds(Collection<String> orderIds);
+    List<OrderItemDO> listByOrderIds(Collection<Long> orderIds);
 
     /**
      * 更新订单项的已退货数量
@@ -56,6 +56,6 @@ public interface OrderItemManager extends BaseService<OrderItemDO> {
      */
     void increaseReturnNum(Long orderItemId, Integer returnNum);
 
-    <K> Map<String, OrderItemDO> listAndConvertMap(List<String> orderItemIds, SFunction<OrderItemDO,K> getId);
+    <K> Map<Long, OrderItemDO> listAndConvertMap(List<Long> orderItemIds, SFunction<OrderItemDO,K> getId);
 }
 

+ 10 - 34
module-erp/src/main/java/com/hys/app/service/erp/OrderManager.java

@@ -1,5 +1,6 @@
 package com.hys.app.service.erp;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.dos.OrderDO;
@@ -46,29 +47,17 @@ public interface OrderManager extends BaseService<OrderDO> {
      * @param id 主键
      * @return 详情数据
      */
-    OrderVO getDetail(String id);
+    OrderVO getDetail(Long id);
 
     /**
      * 删除
      *
-     * @param ids 主键集合
+     * @param id 主键集合
      */
-    void delete(List<String> ids);
+    void delete(Long id);
+
 
-    /**
-     * 订单出库
-     *
-     * @param ids 订单id
-     * @param warehouseOutId 出库单id
-     */
-    void warehouseOut(List<String> ids, String warehouseOutId);
 
-    /**
-     * 订单改为未出库
-     *
-     * @param warehouseOutIds 出库单id
-     */
-    void warehouseOutDelete(List<String> warehouseOutIds);
 
     /**
      * 订单发货
@@ -80,30 +69,17 @@ public interface OrderManager extends BaseService<OrderDO> {
     /**
      * 提交
      *
-     * @param ids 订单id
+     * @param id 订单id
      */
-    void submit(List<String> ids);
+    void submit(Long id);
 
-    /**
-     * 撤销提交
-     *
-     * @param ids 订单id
-     */
-    void withdraw(List<String> ids);
 
     /**
-     * 审核
+     * 已发货列表
      *
-     * @param ids    订单id
-     * @param isPass 是否通过
-     * @param remark 审核备注
+     * @param queryParams
      */
-    void audit(List<Long> ids, Boolean isPass, String remark);
+    WebPage<OrderVO> hasSendOrder(OrderQueryParams queryParams);
 
-    /**
-     * 订单标记为已支付
-     * @param ids 订单id
-     */
-    void payment(List<Long> ids);
 }
 

+ 2 - 2
module-erp/src/main/java/com/hys/app/service/erp/OrderPaymentManager.java

@@ -43,13 +43,13 @@ public interface OrderPaymentManager extends BaseService<OrderPaymentDO> {
      *
      * @param orderId
      */
-    void deleteByOrderId(String orderId);
+    void deleteByOrderId(Long orderId);
 
     /**
      * 根据订单id查询
      * @param orderId
      * @return
      */
-    List<OrderPaymentDO> listByOrderId(String orderId);
+    List<OrderPaymentDO> listByOrderId(Long orderId);
 }
 

+ 3 - 3
module-erp/src/main/java/com/hys/app/service/erp/WarehouseEntryManager.java

@@ -25,7 +25,7 @@ public interface WarehouseEntryManager extends BaseService<WarehouseEntryDO> {
      * @param queryParams 查询条件
      * @return 分页数据
      */
-    WebPage<WarehouseEntryVO> list(WarehouseEntryQueryParams queryParams);
+    WebPage<WarehouseEntryDO> list(WarehouseEntryQueryParams queryParams);
 
     /**
      * 添加
@@ -52,9 +52,9 @@ public interface WarehouseEntryManager extends BaseService<WarehouseEntryDO> {
     /**
      * 删除
      *
-     * @param ids
+     * @param id
      */
-    void delete(List<Long> ids);
+    void delete(Long id);
 
     /**
      * 提交入库单

+ 8 - 0
module-erp/src/main/java/com/hys/app/service/erp/WarehouseEntryProductManager.java

@@ -3,9 +3,11 @@ package com.hys.app.service.erp;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.dos.WarehouseEntryProductDO;
+import com.hys.app.model.erp.dto.WareQueryGoodParams;
 import com.hys.app.model.erp.dto.WarehouseEntryProductDTO;
 import com.hys.app.model.erp.dto.WarehouseEntryProductQueryParams;
 import com.hys.app.model.erp.dto.WarehouseInQueryParams;
+import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.WarehouseEntryItemV1;
 import com.hys.app.model.erp.vo.WarehouseEntryProductVO;
 import org.apache.ibatis.annotations.Param;
@@ -95,5 +97,11 @@ public interface WarehouseEntryProductManager extends BaseService<WarehouseEntry
      * @param returnNum
      */
     void updateReturnNum(String id, Integer returnNum);
+
+    /**
+     * 查找这个商品在这个仓库的库存
+     * @return  所欲带有库存的商品数据集合
+     */
+    List<GoodsVO>  getStockByWarehouseGood(WareQueryGoodParams params);
 }
 

+ 2 - 2
module-erp/src/main/java/com/hys/app/service/erp/WarehouseOutItemManager.java

@@ -43,13 +43,13 @@ public interface WarehouseOutItemManager extends BaseService<WarehouseOutItemDO>
      *
      * @param warehouseOutIds
      */
-    void deleteByWarehouseOutId(List<String> warehouseOutIds);
+    void deleteByWarehouseOutId(List<Long> warehouseOutIds);
 
     /**
      * 更新出库单项的已退货数量
      * @param warehouseOutItemId
      * @param returnNum
      */
-    void increaseReturnNum(String warehouseOutItemId, Integer returnNum);
+    void increaseReturnNum(Long warehouseOutItemId, Integer returnNum);
 }
 

+ 18 - 2
module-erp/src/main/java/com/hys/app/service/erp/WarehouseOutManager.java

@@ -1,11 +1,15 @@
 package com.hys.app.service.erp;
 
+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.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.dos.WarehouseOutDO;
 import com.hys.app.model.erp.dto.*;
 import com.hys.app.model.erp.enums.WarehouseOutStatusEnum;
+import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.WarehouseOutVO;
+import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -50,9 +54,9 @@ public interface WarehouseOutManager extends BaseService<WarehouseOutDO> {
     /**
      * 删除
      *
-     * @param ids
+     * @param id
      */
-    void delete(List<String> ids);
+    void delete(Long id);
 
     /**
      * 出库前预览
@@ -101,5 +105,17 @@ public interface WarehouseOutManager extends BaseService<WarehouseOutDO> {
      * @param remark
      */
     void audit(List<Long> ids, WarehouseOutStatusEnum status, String remark);
+
+    /**
+     * 快递鸟下单获取快递单号
+     * @param preOrderModel
+     */
+    void kdShip(PreOrderModel preOrderModel);
+
+    /**
+     * 根据仓库找到所有库存大于0的商品
+     * @param warehouseId 仓库ID
+     */
+    Page<GoodsVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam);
 }
 

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

@@ -212,9 +212,9 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
 
         for (ProductDTO productDTO : productList) {
             if (goodsDTO.getSpec()) {
-                if (StringUtil.isEmpty(productDTO.getSn())) {
-                    throw new ServiceException("产品编号不能为空");
-                }
+//                if (StringUtil.isEmpty(productDTO.getSn())) {
+//                    throw new ServiceException("产品编号不能为空");
+//                }
                 if (CollUtil.isEmpty(productDTO.getSpecList())) {
                     throw new ServiceException("规格信息不能为空");
                 }

+ 3 - 3
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderItemManagerImpl.java

@@ -42,12 +42,12 @@ public class OrderItemManagerImpl extends BaseServiceImpl<OrderItemMapper, Order
     }
 
     @Override
-    public void deleteByOrderId(String orderId) {
+    public void deleteByOrderId(Long orderId) {
         lambdaUpdate().eq(OrderItemDO::getOrderId, orderId).remove();
     }
 
     @Override
-    public List<OrderItemDO> listByOrderIds(Collection<String> orderIds) {
+    public List<OrderItemDO> listByOrderIds(Collection<Long> orderIds) {
         return lambdaQuery().in(OrderItemDO::getOrderId, orderIds).list();
     }
 
@@ -57,7 +57,7 @@ public class OrderItemManagerImpl extends BaseServiceImpl<OrderItemMapper, Order
     }
 
     @Override
-    public <K> Map<String, OrderItemDO> listAndConvertMap(List<String> orderItemIds, SFunction<OrderItemDO, K> getId) {
+    public <K> Map<Long, OrderItemDO> listAndConvertMap(List<Long> orderItemIds, SFunction<OrderItemDO, K> getId) {
         return null;
     }
 

+ 75 - 373
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -1,37 +1,40 @@
 package com.hys.app.service.erp.impl;
 
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.converter.erp.OrderConverter;
-import com.hys.app.converter.erp.OrderItemConverter;
-import com.hys.app.converter.erp.OrderPaymentConverter;
 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.CurrencyUtil;
+import com.hys.app.framework.util.BeanUtils;
 import com.hys.app.framework.util.DateUtil;
 import com.hys.app.mapper.erp.OrderMapper;
-import com.hys.app.model.erp.dos.*;
-import com.hys.app.model.erp.dto.*;
-import com.hys.app.model.erp.enums.*;
-import com.hys.app.model.erp.vo.OrderAllowable;
+import com.hys.app.mapper.goods.GoodsMapper;
+import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.erp.dos.OrderDO;
+import com.hys.app.model.erp.dos.OrderItemDO;
+import com.hys.app.model.erp.dos.ProductStockDO;
+import com.hys.app.model.erp.dto.OrderDTO;
+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.NoBusinessTypeEnum;
+import com.hys.app.model.erp.enums.OrderStatusEnum;
+import com.hys.app.model.erp.enums.OrderTypeEnum;
+import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
+import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.OrderVO;
-import com.hys.app.model.goods.dos.CategoryDO;
-import com.hys.app.model.system.dos.DeptDO;
-import com.hys.app.service.erp.*;
-import com.hys.app.service.goods.BrandManager;
-import com.hys.app.service.goods.CategoryManager;
-import com.hys.app.service.system.DeptManager;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.hys.app.service.erp.NoGenerateManager;
+import com.hys.app.service.erp.OrderItemManager;
+import com.hys.app.service.erp.OrderManager;
+import com.hys.app.service.erp.ProductStockManager;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
 import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-
-import static com.hys.app.framework.util.CollectionUtils.convertList;
-import static com.hys.app.framework.util.CollectionUtils.convertMap;
+import java.util.stream.Collectors;
 
 /**
  * 订单业务层实现
@@ -40,64 +43,14 @@ import static com.hys.app.framework.util.CollectionUtils.convertMap;
  * 2024-01-24 15:58:31
  */
 @Service
+@AllArgsConstructor
 public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> implements OrderManager {
 
-    @Autowired
     private OrderConverter converter;
-
-    @Autowired
-    private OrderItemConverter itemConverter;
-
-    @Autowired
-    private MemberManager memberManager;
-
-    @Autowired
-    private WarehouseManager warehouseManager;
-
-    @Autowired
-    private MarketingManagerManager marketingManagerManager;
-
-    @Autowired
-    private StoreManager storeManager;
-
-    @Autowired
-    private ProductManager productManager;
-
-    @Autowired
-    private CollectingAccountManager collectingAccountManager;
-
-    @Autowired
-    private NoGenerateManager noGenerateManager;
-
-    @Autowired
+    private GoodsMapper goodsMapper;
     private OrderItemManager orderItemManager;
-
-    @Autowired
-    private OrderPaymentConverter orderPaymentConverter;
-
-    @Autowired
-    private OrderPaymentManager orderPaymentManager;
-
-    @Autowired
-    private DeptManager deptManager;
-
-    @Autowired
-    private CategoryManager categoryManager;
-
-    @Autowired
-    private BrandManager brandManager;
-
-    @Autowired
     private ProductStockManager productStockManager;
-
-    @Autowired
-    private FinanceItemManager financeItemManager;
-
-    @Autowired
-    private EnterpriseManager enterpriseManager;
-
-    @Autowired
-    private WarehouseEntryBatchManager warehouseEntryBatchManager;
+    private NoGenerateManager noGenerateManager;
 
     @Override
     public WebPage<OrderVO> list(OrderQueryParams queryParams) {
@@ -108,103 +61,71 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(OrderDTO orderDTO) {
-        // 校验参数
-        checkParams(orderDTO);
+        if (OrderTypeEnum.TO_C.equals(orderDTO.getType())) {
+            if (ObjectUtil.isNull(orderDTO.getStartTime()) || ObjectUtil.isNull(orderDTO.getEndTime())) {
+                throw new ServiceException("租用时间不能为空");
+            }
+        }
 
-        // 保存订单
-        OrderDO orderDO = converter.combination(orderDTO);
+        OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
         orderDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.Order, orderDO.getDeptId()));
-        orderDO.setStatus(OrderStatusEnum.WAIT_AUDIT);
+        // 保存订单
         save(orderDO);
-
         // 保存订单项
-        List<OrderItemDO> itemList = itemConverter.convert(orderDTO, orderDO);
+        List<OrderItemDO> itemList = BeanUtils.toBean(orderDTO.getItemList(), OrderItemDO.class);
+        itemList.forEach(item -> item.setOrderId(orderDO.getId()));
         orderItemManager.saveBatch(itemList);
-
-        // 保存支付信息
-        List<OrderPaymentDO> collectingAccountList = orderPaymentConverter.convert(orderDO.getId(), orderDTO.getPaymentList(), orderDTO.getCollectingAccountMap());
-        orderPaymentManager.saveBatch(collectingAccountList);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(OrderDTO orderDTO) {
-        // 校验是否可以编辑
-        OrderDO old = getById(orderDTO.getId());
-        if (!new OrderAllowable(old).getEdit()) {
-            throw new ServiceException("当前订单状态不允许进行编辑操作");
+        if (OrderTypeEnum.TO_C.equals(orderDTO.getType())) {
+            if (ObjectUtil.isNull(orderDTO.getStartTime()) || ObjectUtil.isNull(orderDTO.getEndTime())) {
+                throw new ServiceException("租用时间不能为空");
+            }
         }
-
-        // 校验参数
-        checkParams(orderDTO);
-
+        OrderDO orderDO = BeanUtil.copyProperties(orderDTO, OrderDO.class);
         // 更新订单
-        OrderDO orderDO = converter.combination(orderDTO);
         updateById(orderDO);
-        if (orderDO.getPaymentStatus() == OrderPaymentStatusEnum.NOT_PAY) {
-            lambdaUpdate().set(OrderDO::getPaymentTime, null).eq(OrderDO::getId, orderDO.getId()).update();
-        }
-
         // 更新订单项
-        List<OrderItemDO> itemList = itemConverter.convert(orderDTO, orderDO);
-        orderItemManager.deleteByOrderId(orderDO.getId());
+        List<OrderItemDO> itemList = BeanUtils.toBean(orderDTO.getItemList(), OrderItemDO.class);
+        itemList.forEach(item -> item.setOrderId(orderDO.getId()));
+        orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
         orderItemManager.saveBatch(itemList);
-
-        // 保存支付信息
-        List<OrderPaymentDO> paymentList = orderPaymentConverter.convert(orderDO.getId(), orderDTO.getPaymentList(), orderDTO.getCollectingAccountMap());
-        orderPaymentManager.deleteByOrderId(orderDO.getId());
-        orderPaymentManager.saveBatch(paymentList);
     }
 
     @Override
-    public OrderVO getDetail(String id) {
+    public OrderVO getDetail(Long id) {
         OrderDO orderDO = getById(id);
-
+        OrderVO orderVO = BeanUtil.copyProperties(orderDO, OrderVO.class);
+        List<OrderItemDO> list = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
+        List<Long> goodIdlist = list.stream().map(OrderItemDO::getGoodsId).collect(Collectors.toList());
         // 查询订单项
-        List<OrderItemDO> itemList = orderItemManager.listByOrderIds(Collections.singletonList(String.valueOf(id)));
-        // 查询库存(编辑时回显剩余库存)
-        Map<Long, Integer> stockNumMap;
-        if (orderDO.getType() == OrderTypeEnum.TO_B) {
-            List<Long> warehouseId = Collections.singletonList(orderDO.getWarehouseId());
-            List<Long> productIds = convertList(itemList, OrderItemDO::getProductId);
-            stockNumMap = productStockManager.queryStockNum(warehouseId, productIds);
-        } else {
-            List<Long> batchIds = convertList(itemList, OrderItemDO::getBatchId);
-            stockNumMap = warehouseEntryBatchManager.queryRemainStockNum(batchIds);
+        List<OrderItemDTO> itemList = BeanUtils.toBean(list, OrderItemDTO.class);
+        //所有的商品信息
+        List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, goodIdlist));
+        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, orderDO.getWarehouseId()).in(ProductStockDO::getGoodsId, goodIdlist));
+        for (OrderItemDTO dto : itemList) {
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsDOS.stream().filter(item -> item.getId().equals(dto.getGoodsId())).findFirst().get(), GoodsVO.class);
+            goodsVO.setUsableStock(stockDOList.stream().filter(item -> item.getGoodsId().equals(dto.getGoodsId())).findFirst().get().getUsableStock());
+            dto.setGoodsVO(goodsVO);
         }
-
-        // 查询支付信息
-        List<OrderPaymentDO> paymentList = orderPaymentManager.listByOrderId(id);
-        // 查询门店信息
-        StoreDO storeDO = orderDO.getDeliveryType() == OrderDeliveryType.self_pick ? storeManager.getById(orderDO.getStoreId()) : null;
-
-        return converter.convert(orderDO, itemList, paymentList, storeDO, stockNumMap);
+        orderVO.setItemList(itemList);
+        return orderVO;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void delete(List<String> ids) {
-        removeBatchByIds(ids);
-    }
-
-    @Override
-    public void warehouseOut(List<String> ids, String warehouseOutId) {
-        lambdaUpdate()
-                .set(OrderDO::getWarehouseOutFlag, true)
-                .set(OrderDO::getStatus, OrderStatusEnum.WAIT_SHIP)
-                .set(OrderDO::getWarehouseOutId, warehouseOutId)
-                .in(OrderDO::getId, ids)
-                .update();
-    }
-
-    @Override
-    public void warehouseOutDelete(List<String> warehouseOutIds) {
-        lambdaUpdate()
-                .set(OrderDO::getWarehouseOutFlag, false)
-                .set(OrderDO::getStatus, OrderStatusEnum.WAIT_WAREHOUSE_OUT)
-                .set(OrderDO::getWarehouseOutId, null)
-                .in(OrderDO::getWarehouseOutId, warehouseOutIds)
-                .update();
+    public void delete(Long id) {
+        OrderDO aDo = getById(id);
+        if ("Y".equals(aDo.getHasSubmit())) {
+            throw new ServiceException("该商品已确认");
+        }
+        removeById(id);
+        //删除子项
+        orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
     }
 
     @Override
@@ -221,237 +142,18 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     }
 
     @Override
-    public void submit(List<String> ids) {
-        List<OrderDO> orderList = listByIds(ids);
-        for (OrderDO orderDO : orderList) {
-            if (!new OrderAllowable(orderDO).getSubmit()) {
-                throw new ServiceException(StrUtil.format("订单【{}】不允许进行提交操作", orderDO.getSn()));
-            }
-        }
-
-        lambdaUpdate().set(OrderDO::getStatus, OrderStatusEnum.WAIT_AUDIT).in(OrderDO::getId, ids).update();
-    }
-
-    @Override
-    public void withdraw(List<String> ids) {
-        List<OrderDO> orderList = listByIds(ids);
-        for (OrderDO orderDO : orderList) {
-            if (!new OrderAllowable(orderDO).getWithdraw()) {
-                throw new ServiceException(StrUtil.format("订单【{}】不允许进行撤回操作", orderDO.getSn()));
-            }
-        }
-
-        lambdaUpdate().set(OrderDO::getStatus, OrderStatusEnum.WAIT_SUBMIT).in(OrderDO::getId, ids).update();
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void audit(List<Long> ids, Boolean isPass, String remark) {
-        List<OrderDO> orderList = listByIds(ids);
-        for (OrderDO orderDO : orderList) {
-            if (!new OrderAllowable(orderDO).getAudit()) {
-                throw new ServiceException(StrUtil.format("订单【{}】不允许进行审核操作", orderDO.getSn()));
-            }
-        }
-
-        for (OrderDO orderDO : orderList) {
-            // 更新订单状态
-            OrderStatusEnum status = converter.convertAuditStatus(isPass, orderDO.getType());
-            lambdaUpdate().set(OrderDO::getStatus, status).eq(OrderDO::getId, orderDO.getId()).update();
-
-            // 零售订单审核通过后,扣减库存
-            if (isPass && orderDO.getType() == OrderTypeEnum.TO_C) {
-                List<OrderItemDO> itemList = orderItemManager.listByOrderIds(Collections.singletonList(orderDO.getId()));
-                List<StockUpdateDTO> stockUpdateList = itemConverter.convertStockUpdate(itemList);
-                warehouseEntryBatchManager.updateStock(StockChangeSourceEnum.RETAIL_ORDER, orderDO.getSn(), stockUpdateList);
-            }
-
-            // 审核通过后,生成财务明细
-            if (isPass) {
-                financeItemManager.addIncome(FinanceIncomeTypeEnum.OrderSale, orderDO.getSn(), CurrencyUtil.add(orderDO.getPayPrice(), orderDO.getDiscountPrice()));
-                if (orderDO.getDiscountPrice() > 0) {
-                    financeItemManager.addExpand(FinanceExpandTypeEnum.Promotion, orderDO.getSn(), orderDO.getDiscountPrice());
-                }
-            }
+    public void submit(Long id) {
+        OrderDO aDo = getById(id);
+        if (!SaleOrderStatusEnum.TO_BE_COMMIT.equals(aDo.getStatus())) {
+            throw new ServiceException("该商品已确认");
         }
+        aDo.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
+        updateById(aDo);
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void payment(List<Long> ids) {
-        List<OrderDO> orderList = listByIds(ids);
-        for (OrderDO orderDO : orderList) {
-            if (!new OrderAllowable(orderDO).getPayment()) {
-                throw new ServiceException(StrUtil.format("订单【{}】不允许进行支付操作", orderDO.getSn()));
-            }
-        }
-
-        lambdaUpdate()
-                .set(OrderDO::getPaymentStatus, OrderPaymentStatusEnum.PAY)
-                .set(OrderDO::getPaymentTime, DateUtil.getDateline())
-                .in(OrderDO::getId, ids)
-                .update();
-    }
-
-    private void checkParams(OrderDTO orderDTO) {
-        // 是否为零售订单
-        boolean isToC = orderDTO.getType() == OrderTypeEnum.TO_C;
-
-        if (isToC) {
-            // 校验会员
-            orderDTO.setMemberDO(checkMember(orderDTO.getMemberId()));
-        } else {
-            // 校验企业
-            orderDTO.setEnterpriseDO(checkEnterprise(orderDTO.getMemberId()));
-        }
-
-        // 校验仓库
-        orderDTO.setWarehouseDO(checkWarehouse(orderDTO.getWarehouseId()));
-
-        // 校验部门
-//        orderDTO.setDeptDO(checkDept(orderDTO.getWarehouseDO().getDeptId()));
-
-        // 校验销售经理
-        orderDTO.setMarketingManagerDO(checkMarketing(orderDTO.getMarketingId()));
-
-        // 校验门店
-        orderDTO.setStoreDO(checkStore(orderDTO.getDeliveryType(), orderDTO.getStoreId()));
-
-        if (isToC) {
-            // 零售订单没有出库操作,需要直接扣减批次库存,所以前台需要选择库存批次
-            orderDTO.setBatchMap(checkBatch(orderDTO));
-        } else {
-            // 企业销售订单选商品即可,出库时再选择库存批次
-            orderDTO.setProductMap(checkProduct(orderDTO));
-        }
-
-        // 查询分类,暂时不做数据存在校验
-        List<Long> categoryIds = isToC ? convertList(orderDTO.getBatchMap().values(), WarehouseEntryBatchDO::getCategoryId) :
-                convertList(orderDTO.getProductMap().values(), ProductDO::getCategoryId);
-        List<CategoryDO> categoryList = categoryManager.listByIds(categoryIds);
-        orderDTO.setCategoryMap(convertMap(categoryList, CategoryDO::getCategoryId, Function.identity()));
-
-        // 校验收款账户
-        orderDTO.setCollectingAccountMap(checkPayment(orderDTO.getPaymentList()));
-    }
-
-    private Map<Long, WarehouseEntryBatchDO> checkBatch(OrderDTO orderDTO) {
-        List<OrderItemDTO> itemList = orderDTO.getItemList();
-        if (itemList.stream().anyMatch(orderItemDTO -> orderItemDTO.getBatchId() == null)) {
-            throw new ServiceException("库存批次id不能为空");
-        }
-        List<String> batchIds = convertList(itemList, OrderItemDTO::getBatchId);
-        List<WarehouseEntryBatchDO> batchList = warehouseEntryBatchManager.listByIds(batchIds);
-        Map<Long, WarehouseEntryBatchDO> batchMap = convertMap(batchList, WarehouseEntryBatchDO::getId, Function.identity());
-
-        for (String batchId : batchIds) {
-            WarehouseEntryBatchDO batchDO = batchMap.get(batchId);
-            if (batchDO == null) {
-                throw new ServiceException(StrUtil.format("库存批次id:{} 不存在", batchId));
-            }
-            if (!batchDO.getWarehouseId().equals(orderDTO.getWarehouseId())) {
-                throw new ServiceException(StrUtil.format("库存批次:{} 不属于当前选择的仓库", batchDO.getSn()));
-            }
-        }
-
-        return batchMap;
-    }
-
-    private EnterpriseDO checkEnterprise(Long enterpriseId) {
-        EnterpriseDO enterpriseDO = enterpriseManager.getById(enterpriseId);
-        if (enterpriseDO == null) {
-            throw new ServiceException("企业不存在");
-        }
-        return enterpriseDO;
-    }
-
-    private DeptDO checkDept(Long deptId) {
-        DeptDO deptDO = deptManager.getById(deptId);
-        if (deptDO == null) {
-            throw new ServiceException("仓库未关联部门,请先进行关联部门操作");
-        }
-        return deptDO;
-    }
-
-    private Map<String, CollectingAccountDO> checkPayment(List<OrderPaymentDTO> paymentList) {
-        List<String> collectingAccountIds = convertList(paymentList, OrderPaymentDTO::getCollectingAccountId);
-        Map<String, CollectingAccountDO> collectingAccountMap = collectingAccountManager.listAndConvertMap(collectingAccountIds, CollectingAccountDO::getId);
-        for (OrderPaymentDTO orderPaymentDTO : paymentList) {
-            CollectingAccountDO collectingAccountDO = collectingAccountMap.get(orderPaymentDTO.getCollectingAccountId());
-            if (collectingAccountDO == null) {
-                throw new ServiceException(StrUtil.format("收款账户【{}】不存在", orderPaymentDTO.getCollectingAccountId()));
-            }
-            if (!collectingAccountDO.getEnableFlag()) {
-                throw new ServiceException(StrUtil.format("收款账户【{}】未启用", collectingAccountDO.getName()));
-            }
-        }
-        return collectingAccountMap;
-    }
-
-    private Map<Long, ProductDO> checkProduct(OrderDTO orderDTO) {
-        if (orderDTO.getItemList().stream().anyMatch(orderItemDTO -> orderItemDTO.getProductId() == null)) {
-            throw new ServiceException("产品id不能为空");
-        }
-        // 批量查询商品
-        List<String> productIds = convertList(orderDTO.getItemList(), OrderItemDTO::getProductId);
-        Map<Long, ProductDO> productMap = productManager.listAndConvertMap(productIds, ProductDO::getId);
-        // 循环校验
-        for (OrderItemDTO orderItemDTO : orderDTO.getItemList()) {
-            ProductDO productDO = productMap.get(orderItemDTO.getProductId());
-            if (productDO == null) {
-                throw new ServiceException(StrUtil.format("商品【{}】不存在", orderItemDTO.getProductId()));
-            }
-        }
-
-        return productMap;
-    }
-
-    private StoreDO checkStore(OrderDeliveryType deliveryType, Long storeId) {
-        if (deliveryType != OrderDeliveryType.self_pick) {
-            return null;
-        }
-
-        StoreDO storeDO = storeManager.getById(storeId);
-        if (storeDO == null) {
-            throw new ServiceException("自提门店不存在");
-        }
-
-        return storeDO;
-    }
-
-    private MarketingManagerDO checkMarketing(Long marketingId) {
-        if (marketingId == null) {
-            return null;
-        }
-
-        MarketingManagerDO marketingManagerDO = marketingManagerManager.getById(marketingId);
-        if (marketingManagerDO == null) {
-            throw new SecurityException("销售经理不存在");
-        }
-        if (marketingManagerDO.getDisableFlag() == 1) {
-            throw new SecurityException("销售经理已禁用");
-        }
-
-        return marketingManagerDO;
-    }
-
-    private WarehouseDO checkWarehouse(Long warehouseId) {
-        WarehouseDO warehouseDO = warehouseManager.getById(warehouseId);
-        if (warehouseDO == null) {
-            throw new SecurityException("仓库不存在");
-        }
-        return warehouseDO;
-    }
-
-    private MemberDO checkMember(Long memberId) {
-        MemberDO memberDO = memberManager.getById(memberId);
-        if (memberDO == null) {
-            throw new SecurityException("会员不存在");
-        }
-        if (memberDO.getDisableFlag()) {
-            throw new SecurityException("会员已禁用");
-        }
-        return memberDO;
+    public WebPage<OrderVO> hasSendOrder(OrderQueryParams queryParams) {
+        return null;
     }
 }
 

+ 2 - 2
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderPaymentManagerImpl.java

@@ -45,12 +45,12 @@ public class OrderPaymentManagerImpl extends BaseServiceImpl<OrderPaymentMapper,
     }
 
     @Override
-    public void deleteByOrderId(String orderId) {
+    public void deleteByOrderId(Long orderId) {
         lambdaUpdate().eq(OrderPaymentDO::getOrderId, orderId).remove();
     }
 
     @Override
-    public List<OrderPaymentDO> listByOrderId(String orderId) {
+    public List<OrderPaymentDO> listByOrderId(Long orderId) {
         return lambdaQuery().eq(OrderPaymentDO::getOrderId, orderId).list();
     }
 

+ 3 - 6
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderReturnManagerImpl.java

@@ -318,9 +318,6 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
         if (!isToC && !orderDO.getShipFlag()) {
             throw new ServiceException("只能选择已发货的订单");
         }
-        if (isToC && orderDO.getStatus() != OrderStatusEnum.COMPLETE) {
-            throw new ServiceException("只能选择已完成的订单");
-        }
         if (isToC) {
             // 零售订单校验订单项
             Map<Long, OrderItemDO> orderItemMap = checkOrderItem(orderReturnDTO);
@@ -332,7 +329,7 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
             orderReturnDTO.setBatchMap(batchMap);
         } else {
             // 销售订单校验出库单项
-            Map<String, WarehouseOutItemDO> warehouseOutItemMap = checkWarehouseOutItem(orderReturnDTO);
+            Map<Long, WarehouseOutItemDO> warehouseOutItemMap = checkWarehouseOutItem(orderReturnDTO);
             orderReturnDTO.setWarehouseOutItemMap(warehouseOutItemMap);
         }
 
@@ -357,9 +354,9 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
         orderReturnDTO.setHandleBy(handleBy);
     }
 
-    private Map<String, WarehouseOutItemDO> checkWarehouseOutItem(OrderReturnDTO orderReturnDTO) {
+    private Map<Long, WarehouseOutItemDO> checkWarehouseOutItem(OrderReturnDTO orderReturnDTO) {
         List<Long> warehouseOutItemIdIds = convertList(orderReturnDTO.getItemList(), OrderReturnItemDTO::getWarehouseOutItemId);
-        Map<String, WarehouseOutItemDO> warehouseOutItemMap = warehouseOutItemManager.listAndConvertMap(warehouseOutItemIdIds, WarehouseOutItemDO::getId);
+        Map<Long, WarehouseOutItemDO> warehouseOutItemMap = warehouseOutItemManager.listAndConvertMap(warehouseOutItemIdIds, WarehouseOutItemDO::getId);
 
         for (OrderReturnItemDTO returnItemDTO : orderReturnDTO.getItemList()) {
             WarehouseOutItemDO warehouseOutItemDO = warehouseOutItemMap.get(returnItemDTO.getWarehouseOutItemId());

+ 9 - 7
module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java

@@ -1,6 +1,7 @@
 package com.hys.app.service.erp.impl;
 
 import cn.hutool.core.collection.CollUtil;
+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.ProductStockConverter;
@@ -11,6 +12,7 @@ import com.hys.app.framework.util.PageConvert;
 import com.hys.app.mapper.erp.ProductStockMapper;
 import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.dos.ProductStockDO;
+import com.hys.app.model.erp.dos.WarehouseDO;
 import com.hys.app.model.erp.dto.ProductStockQueryParams;
 import com.hys.app.model.erp.enums.StockOperateEnum;
 import com.hys.app.model.erp.vo.ProductStockV1;
@@ -70,7 +72,7 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
      */
     @Override
     public List<ProductStockV1> selectList(ProductStockQueryParams request){
-        return baseMapper.selectList(request);
+        return baseMapper.queryList(request);
     }
 
     /**
@@ -89,14 +91,14 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void initStockByProduct(List<Long> productIds, Long goodsId) {
-        List<WarehouseVO> warehouseList = warehouseManager.listAll(null);
+        List<WarehouseDO> list1 = warehouseManager.list(new LambdaQueryWrapper<WarehouseDO>().eq(WarehouseDO::getDeleted,0));
         List<ProductStockDO> list = new ArrayList<>();
-        for (WarehouseVO warehouseVO : warehouseList) {
-            for (Long productId : productIds) {
-                list.add(new ProductStockDO(warehouseVO.getId(), goodsId, productId, 0));
-            }
+        for (WarehouseDO warehouseDO : list1) {
+            ProductStockDO productStockDO = new ProductStockDO();
+            productStockDO.setWarehouseId(warehouseDO.getId());
+            productStockDO.setGoodsId(goodsId);
+            list.add(productStockDO);
         }
-
         super.saveBatch(list);
     }
 

+ 8 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaManagerImpl.java

@@ -1,6 +1,8 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.interfaces.MPJBaseJoin;
 import com.hys.app.converter.erp.WarehouseAreaConverter;
@@ -65,6 +67,12 @@ public class WarehouseAreaManagerImpl extends BaseServiceImpl<WarehouseAreaMappe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(WarehouseAreaDO warehouseAreaDO) {
+        WarehouseAreaDO one = this.baseMapper.selectOne(new LambdaQueryWrapper<WarehouseAreaDO>()
+                .eq(WarehouseAreaDO::getWarehouseId, warehouseAreaDO.getWarehouseId())
+                .eq(WarehouseAreaDO::getCode, warehouseAreaDO.getCode()));
+        if (ObjectUtil.isNotNull(one)){
+            throw new ServiceException("该仓库下库位编号已存在");
+        }
         save(warehouseAreaDO);
     }
 

+ 80 - 61
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryManagerImpl.java

@@ -1,52 +1,48 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.ExcelWriter;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.converter.erp.ProcurementContractProductConverter;
-import com.hys.app.converter.erp.WarehouseEntryBatchConverter;
 import com.hys.app.converter.erp.WarehouseEntryConverter;
 import com.hys.app.converter.erp.WarehouseEntryProductConverter;
 import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.database.WebPage;
-import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
+import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.rabbitmq.MessageSender;
 import com.hys.app.framework.rabbitmq.MqMessage;
 import com.hys.app.framework.util.CurrencyUtil;
 import com.hys.app.framework.util.JsonUtil;
 import com.hys.app.framework.util.PageConvert;
 import com.hys.app.mapper.erp.WarehouseEntryMapper;
+import com.hys.app.mapper.goods.GoodsMapper;
 import com.hys.app.model.base.SettingGroup;
 import com.hys.app.model.base.rabbitmq.AmqpExchange;
-import com.hys.app.model.erp.dos.ProcurementContract;
-import com.hys.app.model.erp.dos.ProcurementContractProduct;
-import com.hys.app.model.erp.dos.ProcurementPlan;
 import com.hys.app.model.erp.dos.*;
 import com.hys.app.model.erp.dto.WarehouseEntryDTO;
 import com.hys.app.model.erp.dto.WarehouseEntryProductDTO;
 import com.hys.app.model.erp.dto.WarehouseEntryQueryParams;
 import com.hys.app.model.erp.dto.WarehouseEntryStatisticsParam;
 import com.hys.app.model.erp.dto.message.WarehouseEntryAuditPassMessage;
-import com.hys.app.model.erp.enums.*;
+import com.hys.app.model.erp.enums.FinanceExpandTypeEnum;
+import com.hys.app.model.erp.enums.NoBusinessTypeEnum;
+import com.hys.app.model.erp.enums.StockChangeSourceEnum;
+import com.hys.app.model.erp.enums.WarehouseEntryStatusEnum;
 import com.hys.app.model.erp.vo.WarehouseEntryAllowable;
 import com.hys.app.model.erp.vo.WarehouseEntryStatistics;
 import com.hys.app.model.erp.vo.WarehouseEntryVO;
 import com.hys.app.model.goods.dos.CategoryDO;
-import com.hys.app.model.system.dos.AdminUser;
-import com.hys.app.model.system.dos.DeptDO;
 import com.hys.app.model.system.vo.SiteSetting;
 import com.hys.app.service.base.service.SettingManager;
 import com.hys.app.service.erp.*;
 import com.hys.app.service.goods.CategoryManager;
-import com.hys.app.service.system.AdminUserManager;
-import com.hys.app.service.system.DeptManager;
-import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -76,7 +72,7 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
     private WarehouseEntryProductConverter itemConverter;
 
     @Autowired
-    private WarehouseEntryBatchConverter batchConverter;
+    private GoodsMapper goodsMapper;
 
     @Autowired
     private WarehouseEntryProductManager warehouseEntryProductManager;
@@ -90,30 +86,15 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
     @Autowired
     private ProcurementContractProductManager contractProductManager;
 
-    @Autowired
-    private DeptManager deptManager;
-
-    @Autowired
-    private SupplierManager supplierManager;
-
     @Autowired
     private WarehouseManager warehouseManager;
 
-    @Autowired
-    private ProcurementContractManager contractManager;
-
-    @Autowired
-    private ProcurementPlanManager procurementPlanManager;
-
     @Autowired
     private WarehouseEntryMapper warehouseEntryMapper;
 
     @Autowired
     private MessageSender messageSender;
 
-    @Autowired
-    private AdminUserManager adminUserManager;
-
     @Autowired
     private SettingManager settingManager;
 
@@ -129,80 +110,119 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
     @Autowired
     private FinanceItemManager financeItemManager;
 
+    @Autowired
+    private ProductStockManager productStockManager;
+
+
     @Override
-    public WebPage<WarehouseEntryVO> list(WarehouseEntryQueryParams queryParams) {
-        WebPage<WarehouseEntryDO> webPage = baseMapper.selectPage(queryParams);
+    public WebPage<WarehouseEntryDO> list(WarehouseEntryQueryParams queryParams) {
+        WebPage<WarehouseEntryDO> page = baseMapper.selectPage(queryParams);
+        return page;
 
 //        List<WarehouseEntryDO> list = webPage.getData();
 //        Map<Long, String> deptNameMap = deptService.listAndConvertMap(convertList(webPage.getData(), WarehouseEntryDO::getDeptId), DeptDO::getId, DeptDO::getName);
 //        Map<Long, String> supplierNameMap = supplierManager.listAndConvertMap(convertList(list, WarehouseEntryDO::getSupplierId), SupplierDO::getId, SupplierDO::getCustomName);
 //        Map<Long, String> warehouseNameMap = warehouseManager.listAndConvertMap(convertList(list, WarehouseEntryDO::getWarehouseId), WarehouseDO::getId, WarehouseDO::getName);
 
-        return converter.convert(webPage);
+//        return converter.convert(webPage);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(WarehouseEntryDTO warehouseEntryDTO) {
         check(warehouseEntryDTO);
-
         // 保存入库单
-        WarehouseEntryDO warehouseEntryDO = converter.combination(warehouseEntryDTO);
+        WarehouseEntryDO warehouseEntryDO =  BeanUtil.copyProperties(warehouseEntryDTO, WarehouseEntryDO.class);
         warehouseEntryDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseEntry));
         warehouseEntryDO.setStatus(WarehouseEntryStatusEnum.NotSubmit);
         warehouseEntryDO.setSupplierSettlementFlag(false);
         save(warehouseEntryDO);
-
         // 保存入库单商品明细
-        List<WarehouseEntryProductDO> productList = itemConverter.combination(warehouseEntryDTO.getProductList(),
-                warehouseEntryDO.getId(), warehouseEntryDTO.getContractProductList(), getPriceRatio());
+        List<WarehouseEntryProductDTO> productList1 = warehouseEntryDTO.getProductList();
+        ArrayList<WarehouseEntryProductDO> productList = new ArrayList<>();
+        for (WarehouseEntryProductDTO dto : productList1) {
+            WarehouseEntryProductDO productDO = BeanUtil.copyProperties(dto, WarehouseEntryProductDO.class);
+            productDO.setGoodsId(dto.getProductId());
+            productDO.setWarehouseEntryId(warehouseEntryDO.getId());
+            productList.add(productDO);
+        }
         warehouseEntryProductManager.saveBatch(productList);
+        //如果是入库就要增加库存
+        if ("submit".equals(warehouseEntryDTO.getSaveOrSubmit())){
+            updateStock(warehouseEntryDTO,warehouseEntryDO);
+        }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(WarehouseEntryDTO warehouseEntryDTO) {
-        // 更新前校验
-        WarehouseEntryDO oldDO = getById(warehouseEntryDTO.getId());
-        if (!new WarehouseEntryAllowable(oldDO).getEdit()) {
-            throw new ServiceException("当前状态不允许编辑");
-        }
-
         check(warehouseEntryDTO);
 
         // 更新入库单
-        WarehouseEntryDO warehouseEntryDO = converter.combination(warehouseEntryDTO);
+        WarehouseEntryDO warehouseEntryDO =  BeanUtil.copyProperties(warehouseEntryDTO, WarehouseEntryDO.class);
         updateById(warehouseEntryDO);
 
-        // 更新入库单商品明细
-        List<WarehouseEntryProductDO> productList = itemConverter
-                .combination(warehouseEntryDTO.getProductList(), warehouseEntryDO.getId(), warehouseEntryDTO.getContractProductList(), getPriceRatio());
         warehouseEntryProductManager.deleteByWarehouseEntryIds(Collections.singletonList(warehouseEntryDTO.getId()));
+        ArrayList<WarehouseEntryProductDO> productList = new ArrayList<>();
+        for (WarehouseEntryProductDTO dto : warehouseEntryDTO.getProductList()) {
+            WarehouseEntryProductDO productDO = BeanUtil.copyProperties(dto, WarehouseEntryProductDO.class);
+            productDO.setGoodsId(dto.getProductId());
+            productDO.setWarehouseEntryId(warehouseEntryDO.getId());
+            productList.add(productDO);
+        }
         warehouseEntryProductManager.saveBatch(productList);
+        if ("submit".equals(warehouseEntryDTO.getSaveOrSubmit())){
+            updateStock(warehouseEntryDTO,warehouseEntryDO);
+        }
+    }
+
+    private void updateStock(WarehouseEntryDTO warehouseEntryDTO,WarehouseEntryDO warehouseEntryDO){
+        if ("Y".equals(warehouseEntryDO.getHasSubmit())){
+            throw new ServiceException("数据已入库,请勿重复操作");
+        }
+        List<Long> collect = warehouseEntryDTO.getProductList().stream().map(WarehouseEntryProductDTO::getProductId).collect(Collectors.toList());
+        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, warehouseEntryDTO.getWarehouseId()).in(ProductStockDO::getGoodsId, collect));
+        for (ProductStockDO aDo : stockDOList) {
+            //增加可用库存实际库存
+            WarehouseEntryProductDTO productDO = warehouseEntryDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDo.getGoodsId())).findFirst().get();
+            aDo.setUsableStock(aDo.getUsableStock()+productDO.getNum());
+            aDo.setActualStock(aDo.getActualStock()+productDO.getNum());
+        }
+        productStockManager.updateBatchById(stockDOList);
+        //入库之后数据不能被操作
+        warehouseEntryDO.setHasSubmit("Y");
+        updateById(warehouseEntryDO);
     }
 
     @Override
     public WarehouseEntryVO getDetail(Long id) {
         WarehouseEntryDO warehouseEntryDO = getById(id);
+        WarehouseEntryVO warehouseEntryVO = BeanUtil.copyProperties(warehouseEntryDO, WarehouseEntryVO.class);
         List<WarehouseEntryProductDO> productList = warehouseEntryProductManager.listByWarehouseEntryId(id);
-        List<ProcurementContractProduct> contractProductList = contractProductManager.list(warehouseEntryDO.getContractId());
-
-        List<WarehouseEntryBatchDO> batchList = warehouseEntryBatchManager.listByWarehouseEntryIds(Collections.singletonList(id));
-
-        return converter.combination(warehouseEntryDO, itemConverter.convert(productList), contractProductList, batchConverter.convert(batchList));
+        List<Long> collect = productList.stream().map(WarehouseEntryProductDO::getGoodsId).collect(Collectors.toList());
+        //所有的商品信息
+        List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, collect));
+        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, warehouseEntryVO.getWarehouseId()).in(ProductStockDO::getGoodsId, collect));
+        for (WarehouseEntryProductDO productDO : productList) {
+            productDO.setGoodsDO(goodsDOS.stream().filter(item ->item.getId().equals(productDO.getGoodsId())).findFirst().get());
+            productDO.setUsableStock(stockDOList.stream().filter(item->item.getGoodsId().equals(productDO.getGoodsId())).findFirst().get().getUsableStock());
+        }
+        warehouseEntryVO.setProductList(itemConverter.convert(productList));
+        return warehouseEntryVO;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void delete(List<Long> ids) {
-        List<WarehouseEntryDO> warehouseEntryList = listByIds(ids);
-        for (WarehouseEntryDO warehouseEntryDO : warehouseEntryList) {
-            if (!new WarehouseEntryAllowable(warehouseEntryDO).getDelete()) {
-                throw new ServiceException(warehouseEntryDO.getSn() + "不能进行删除操作");
-            }
+    public void delete(Long id) {
+        WarehouseEntryDO aDo = getById(id);
+        if ("Y".equals(aDo.getHasSubmit())) {
+            throw new ServiceException("该数据已提交,不能删除");
         }
-        removeBatchByIds(ids);
-        warehouseEntryProductManager.deleteByWarehouseEntryIds(ids);
+        removeById(id);
+        // 删除明细
+        warehouseEntryProductManager.remove(new LambdaQueryWrapper<WarehouseEntryProductDO>().eq(WarehouseEntryProductDO::getWarehouseEntryId,id));
     }
 
     @Override
@@ -243,7 +263,6 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         }
 
         List<WarehouseEntryDO> warehouseEntryList = listByIds(ids);
-
         for (WarehouseEntryDO warehouseEntryDO : warehouseEntryList) {
             // 校验
             if (!new WarehouseEntryAllowable(warehouseEntryDO).getAudit()) {
@@ -464,7 +483,7 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
 
 //        warehouseEntryDTO.setDeptDO(deptDO);
 //        warehouseEntryDTO.setSupplierDO(supplierDO);
-        warehouseEntryDTO.setWarehouseDO(warehouseDO);
+//        warehouseEntryDTO.setWarehouseDO(warehouseDO);
 //        warehouseEntryDTO.setHandledBy(handledBy);
     }
 

+ 36 - 2
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryProductManagerImpl.java

@@ -1,21 +1,32 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.converter.erp.WarehouseEntryProductConverter;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
+import com.hys.app.framework.database.mybatisplus.wrapper.QueryWrapperX;
+import com.hys.app.mapper.erp.ProductStockMapper;
 import com.hys.app.mapper.erp.WarehouseEntryProductMapper;
+import com.hys.app.mapper.goods.GoodsMapper;
+import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dos.WarehouseEntryProductDO;
+import com.hys.app.model.erp.dto.WareQueryGoodParams;
 import com.hys.app.model.erp.dto.WarehouseEntryProductDTO;
 import com.hys.app.model.erp.dto.WarehouseEntryProductQueryParams;
 import com.hys.app.model.erp.dto.WarehouseInQueryParams;
+import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.WarehouseEntryItemV1;
 import com.hys.app.model.erp.vo.WarehouseEntryProductVO;
+import com.hys.app.service.erp.ProductStockManager;
 import com.hys.app.service.erp.WarehouseEntryProductManager;
 import org.apache.ibatis.annotations.Param;
 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;
 
 /**
@@ -30,6 +41,12 @@ public class WarehouseEntryProductManagerImpl extends BaseServiceImpl<WarehouseE
     @Autowired
     private WarehouseEntryProductConverter converter;
 
+    @Autowired
+    private ProductStockManager productStockManager;
+
+    @Autowired
+    private GoodsMapper goodsMapper;
+
     @Override
     public WebPage<WarehouseEntryProductVO> list(WarehouseEntryProductQueryParams queryParams) {
         WebPage<WarehouseEntryProductDO> webPage = baseMapper.selectPage(queryParams);
@@ -44,12 +61,13 @@ public class WarehouseEntryProductManagerImpl extends BaseServiceImpl<WarehouseE
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public List<WarehouseEntryItemV1> selectList(WarehouseInQueryParams request){
+    public List<WarehouseEntryItemV1> selectList(WarehouseInQueryParams request) {
         return baseMapper.queryList(request);
     }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Long selectCount( WarehouseInQueryParams request){
+    public Long selectCount(WarehouseInQueryParams request) {
         return baseMapper.selectCount(request);
     }
 
@@ -101,5 +119,21 @@ public class WarehouseEntryProductManagerImpl extends BaseServiceImpl<WarehouseE
                 .update();
     }
 
+    @Override
+    public List<GoodsVO> getStockByWarehouseGood(WareQueryGoodParams params) {
+
+        List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, params.getGoodIds()));
+        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, params.getWarehouseId()).in(ProductStockDO::getGoodsId, params.getGoodIds()));
+        List<GoodsVO> list = new ArrayList<>();
+        for (ProductStockDO productStockDO : stockDOList) {
+            GoodsDO goodsDO = goodsDOS.stream().filter(item -> item.getId().equals(productStockDO.getGoodsId())).findFirst().get();
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsDO, GoodsVO.class);
+            goodsVO.setUsableStock(productStockDO.getUsableStock());
+            list.add(goodsVO);
+
+        }
+        return list;
+    }
 }
 

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseManagerImpl.java

@@ -60,7 +60,7 @@ public class WarehouseManagerImpl extends BaseServiceImpl<WarehouseMapper, Wareh
         List<WarehouseDO> data = webPage.getData();
 
 
-        Map<Long, String> deptNameMap = deptManager.listAndConvertMap(convertList(data, null), DeptDO::getId, DeptDO::getName);
+        Map<Long, String> deptNameMap = deptManager.listAndConvertMap(convertList(data, WarehouseDO::getDeptId), DeptDO::getId, DeptDO::getName);
         Map<Long, String> adminNameMap = adminUserManager.getNameMapByIds(convertList(data, WarehouseDO::getAdminId));
 
         return converter.combination(webPage, deptNameMap, adminNameMap);

+ 3 - 3
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutItemManagerImpl.java

@@ -36,7 +36,7 @@ public class WarehouseOutItemManagerImpl extends BaseServiceImpl<WarehouseOutIte
 
     @Override
     public List<WarehouseOutItemV1> selectList(WarehouseOutItemQueryParams request) {
-        return baseMapper.selectList(request);
+        return baseMapper.queryList(request);
     }
 
 
@@ -53,12 +53,12 @@ public class WarehouseOutItemManagerImpl extends BaseServiceImpl<WarehouseOutIte
     }
 
     @Override
-    public void deleteByWarehouseOutId(List<String> warehouseOutIds) {
+    public void deleteByWarehouseOutId(List<Long> warehouseOutIds) {
         lambdaUpdate().in(WarehouseOutItemDO::getWarehouseOutId, warehouseOutIds).remove();
     }
 
     @Override
-    public void increaseReturnNum(String warehouseOutItemId, Integer returnNum) {
+    public void increaseReturnNum(Long warehouseOutItemId, Integer returnNum) {
         lambdaUpdate().setSql("return_num = return_num + " + returnNum).eq(WarehouseOutItemDO::getId, warehouseOutItemId).update();
     }
 

+ 113 - 198
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java

@@ -1,37 +1,43 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.ExcelWriter;
+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.WarehouseOutConverter;
 import com.hys.app.converter.erp.WarehouseOutItemConverter;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
 import com.hys.app.framework.rabbitmq.MessageSender;
 import com.hys.app.framework.rabbitmq.MqMessage;
+import com.hys.app.framework.util.BeanUtils;
 import com.hys.app.framework.util.DateUtil;
 import com.hys.app.framework.util.PageConvert;
 import com.hys.app.framework.util.StringUtil;
 import com.hys.app.mapper.erp.WarehouseOutMapper;
+import com.hys.app.mapper.goods.GoodsMapper;
 import com.hys.app.model.base.rabbitmq.AmqpExchange;
 import com.hys.app.model.erp.dos.*;
 import com.hys.app.model.erp.dto.*;
 import com.hys.app.model.erp.dto.message.WarehouseOutShipMessage;
 import com.hys.app.model.erp.enums.*;
-import com.hys.app.model.erp.vo.OrderAllowable;
-import com.hys.app.model.erp.vo.WarehouseOutAllowable;
-import com.hys.app.model.erp.vo.WarehouseOutStatistics;
-import com.hys.app.model.erp.vo.WarehouseOutVO;
+import com.hys.app.model.erp.vo.*;
 import com.hys.app.model.system.dos.AdminUser;
 import com.hys.app.model.system.dos.LogisticsCompanyDO;
 import com.hys.app.service.erp.*;
+import com.hys.app.service.kuaidiniao.KuaiDiNiaoService;
+import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 import com.hys.app.service.system.AdminUserManager;
 import com.hys.app.service.system.LogisticsCompanyManager;
+import io.swagger.annotations.ApiModelProperty;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -57,9 +63,6 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
     @Autowired
     private WarehouseOutConverter converter;
 
-    @Autowired
-    private WarehouseOutItemConverter itemConverter;
-
     @Autowired
     private OrderManager orderManager;
 
@@ -72,9 +75,6 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
     @Autowired
     private WarehouseEntryBatchManager batchManager;
 
-    @Autowired
-    private LogisticsCompanyManager logisticsCompanyManager;
-
     @Autowired
     private WarehouseOutMapper warehouseOutMapper;
 
@@ -85,105 +85,131 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
     private AdminUserManager adminUserManager;
 
     @Autowired
-    private OrderItemManager orderItemManager;
+    private GoodsMapper goodsMapper;
 
     @Autowired
     private FinanceItemManager financeItemManager;
 
+    @Autowired
+    private KuaiDiNiaoService kuaiDiNiaoService;
+
+    @Autowired
+    private ProductStockManager productStockManager;
+
+
     @Override
     public WebPage<WarehouseOutVO> list(WarehouseOutQueryParams queryParams) {
         WebPage<WarehouseOutDO> webPage = baseMapper.selectPage(queryParams);
-        return converter.convert(webPage);
+        WebPage<WarehouseOutVO> convert = converter.convert(webPage);
+        return convert;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(WarehouseOutDTO warehouseOutDTO) {
-        // 校验参数
-        checkAddOrEdit(warehouseOutDTO);
-
         // 保存出库单
-        WarehouseOutDO warehouseOutDO = converter.combination(warehouseOutDTO);
+        WarehouseOutDO warehouseOutDO = BeanUtil.copyProperties(warehouseOutDTO, WarehouseOutDO.class);
         warehouseOutDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, warehouseOutDO.getDeptId()));
-        warehouseOutDO.setStatus(WarehouseOutStatusEnum.WAIT_AUDIT);
         warehouseOutDO.setCreateBy(adminUserManager.getCurrUserName());
         save(warehouseOutDO);
-
         // 保存出库单明细
         warehouseOutDTO.setId(warehouseOutDO.getId());
-        List<WarehouseOutItemDO> productList = itemConverter.combination(warehouseOutDTO);
+        List<WarehouseOutItemDO> productList = BeanUtils.toBean(warehouseOutDTO.getProductList(), WarehouseOutItemDO.class);
+        productList.forEach(item->item.setWarehouseOutId(warehouseOutDO.getId()));
         warehouseOutItemManager.saveBatch(productList);
-
-        // 将订单改为已出库状态
-        orderManager.warehouseOut(warehouseOutDO.getOrderIdList(), warehouseOutDO.getId());
+        //如果是出库就要扣减库存
+        if ("submit".equals(warehouseOutDTO.getSaveOrSubmit())) {
+            updateStock(warehouseOutDTO, warehouseOutDO);
+        }
     }
 
+
     @Override
     public void edit(WarehouseOutDTO warehouseOutDTO) {
-        WarehouseOutDO old = getById(warehouseOutDTO.getId());
-        if (!new WarehouseOutAllowable(old).getEdit()) {
-            throw new ServiceException("当前状态不允许进行编辑操作");
-        }
-
-        if (!convertSet(warehouseOutDTO.getOrderList(), WarehouseOutDTO.Order::getOrderId).equals(new HashSet<>(old.getOrderIdList()))) {
-            throw new ServiceException("订单和出库单已有订单不一致");
-        }
-
-        // 校验参数
-        checkAddOrEdit(warehouseOutDTO);
-
         // 保存出库单
-        WarehouseOutDO warehouseOutDO = converter.combination(warehouseOutDTO);
+        WarehouseOutDO warehouseOutDO = BeanUtil.copyProperties(warehouseOutDTO, WarehouseOutDO.class);
         updateById(warehouseOutDO);
-
         // 保存出库单明细
-        List<WarehouseOutItemDO> productList = itemConverter.combination(warehouseOutDTO);
+        List<WarehouseOutItemDO> productList = BeanUtils.toBean(warehouseOutDTO.getProductList(), WarehouseOutItemDO.class);
+        productList.forEach(item->item.setWarehouseOutId(warehouseOutDO.getId()));
         warehouseOutItemManager.deleteByWarehouseOutId(Collections.singletonList(warehouseOutDTO.getId()));
         warehouseOutItemManager.saveBatch(productList);
+        //如果是出库就要扣减库存
+        if ("submit".equals(warehouseOutDTO.getSaveOrSubmit())) {
+            updateStock(warehouseOutDTO, warehouseOutDO);
+        }
+    }
+
+    private void updateStock(WarehouseOutDTO warehouseOutDTO, WarehouseOutDO warehouseOutDO) {
+        if ("Y".equals(warehouseOutDO.getHasSubmit())) {
+            throw new ServiceException("数据已出库,请勿重复操作");
+        }
+        List<Long> collect = warehouseOutDTO.getProductList().stream().map(WarehouseOutProductDTO::getGoodsId).collect(Collectors.toList());
+        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, warehouseOutDTO.getWarehouseId()).in(ProductStockDO::getGoodsId, collect));
+        for (ProductStockDO aDo : stockDOList) {
+            WarehouseOutProductDTO productDO = warehouseOutDTO.getProductList().stream().filter(item -> item.getGoodsId().equals(aDo.getGoodsId())).findFirst().get();
+            if (productDO.getOutNum() > aDo.getUsableStock()) {
+                throw new ServiceException(productDO.getGoodName() + "的可用库存不够,请核对数据");
+            }
+            //循环判断每一条数据可用库存够不够扣减
+            aDo.setUsableStock(aDo.getUsableStock() - productDO.getOutNum());
+            aDo.setActualStock(aDo.getActualStock() - productDO.getOutNum());
+        }
+        productStockManager.updateBatchById(stockDOList);
+        //入库之后数据不能被操作
+        warehouseOutDO.setHasSubmit("Y");
+        updateById(warehouseOutDO);
     }
 
     @Override
     public WarehouseOutVO getDetail(Long id) {
         WarehouseOutDO warehouseOutDO = getById(id);
-
+        WarehouseOutVO outVO = BeanUtil.copyProperties(warehouseOutDO, WarehouseOutVO.class);
         // 查询出库明细
-        List<WarehouseOutItemDO> itemList = warehouseOutItemManager.listByWarehouseOutId(id);
-        // 查询批次信息(回显批次剩余库存)
-        List<WarehouseEntryBatchDO> batchList = batchManager.listByIds(convertList(itemList, WarehouseOutItemDO::getWarehouseEntryBatchId));
-
-        return converter.convert(warehouseOutDO, itemList, batchList);
+        List<WarehouseOutItemDO> itemList = warehouseOutItemManager.list(new LambdaQueryWrapper<WarehouseOutItemDO>().eq(WarehouseOutItemDO::getWarehouseOutId,id));
+        List<WarehouseOutProductDTO> productList = BeanUtils.toBean(itemList, WarehouseOutProductDTO.class);
+
+        List<Long> goodIdlist = itemList.stream().map(WarehouseOutItemDO::getGoodsId).collect(Collectors.toList());
+
+        //所有的商品信息
+        List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, goodIdlist));
+        List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, warehouseOutDO.getWarehouseId()).in(ProductStockDO::getGoodsId, goodIdlist));
+        for (WarehouseOutProductDTO dto : productList) {
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsDOS.stream().filter(item -> item.getId().equals(dto.getGoodsId())).findFirst().get(), GoodsVO.class);
+            goodsVO.setUsableStock(stockDOList.stream().filter(item -> item.getGoodsId().equals(dto.getGoodsId())).findFirst().get().getUsableStock());
+            dto.setGoodsVO(goodsVO);
+        }
+        outVO.setProductList(productList);
+        return outVO;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void delete(List<String> ids) {
-        List<WarehouseOutDO> warehouseOutList = listByIds(ids);
-        for (WarehouseOutDO warehouseOutDO : warehouseOutList) {
-            if (!new WarehouseOutAllowable(warehouseOutDO).getDelete()) {
-                throw new ServiceException(warehouseOutDO.getSn() + "不能进行删除操作");
-            }
+    public void delete(Long id) {
+        WarehouseOutDO aDo = getById(id);
+        if ("Y".equals(aDo.getHasSubmit())) {
+            throw new ServiceException("该数据已提交,不能删除");
         }
-
-        // 删除
-        removeBatchByIds(ids);
+        removeById(id);
         // 删除明细
-        warehouseOutItemManager.deleteByWarehouseOutId(ids);
-        // 订单改为未出库
-        orderManager.warehouseOutDelete(ids);
+        warehouseOutItemManager.remove(new LambdaQueryWrapper<WarehouseOutItemDO>().eq(WarehouseOutItemDO::getWarehouseOutId, id));
     }
 
     @Override
     public WarehouseOutVO preview(WarehouseOutPreviewDTO warehouseOutPreviewDTO) {
-        // 校验订单编号是否正确
-        List<OrderDO> orderList = checkOrderData(warehouseOutPreviewDTO.getOrderIdList());
-
-        // 查询订单明细
-        List<OrderItemDO> orderItemList = orderItemManager.listByOrderIds(warehouseOutPreviewDTO.getOrderIdList());
-
-        // 查询这些商品的可用入库批次
-        List<Long> productIds = convertList(orderItemList, OrderItemDO::getProductId);
-        Map<Long, List<WarehouseEntryBatchDO>> warehouseBatchMap = batchManager.listAvailableBatch(orderList.get(0).getWarehouseId(), productIds);
-        return converter.convertPreview(orderList, orderItemList, warehouseBatchMap);
+//        // 校验订单编号是否正确
+//        List<OrderDO> orderList = checkOrderData(warehouseOutPreviewDTO.getOrderIdList());
+//
+//        // 查询订单明细
+//        List<OrderItemDO> orderItemList = orderItemManager.listByOrderIds(warehouseOutPreviewDTO.getOrderIdList());
+//
+//        // 查询这些商品的可用入库批次
+//        List<Long> productIds = convertList(orderItemList, OrderItemDO::getProductId);
+//        Map<Long, List<WarehouseEntryBatchDO>> warehouseBatchMap = batchManager.listAvailableBatch(orderList.get(0).getWarehouseId(), productIds);
+//        return converter.convertPreview(orderList, orderItemList, warehouseBatchMap);
+        return null;
     }
 
     @Override
@@ -194,10 +220,6 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         if (!new WarehouseOutAllowable(warehouseOutDO).getShip()) {
             throw new ServiceException("当前状态不能进行发货操作");
         }
-
-        // 校验参数并填充数据到shipDTO
-        checkShipParams(warehouseOutDO.getDeliveryType(), shipDTO);
-
         // 扣减批次库存
         List<WarehouseOutItemDO> productList = warehouseOutItemManager.listByWarehouseOutId(id);
         List<StockUpdateDTO> stockUpdateList = converter.convertStockUpdateList(productList);
@@ -312,139 +334,32 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
                 .update();
     }
 
-    private void checkAddOrEdit(WarehouseOutDTO warehouseOutDTO) {
-        List<WarehouseOutDTO.Order> orderDTOList = warehouseOutDTO.getOrderList();
-        // 1. 校验订单
-        List<String> orderIds = convertList(orderDTOList, WarehouseOutDTO.Order::getOrderId);
-        List<OrderDO> orderList = checkOrderData(orderIds);
-        warehouseOutDTO.setOrderMap(convertMap(orderList, OrderDO::getId, Function.identity()));
-
-        // 2. 校验订单明细和批次
-        // 2.1 查询订单项
-        List<String> orderItemIds = orderDTOList.stream().flatMap(orderDTO -> orderDTO.getOrderItemList().stream())
-                .map(WarehouseOutDTO.OrderItem::getOrderItemId).collect(Collectors.toList());
-        Map<String, OrderItemDO> orderItemMap = orderItemManager.listAndConvertMap(orderItemIds, OrderItemDO::getId);
-        warehouseOutDTO.setOrderItemMap(orderItemMap);
-        // 2.2 查询批次
-        List<String> batchIds = orderDTOList.stream()
-                .flatMap(orderDTO -> orderDTO.getOrderItemList().stream().flatMap(orderItemDTO -> orderItemDTO.getBatchList().stream()))
-                .map(WarehouseOutDTO.StockBatch::getBatchId).collect(Collectors.toList());
-        Map<String, WarehouseEntryBatchDO> batchMap = batchManager.listAndConvertMap(batchIds, WarehouseEntryBatchDO::getId);
-        warehouseOutDTO.setBatchMap(batchMap);
-        // 2.3 循环校验订单明细和批次
-        for (WarehouseOutDTO.Order order : orderDTOList) {
-            for (WarehouseOutDTO.OrderItem orderItem : order.getOrderItemList()) {
-
-                // 校验订单明细
-                OrderItemDO orderItemDO = orderItemMap.get(orderItem.getOrderItemId());
-                if (orderItemDO == null) {
-                    throw new ServiceException(StrUtil.format("订单项【{}】不存在", orderItem.getOrderItemId()));
-                }
-                if (!orderItemDO.getOrderId().equals(order.getOrderId())) {
-                    throw new ServiceException(StrUtil.format("订单项【{}】不属于订单【{}】", orderItem.getOrderItemId(), order.getOrderId()));
-                }
-
-                // 校验批次
-                for (WarehouseOutDTO.StockBatch stockBatch : orderItem.getBatchList()) {
-                    WarehouseEntryBatchDO batchDO = batchMap.get(stockBatch.getBatchId());
-                    if (batchDO == null) {
-                        throw new ServiceException(StrUtil.format("批次【{}】不存在", stockBatch.getBatchId()));
-                    }
-                    if (!batchDO.getProductId().equals(orderItemDO.getProductId())) {
-                        throw new ServiceException(StrUtil.format("批次【{}】不属于商品【{}】", batchDO.getId(), orderItemDO.getProductId()));
-                    }
-                    if (!batchDO.getWarehouseId().equals(orderList.get(0).getWarehouseId())) {
-                        throw new ServiceException(StrUtil.format("批次【{}】不属于仓库【{}】", batchDO.getId(), orderList.get(0).getWarehouseId()));
-                    }
-                    // 这里先前置校验一下,后续发货时会真正校验库存
-                    if (batchDO.getRemainNum() < stockBatch.getOutNum()) {
-                        throw new ServiceException(StrUtil.format("批次【{}】的剩余库存数不足", batchDO.getSn()));
-                    }
-
-                }
-
-                // 校验orderItem的销售数量和批次的出库数量是否一致
-                if (orderItemDO.getNum() != orderItem.getBatchList().stream().mapToInt(WarehouseOutDTO.StockBatch::getOutNum).sum()) {
-                    throw new ServiceException(StrUtil.format("商品【{}】的销售数量和出库数量不一致", orderItemDO.getProductName()));
-                }
-            }
-        }
-
-        // 仓库提货人
-        AdminUser warehouseConsignee = adminUserManager.getModel(warehouseOutDTO.getWarehouseConsigneeId());
-        if (warehouseConsignee == null) {
-            throw new ServiceException("仓库提货人不存在");
-        }
-        warehouseOutDTO.setWarehouseConsignee(warehouseConsignee);
-
-    }
-
-    private void checkShipParams(OrderDeliveryType deliveryType, WarehouseOutShipDTO shipDTO) {
-        if (deliveryType == OrderDeliveryType.express) {
-            if (shipDTO.getLogisticsCompanyId() == null) {
-                throw new ServiceException("请选择物流公司");
-            }
-            if (StringUtil.isEmpty(shipDTO.getTrackingNumber())) {
-                throw new ServiceException("物流单号不能为空");
-            }
-            LogisticsCompanyDO logisticsCompanyDO = logisticsCompanyManager.getModel(shipDTO.getLogisticsCompanyId());
-            if (logisticsCompanyDO == null) {
-                throw new ServiceException("物流公司不存在");
-            }
-            shipDTO.setLogisticsCompanyName(logisticsCompanyDO.getName());
-        }
-
+    @Override
+    public void kdShip(PreOrderModel preOrderModel) {
+        kuaiDiNiaoService.preOrder(preOrderModel);
     }
 
-    private List<OrderDO> checkOrderData(List<String> orderIds) {
-        // 校验订单存在
-        List<OrderDO> orderList = orderManager.listByIds(orderIds);
-        Map<String, OrderDO> orderMap = convertMap(orderList, OrderDO::getId, Function.identity());
-        for (String orderId : orderIds) {
-            OrderDO orderDO = orderMap.get(orderId);
-            if (orderDO == null) {
-                throw new ServiceException(StrUtil.format("订单【{}】不存在", orderId));
-            }
-            if (!new OrderAllowable(orderDO).getWarehouseOut()) {
-                throw new ServiceException(StrUtil.format("订单【{}】不允许进行出库操作", orderDO.getSn()));
-            }
-        }
-
-        // 校验是否是同一仓库的订单
-        Map<Long, List<OrderDO>> groupByWarehouse = orderList.stream().collect(Collectors.groupingBy(OrderDO::getWarehouseId));
-        if (groupByWarehouse.size() != 1) {
-            throw new ServiceException("只能选择同一个仓库的订单");
-        }
-
-        // 校验是否是同一会员的订单
-        Map<Long, List<OrderDO>> groupByMember = orderList.stream().collect(Collectors.groupingBy(OrderDO::getMemberId));
-        if (groupByMember.size() != 1) {
-            throw new ServiceException("只能选择同一个会员的订单");
-        }
-        // 校验所有订单的配送方式是否相同
-        Map<OrderDeliveryType, List<OrderDO>> groupByShippingType = orderList.stream().collect(Collectors.groupingBy(OrderDO::getDeliveryType));
-        if (groupByShippingType.size() != 1) {
-            throw new ServiceException("不能同时选择物流和自提订单");
-        }
-
-//        // 如果是物流的话,校验是否是同一收货地址
-//        if (OrderDeliveryType.express.name().equals(orderList.get(0).getShippingType())) {
-//            Map<String, List<OrderDO>> groupByAddress = orderList.stream().collect(Collectors.groupingBy(orderDO -> orderDO.getShipCountyId() + "_" + orderDO.getShipTownId()));
-//            if (groupByAddress.size() != 1) {
-//                throw new ServiceException("只能选择同一收货地址的订单");
-//            }
-//        }
-
-        // 如果是自提的话,校验是否是同一门店
-        if (orderList.get(0).getDeliveryType() == OrderDeliveryType.self_pick) {
-            Map<Long, List<OrderDO>> groupByBranch = orderList.stream().collect(Collectors.groupingBy(OrderDO::getStoreId));
-            if (groupByBranch.size() != 1) {
-                throw new ServiceException("只能选择同一自提门店的订单");
+    @Override
+    public Page<GoodsVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam) {
+        IPage<ProductStockDO> page = new Page<>(queryParam.getPageNo(), queryParam.getPageSize());
+        IPage<ProductStockDO> page1 = productStockManager.page(page, new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, warehouseId)
+                .gt(ProductStockDO::getUsableStock, 0));
+        List<Long> collect = page1.getRecords().stream().map(ProductStockDO::getGoodsId).collect(Collectors.toList());
+        if (CollectionUtil.isNotEmpty(collect)) {
+            List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, collect));
+            List<GoodsVO> beanVo = BeanUtils.toBean(goodsDOS, GoodsVO.class);
+            for (GoodsVO goodsVO : beanVo) {
+                goodsVO.setUsableStock(page1.getRecords().stream().filter(item -> item.getGoodsId().equals(goodsVO.getId())).findFirst().get().getUsableStock());
             }
+            Page<GoodsVO> pageVo = new Page<>(queryParam.getPageNo(), queryParam.getPageNo());
+            pageVo.setPages(page1.getPages());
+            pageVo.setSize(page1.getSize());
+            pageVo.setTotal(page1.getTotal());
+            pageVo.setRecords(beanVo);
+            return pageVo;
         }
-
-        return orderList;
+        return new Page<>();
     }
-
 }
 

+ 48 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/GaoDeUtil.java

@@ -0,0 +1,48 @@
+package com.hys.app.service.kuaidiniao;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+
+import com.google.protobuf.ServiceException;
+import com.hys.app.service.kuaidiniao.entity.LongitudeLatitude;
+import org.json.JSONObject;
+
+public class GaoDeUtil {
+    private static final String GAODE_GEOCODE_API = "http://restapi.amap.com/v3/geocode/geo?key=%s&address=%s";
+    private static final String API_KEY = "c2f5532f8238a3523a9f381cb3e630c8";
+
+    public static  LongitudeLatitude getLongitudeLatitude(String location) {
+        LongitudeLatitude longitudeLatitude = new LongitudeLatitude();
+        try {
+            String geocodeApi = String.format(GAODE_GEOCODE_API, API_KEY, java.net.URLEncoder.encode(location, "UTF-8"));
+
+            URL url = new URL(geocodeApi);
+            URLConnection connection = url.openConnection();
+            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+            String inputLine;
+            StringBuilder content = new StringBuilder();
+            while ((inputLine = in.readLine()) != null) {
+                content.append(inputLine);
+            }
+            in.close();
+
+            JSONObject jsonObject = new JSONObject(content.toString());
+            if ("1".equals(jsonObject.getString("status"))) {
+                JSONObject geocodes = jsonObject.getJSONArray("geocodes").getJSONObject(0);
+                String location1 = geocodes.getString("location");
+                String[] locations = location1.split(",");
+                double longitude =Double.valueOf(locations[0]) ;
+                double latitude =Double.valueOf(locations[1]) ;
+                longitudeLatitude.setLongitude(String.valueOf(longitude));
+                longitudeLatitude.setLatitude(String.valueOf(latitude));
+            } else {
+                throw new ServiceException("位置解析失败,错误码:" + jsonObject.getString("infocode"));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return longitudeLatitude;
+    }
+}

+ 58 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KdConstants.java

@@ -0,0 +1,58 @@
+package com.hys.app.service.kuaidiniao;
+
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 快递鸟接口指令常量类
+ */
+public class KdConstants {
+    @ApiModelProperty(value = "预下单")
+    public static final String preOrder = "2201";
+    @ApiModelProperty(value = "下单")
+    public static final String createOrder = "2202";
+    @ApiModelProperty(value = "预取消下单")
+    public static final String preCancelOrder = "2203";
+    @ApiModelProperty(value = "取消下单")
+    public static final String cancelOrder = "2204";
+    @ApiModelProperty(value = "查询轨迹")
+    public static final String queryTrajectory = "2206";
+    @ApiModelProperty(value = "加价")
+    public static final String markPrice = "2207";
+    @ApiModelProperty(value = "订单加价类型查询接口")
+    public static final String markPriceType = "2208";
+    @ApiModelProperty(value = "订单加价详情查询接口")
+    public static final String queryMarkPrice = "2209";
+    @ApiModelProperty(value = "创建门店接口")
+    public static final String createStore = "2211";
+    @ApiModelProperty(value = "修改门店接口")
+    public static final String updateStore = "2212";
+    @ApiModelProperty(value = "图片上传接口")
+    public static final String uploadPic = "2213";
+    @ApiModelProperty(value = "创建品牌接口")
+    public static final String createBrand = "2214";
+    @ApiModelProperty(value = "查询路由轨迹地图接口")
+    public static final String queryRoad = "2215";
+
+
+    @ApiModelProperty(value = "回调")
+    public static final String callBack = "103";
+    @ApiModelProperty(value = "推送待接单状态")
+    public static final String callBackPreAccept = "100";
+    @ApiModelProperty(value = "推送业务员接单状态")
+    public static final String callBackAccept = "201";
+    @ApiModelProperty(value = "推送业务员到达状态")
+    public static final String callBackAttain = "202";
+    @ApiModelProperty(value = "推送配送中状态")
+    public static final String callBackSending = "300";
+    @ApiModelProperty(value = "正常签收")
+    public static final String callBackSign = "401";
+    @ApiModelProperty(value = "退回签收")
+    public static final String callBackSignRefuse = "402";
+    @ApiModelProperty(value = "推送取消状态")
+    public static final String callBackCancelStatus = "500";
+    @ApiModelProperty(value = "推送下单失败状态")
+    public static final String callBackCreateOrderFail = "600";
+    @ApiModelProperty(value = "推送订单费用状态")
+    public static final String callBackFeeStatus = "206";
+}

+ 14 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java

@@ -0,0 +1,14 @@
+package com.hys.app.service.kuaidiniao;
+
+import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
+
+public interface KuaiDiNiaoService {
+
+
+    /**
+     * 快递鸟预下单接口
+     *
+     * @param preOrderModel 接收参数
+     */
+    void preOrder(PreOrderModel preOrderModel);
+}

+ 98 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -0,0 +1,98 @@
+package com.hys.app.service.kuaidiniao;
+
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ObjectUtil;
+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.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.service.kuaidiniao.entity.LongitudeLatitude;
+import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Map;
+
+@Service
+public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
+
+    /**
+     * 快递鸟apiId
+     */
+    @Value("${kuaidianiao.id}")
+    private String id;
+    /**
+     * 快递鸟apiKey
+     */
+    @Value("${kuaidianiao.key}")
+    private String apiKey;
+    /**
+     * 快递鸟请求地址
+     */
+    @Value("${kuaidianiao.apiUrl}")
+    private String url;
+
+
+    @Override
+    public void preOrder(PreOrderModel preOrderModel) {
+        //填充参数
+        fillParam(preOrderModel);
+        String resJson = sendUrl(JSONUtil.toJsonStr(preOrderModel), KdConstants.preOrder);
+        System.out.println(resJson);
+    }
+
+    /**
+     * @param dataJson      业务参数
+     * @param interfaceType 请求接口指令
+     * @return 返回JSON
+     */
+    private String sendUrl(String dataJson, String interfaceType) {
+        try {
+            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(dataJson + apiKey)), "UTF-8");
+            //拼接参数
+            String param = "interfaceType=" + interfaceType + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
+            //发请求
+            String res = HttpUtil.post(url, param);
+            Map map = JSON.parseObject(res, Map.class);
+            //resultCode == 100表示预下单成功,预下单郑工后立马调用下单接口
+            if (ObjectUtil.isNotNull(map.get("resultCode")) && 100 == Integer.valueOf(map.get("resultCode").toString())) {
+                //拼接参数
+                String createParam = "interfaceType=" + KdConstants.createOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
+                //发请求
+                String resCreate = HttpUtil.post(url, createParam);
+                Map mapCreate = JSON.parseObject(resCreate, Map.class);
+                //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);
+                    return mapData.get("kdnOrderCode").toString();
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ServiceException("请求快掉鸟发货异常,请联系客服");
+        }
+        return null;
+    }
+
+    private void fillParam(PreOrderModel preOrderModel) {
+        //填充送货人的经纬度
+        LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getAddress());
+        preOrderModel.getSender().setLongitude(longitudeLatitudeSender.getLongitude());
+        preOrderModel.getSender().setLatitude(longitudeLatitudeSender.getLatitude());
+        //填充收货人的经纬度
+        LongitudeLatitude longitudeLatitudeReceiver = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getAddress());
+        preOrderModel.getReceiver().setLongitude(longitudeLatitudeReceiver.getLongitude());
+        preOrderModel.getReceiver().setLatitude(longitudeLatitudeReceiver.getLatitude());
+        //获取下单人信息
+        preOrderModel.setOrderName(AdminUserContext.getAdminUserName());
+        preOrderModel.setOrderPhone("13127911751");
+
+
+    }
+}

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

@@ -0,0 +1,29 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+/**
+ * 快递鸟  预下单商品接收类
+ */
+@Data
+public class KdGood {
+
+    @ApiModelProperty(value = "商品三级编码")
+    private String categoryThree = "2197";
+
+    @ApiModelProperty(value = "物品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "物品价格")
+    private Double goodsPrice;
+
+    @Range(min = 1, max = 99)
+    @ApiModelProperty(value = "数量")
+    private Integer quantity;
+
+    @ApiModelProperty(value = "物品单位(箱/件)")
+    private String unit;
+}

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

@@ -0,0 +1,17 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 高德获取经纬度接受类
+ */
+@Data
+public class LongitudeLatitude {
+
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+}

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

@@ -0,0 +1,105 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 预下单参数
+ */
+@Data
+public class PreOrderModel {
+    @ApiModelProperty(value = "门店业务类型 1:商家门店  2:个人即时配")
+    private Integer storeBusinessType = 2;
+
+    @ApiModelProperty(value = "1、storeCode平台门店编码(商家自定义门店编码,唯一),个人即时配编码固定传storeCode;2、merchantCode快递鸟门店编码(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
+    private String storeCode ;
+
+    @ApiModelProperty(value = "(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
+    private String merchantCode = "merchantCode";
+
+    @ApiModelProperty(value = "商户名称")
+    private String merchantName = "上海瑞赢旷视科技";
+
+    @ApiModelProperty(value = "产品类型编码,默认:B")
+    private String productTypeCode = "B";
+
+    @ApiModelProperty(value = "即时配编码,多个即时配编码用逗号分隔。")
+    private String intraCode = "SFTC,";
+
+    @ApiModelProperty(value = "预约类型0:立即单、1:预约上门单")
+    private Integer appointmentType;
+
+    @ApiModelProperty(value = "预约上门单必填预约上门时间格式:YYYY-MM-DD  hh:mm:ss说明:当前时间+2小时,10分钟间隔向上取整。")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime appointmentTime;
+
+    @ApiModelProperty(value = "交通方式,默认0:未指定。指定交通方式会产生额外的费用。暂不支持")
+    private Integer travelWay = 0;
+
+    @ApiModelProperty(value = "下单类型1:帮我送 、2:帮我取;默认1")
+    private Integer deliveryType;
+
+    @ApiModelProperty(value = "坐标类型1:百度地图、 2:高德地图 、3:腾讯地图")
+    private Integer lbsType = 2;
+
+    @ApiModelProperty(value = "物品类型")
+    private String goodsType;
+
+    @ApiModelProperty(value = "物品数量1-99的整数")
+    private Integer goodsNum;
+
+    @ApiModelProperty(value = "物品总重量单位kg")
+    private Double totalWeight;
+
+    @ApiModelProperty(value = "物品总体积,单位立方厘米")
+    private Double totalVolume;
+
+    @ApiModelProperty(value = "物品声明价值,单位:元。去尾法,保留两位小数。所有物品总计声明价值。")
+    private Double declaredValue;
+
+    @ApiModelProperty(value = "是否保价  1:是 0:否 暂不支持保价,默认传0")
+    private Integer insured = 0;
+
+    @ApiModelProperty(value = "丢破损保障费用,单位:元。去尾法,保留两位小数。根据声明价值计算需要支付的保障用。暂不支持,默认传0")
+    private Double insuranceFee = 0.0;
+
+    @ApiModelProperty(value = "下单人姓名")
+    private String orderName;
+
+    @ApiModelProperty(value = "下单人手机号(下单人手机号和下单人座机二选一必填)")
+    private String orderMobile;
+
+    @ApiModelProperty(value = "下单人座机号(下单人手机号和下单人座机二选一必填)")
+    private String orderPhone;
+
+    @ApiModelProperty(value = "货物信息,最大数量50")
+    private List<KdGood> goodsList;
+
+    @ApiModelProperty(value = "发货人信息")
+    @Valid
+    private ReceiverSender sender;
+
+    @ApiModelProperty(value = "收货人信息")
+    @Valid
+    private ReceiverSender receiver;
+
+    @ApiModelProperty(value = "商家订单号 全局唯一")
+    private String orderCode;
+
+    @ApiModelProperty(value = "取货码")
+    private String pickupCode;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+}

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

@@ -0,0 +1,39 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ReceiverSender {
+
+
+    @ApiModelProperty(value = "省")
+    private String provinceName;
+
+    @ApiModelProperty(value = "市")
+    private String cityName;
+
+    @ApiModelProperty(value = "县")
+    private String areaName;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "寄件人/收件人名称")
+    private String name;
+
+    @ApiModelProperty(value = "电话 座机2选一")
+    private String mobile;
+
+    @ApiModelProperty(value = "座机 电话座机2选一")
+    private String phone;
+
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+}

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

@@ -0,0 +1,32 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+/**
+ * 推送下单失败状态
+ */
+public class ReturnCreateOrderFail {
+    @ApiModelProperty(value = "快递鸟订单号")
+    private String kdnOrderCode ;
+
+    @ApiModelProperty(value = "商家订单号")
+    private String orderCode;
+
+    @ApiModelProperty(value = "订单状态")
+    private Integer orderStatus;
+
+    @ApiModelProperty(value = "失败代码")
+    private Integer failCode;
+
+    @ApiModelProperty(value = "失败原因")
+    private String failReason;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "请求时间毫秒级时间戳")
+    private Long requestTime;
+
+
+}

+ 14 - 9
module-erp/src/main/resources/mapper/ProductStockMapper.xml

@@ -9,21 +9,26 @@
     </select>
 
     <!-- 查询产品预警库存信息分页列表 -->
-    <select id="selectList" resultType="com.hys.app.model.erp.vo.ProductStockV1" useCache="false">
+    <select id="queryList" resultType="com.hys.app.model.erp.vo.ProductStockV1" useCache="false">
         select
             ps.id,
-            w.id as warehouse_id,w.name as warehouse_name,
-            g.id as goods_id,g.name as goods_name,g.bar_code as goods_bar_code,
-            g.sn_code as goods_sn_code,g.goods_style as goods_style,
-            g.goods_unit as goods_unit,
-            p.id as product_id,p.name as product_name,
-            a.id as area_id,a.name as area_name
-
+            ps.actual_stock,
+            ps.usable_stock,
+            ps.transit_Stock,
+            ps.warning_stock,
+            w.id as warehouse_id,
+            w.name as warehouse_name,
+            g.id as goods_id,
+            g.name as goodsName,
+            g.bar_code as goods_bar_code,
+            g.sn ,
+            p.id as product_id,
+            p.name as product_name,
+            p.unit goodsUnit
         from erp_product_stock ps
         left join erp_warehouse w on ps.warehouse_id = w.id
         left join erp_product p on ps.product_id = p.id
         left join erp_goods g on ps.goods_id = g.id
-        left join erp_warehouse_area a on ps.area_id = a.id
         <where>
             <if test="request.warehouseId != null and request.warehouseId != 0">
                 and ps.id = #{request.warehouseId}

+ 1 - 1
module-erp/src/main/resources/mapper/WarehouseEntryProductMapper.xml

@@ -6,7 +6,7 @@
     <!-- 查询出库单统计分页列表数据 -->
     <select id="queryList" resultType="com.hys.app.model.erp.vo.WarehouseEntryItemV1" useCache="false">
         select
-        e.id,
+        item.id,
         e.sn as sn,
         w.name as warehouse_name,
         g.sn as goods_sn,g.name as goods_name,

+ 1 - 1
module-erp/src/main/resources/mapper/WarehouseOutItemMapper.xml

@@ -4,7 +4,7 @@
 <mapper namespace="com.hys.app.mapper.erp.WarehouseOutItemMapper">
 
     <!-- 查询出库单统计分页列表数据 -->
-    <select id="selectList" resultType="com.hys.app.model.erp.vo.WarehouseOutItemV1" useCache="false">
+    <select id="queryList" resultType="com.hys.app.model.erp.vo.WarehouseOutItemV1" useCache="false">
         select
             item.id,
             o.sn as sn,h.name as warehouse_name,