Browse Source

改动过的

huanglizhi 1 year ago
parent
commit
534c364b85
86 changed files with 1251 additions and 1072 deletions
  1. 21 22
      module-erp/src/main/java/com/hys/app/controller/erp/goods/GoodsManagerController.java
  2. 0 7
      module-erp/src/main/java/com/hys/app/controller/erp/purchase/WarehouseEntryProductManagerController.java
  3. 7 8
      module-erp/src/main/java/com/hys/app/controller/erp/sale/OrderController.java
  4. 11 32
      module-erp/src/main/java/com/hys/app/controller/erp/warehouse/StockTransferManagerController.java
  5. 13 4
      module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseOutManagerController.java
  6. 45 0
      module-erp/src/main/java/com/hys/app/controller/returnBack/KdnController.java
  7. 8 0
      module-erp/src/main/java/com/hys/app/controller/system/AdminUserOperationManagerController.java
  8. 0 53
      module-erp/src/main/java/com/hys/app/converter/erp/GoodsConverter.java
  9. 22 0
      module-erp/src/main/java/com/hys/app/converter/erp/OrderConverter.java
  10. 0 2
      module-erp/src/main/java/com/hys/app/converter/erp/ProcurementContractProductConverter.java
  11. 1 2
      module-erp/src/main/java/com/hys/app/converter/erp/ProductConverter.java
  12. 0 34
      module-erp/src/main/java/com/hys/app/converter/erp/StockTransferConverter.java
  13. 0 29
      module-erp/src/main/java/com/hys/app/converter/erp/StockTransferProductConverter.java
  14. 4 2
      module-erp/src/main/java/com/hys/app/framework/security/ManagerSecurityConfig.java
  15. 0 2
      module-erp/src/main/java/com/hys/app/mapper/goods/GoodsMapper.java
  16. 0 1
      module-erp/src/main/java/com/hys/app/mapper/goods/ProductMapper.java
  17. 15 1
      module-erp/src/main/java/com/hys/app/mapper/system/AdminUserMapper.java
  18. 2 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/CustomerDO.java
  19. 36 50
      module-erp/src/main/java/com/hys/app/model/erp/dos/GoodsDO.java
  20. 7 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderDO.java
  21. 21 22
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductDO.java
  22. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductStockDO.java
  23. 2 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/StockDamageReport.java
  24. 17 4
      module-erp/src/main/java/com/hys/app/model/erp/dos/StockTransferDO.java
  25. 8 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/StockTransferProductDO.java
  26. 5 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseEntryProductDO.java
  27. 1 2
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutDO.java
  28. 5 4
      module-erp/src/main/java/com/hys/app/model/erp/dto/CustomerDTO.java
  29. 27 41
      module-erp/src/main/java/com/hys/app/model/erp/dto/GoodsDTO.java
  30. 6 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderDTO.java
  31. 10 7
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java
  32. 8 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderReturnItemDTO.java
  33. 20 27
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java
  34. 13 2
      module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportDTO.java
  35. 13 4
      module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportProductDTO.java
  36. 11 6
      module-erp/src/main/java/com/hys/app/model/erp/dto/StockInventoryProductDTO.java
  37. 17 47
      module-erp/src/main/java/com/hys/app/model/erp/dto/StockTransferDTO.java
  38. 9 3
      module-erp/src/main/java/com/hys/app/model/erp/dto/StockTransferProductDTO.java
  39. 2 2
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseOutDTO.java
  40. 14 3
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseOutProductDTO.java
  41. 25 0
      module-erp/src/main/java/com/hys/app/model/erp/enums/CustomerTypeEnum.java
  42. 24 0
      module-erp/src/main/java/com/hys/app/model/erp/enums/TransferTypeEnum.java
  43. 4 22
      module-erp/src/main/java/com/hys/app/model/erp/vo/GoodsVO.java
  44. 2 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderReturnItemVO.java
  45. 8 18
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderVO.java
  46. 4 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/ProductVO.java
  47. 10 1
      module-erp/src/main/java/com/hys/app/model/erp/vo/StockDamageReportVO.java
  48. 0 21
      module-erp/src/main/java/com/hys/app/model/erp/vo/StockTransferAllowable.java
  49. 19 3
      module-erp/src/main/java/com/hys/app/model/erp/vo/StockTransferProductVO.java
  50. 36 16
      module-erp/src/main/java/com/hys/app/model/erp/vo/StockTransferVO.java
  51. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/WarehouseOutVO.java
  52. 3 0
      module-erp/src/main/java/com/hys/app/model/system/dos/DeptDO.java
  53. 22 3
      module-erp/src/main/java/com/hys/app/service/erp/GoodsManager.java
  54. 3 7
      module-erp/src/main/java/com/hys/app/service/erp/OrderManager.java
  55. 1 3
      module-erp/src/main/java/com/hys/app/service/erp/ProductManager.java
  56. 28 13
      module-erp/src/main/java/com/hys/app/service/erp/ProductStockManager.java
  57. 5 3
      module-erp/src/main/java/com/hys/app/service/erp/StockTransferManager.java
  58. 1 1
      module-erp/src/main/java/com/hys/app/service/erp/StockTransferProductManager.java
  59. 0 5
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseEntryProductManager.java
  60. 3 1
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseOutManager.java
  61. 105 137
      module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java
  62. 8 27
      module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsSnManagerImpl.java
  63. 29 32
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java
  64. 8 21
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderReturnManagerImpl.java
  65. 3 15
      module-erp/src/main/java/com/hys/app/service/erp/impl/ProductManagerImpl.java
  66. 23 8
      module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java
  67. 15 18
      module-erp/src/main/java/com/hys/app/service/erp/impl/StockDamageReportManagerImpl.java
  68. 14 8
      module-erp/src/main/java/com/hys/app/service/erp/impl/StockInventoryManagerImpl.java
  69. 105 171
      module-erp/src/main/java/com/hys/app/service/erp/impl/StockTransferManagerImpl.java
  70. 1 1
      module-erp/src/main/java/com/hys/app/service/erp/impl/StockTransferProductManagerImpl.java
  71. 12 10
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryManagerImpl.java
  72. 0 17
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryProductManagerImpl.java
  73. 11 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseManagerImpl.java
  74. 48 44
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java
  75. 14 3
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java
  76. 95 6
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java
  77. 14 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/AddressDTO.java
  78. 1 1
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/KdGood.java
  79. 32 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReCreateOrderFail.java
  80. 23 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReturnBackBase.java
  81. 34 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/resReturnBackBase.java
  82. 14 0
      module-erp/src/main/java/com/hys/app/service/system/AdminUserManager.java
  83. 20 4
      module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java
  84. 15 0
      module-erp/src/main/resources/mapper/system/AdminUserMapper.xml
  85. 1 1
      server/src/main/resources/application-test.yml
  86. 3 3
      server/src/main/resources/application.yml

+ 21 - 22
module-erp/src/main/java/com/hys/app/controller/erp/goods/GoodsManagerController.java

@@ -1,13 +1,13 @@
 package com.hys.app.controller.erp.goods;
 
-import com.hys.app.converter.erp.GoodsConverter;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.model.erp.dos.GoodsDO;
 import com.hys.app.model.erp.dto.GoodsDTO;
 import com.hys.app.model.erp.dto.GoodsQueryParams;
-import com.hys.app.model.erp.dto.GoodsSortDto;
 import com.hys.app.model.erp.dto.GoodsUpdateDTO;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductStockVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
 import com.hys.app.service.erp.GoodsManager;
@@ -35,9 +35,6 @@ public class GoodsManagerController {
     @Autowired
     private GoodsManager goodsManager;
 
-    @Autowired
-    private GoodsConverter converter;
-
     @ApiOperation(value = "分页列表")
     @GetMapping
     public WebPage<GoodsVO> list(GoodsQueryParams queryParams) {
@@ -51,28 +48,22 @@ public class GoodsManagerController {
         goodsManager.add(goodsDTO);
     }
 
-
-
     @ApiOperation(value = "更新上下架")
     @PostMapping("/update")
     @Log(client = LogClient.admin, detail = "修改id为[${id}]的商品")
     public void status(@RequestBody @Valid GoodsUpdateDTO request) {
-        GoodsDO goodsDO=goodsManager.getInfo(request.getId());
-        goodsDO.setMarketEnable(request.getMarketEnable());
+        GoodsDO goodsDO = goodsManager.getById(request.getId());
+        goodsDO.setMarketEnable(!request.getMarketEnable());
         goodsManager.updateById(goodsDO);
     }
 
-
-
-    @ApiOperation(value = "更新商品排序")
-    @PostMapping("/sort")
-    @Log(client = LogClient.admin, detail = "更新商品排序")
-    public void sort(@RequestBody @Valid GoodsSortDto request) {
-        goodsManager.updateSort(request);
+    @ApiOperation(value = "更新上下架之前校验库存")
+    @PostMapping("/update/check")
+    @Log(client = LogClient.admin, detail = "修改id为[${id}]的商品")
+    public Boolean updateCheck(@RequestBody @Valid GoodsUpdateDTO request) {
+        return goodsManager.updateCheck(request.getId());
     }
 
-
-
     @ApiOperation(value = "修改")
     @PutMapping("/{id}")
     @Log(client = LogClient.admin, detail = "修改id为[${id}]的商品")
@@ -88,10 +79,18 @@ public class GoodsManagerController {
     }
 
     @ApiOperation(value = "删除")
-    @DeleteMapping("/{ids}")
-    @Log(client = LogClient.admin, detail = "删除id为[${ids}]的商品")
-    public void delete(@PathVariable List<Long> ids) {
-        goodsManager.delete(ids);
+    @DeleteMapping("/{id}")
+    @Log(client = LogClient.admin, detail = "删除id为[${id}]的商品")
+    public void delete(@PathVariable Long id) {
+        goodsManager.delete(id);
+    }
+
+
+    @ApiOperation(value = "新增入库获取所有的sku信息")
+    @GetMapping("/getSkuByWarehouse")
+    @Log(client = LogClient.admin, detail = "新增入库获取所有的sku信息")
+    public List<ProductVO> getSkuByWarehouse() {
+        return goodsManager.getSkuByWarehouse();
     }
 }
 

+ 0 - 7
module-erp/src/main/java/com/hys/app/controller/erp/purchase/WarehouseEntryProductManagerController.java

@@ -50,12 +50,5 @@ public class WarehouseEntryProductManagerController {
         webPage.setPageNo(queryParams.getPageNo());
         return webPage;
     }
-
-    @ApiOperation(value = "查找这个商品在这个仓库的库存")
-    @PostMapping("/getStockByWarehouseGood")
-    public List<GoodsVO>  getStockByWarehouseGood(@RequestBody WareQueryGoodParams params) {
-       return warehouseEntryProductManager.getStockByWarehouseGood(params);
-    }
-
 }
 

+ 7 - 8
module-erp/src/main/java/com/hys/app/controller/erp/sale/OrderController.java

@@ -1,13 +1,16 @@
 package com.hys.app.controller.erp.sale;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.security.model.Admin;
 import com.hys.app.model.erp.dto.OrderDTO;
 import com.hys.app.model.erp.dto.OrderQueryParams;
 import com.hys.app.model.erp.vo.OrderVO;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
 import com.hys.app.service.erp.OrderManager;
+import com.hys.app.service.kuaidiniao.entity.AddressDTO;
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -36,6 +39,7 @@ public class OrderController {
     @ApiOperation(value = "分页列表")
     @GetMapping
     public WebPage<OrderVO> list(OrderQueryParams queryParams) {
+        Admin admin = AdminUserContext.getAdmin();
         return orderManager.list(queryParams);
     }
 
@@ -80,18 +84,13 @@ public class OrderController {
         return orderManager.hasSendOrder(queryParams);
     }
 
-    @ApiOperation(value = "快递鸟发货获取单号")
-    @PostMapping("/kdShip/{orderId}")
-    @Log(client = LogClient.admin, detail = "出库单[${shipDTO.id}]发货")
-    public String kdShip(@PathVariable(value = "orderId") Long orderId ,@RequestBody @Valid PreOrderModel preOrderModel) {
-        return orderManager.kdShip(preOrderModel,orderId);
-    }
+
 
     @ApiOperation(value = "发货")
     @PostMapping("/orderSend/{orderId}")
     @Log(client = LogClient.admin, detail = "销售列表发货")
-    public void orderSend(@PathVariable(value = "orderId") Long orderId) {
-         orderManager.orderSend(orderId);
+    public void orderSend(@PathVariable(value = "orderId") Long orderId ,@RequestBody AddressDTO addressDTO) {
+         orderManager.orderSend(orderId,addressDTO);
     }
 }
 

+ 11 - 32
module-erp/src/main/java/com/hys/app/controller/erp/warehouse/StockTransferManagerController.java

@@ -16,8 +16,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-import java.util.List;
+
 
 /**
  * 库存调拨API
@@ -55,47 +54,27 @@ public class StockTransferManagerController {
         stockTransferManager.edit(stockTransferDTO);
     }
 
+    @ApiOperation(value = "查看詳情")
+    @GetMapping("/{id}")
+    @Log(client = LogClient.admin, detail = "编辑ID为[${id}]的调拨单")
+    public StockTransferVO getDetail(@PathVariable Long id) {
+        return stockTransferManager.getDetail(id);
+    }
+
     @ApiOperation(value = "提交调拨单")
     @PostMapping("/{id}/submit")
     @Log(client = LogClient.admin, detail = "提交ID为[${id}]的调拨单")
-    public void submit(@PathVariable String id) {
+    public void submit(@PathVariable Long id) {
         stockTransferManager.submit(id);
     }
 
-    @ApiOperation(value = "撤销提交调拨单")
+    @ApiOperation(value = "撤销调拨单")
     @PostMapping("/{id}/withdraw")
-    @Log(client = LogClient.admin, detail = "撤销提交ID为[${id}]的调拨单")
+    @Log(client = LogClient.admin, detail = "撤销ID为[${id}]的调拨单")
     public void withdraw(@PathVariable Long id) {
         stockTransferManager.withdraw(id);
     }
 
-    @ApiOperation(value = "批量确认调拨单")
-    @PostMapping("/{ids}/confirm")
-    @Log(client = LogClient.admin, detail = "确认ID为[${ids}]的调拨单")
-    public void confirm(@PathVariable List<String> ids, @NotNull(message = "调入人id不能为空") Long handleById) {
-        stockTransferManager.confirm(ids, handleById);
-    }
-
-    @ApiOperation(value = "批量退回调拨单")
-    @PostMapping("/{ids}/reject")
-    @Log(client = LogClient.admin, detail = "退回ID为[${ids}]的调拨单")
-    public void reject(@PathVariable List<String> ids, Long handleById) {
-        stockTransferManager.reject(ids, handleById);
-    }
-
-    @ApiOperation(value = "查询")
-    @GetMapping("/{id}")
-    public StockTransferVO getDetail(@PathVariable String id) {
-        return stockTransferManager.getDetail(id);
-    }
-
-    @ApiOperation(value = "删除")
-    @DeleteMapping("/{ids}")
-    @Log(client = LogClient.admin, detail = "删除ID为[${ids}]的调拨单")
-    public void delete(@PathVariable List<String> ids) {
-        stockTransferManager.delete(ids);
-    }
-
     @ApiOperation(value = "查询库存调拨统计分页列表数据")
     @GetMapping("/statistics")
     public WebPage statistics(StockTransferStatisticsParam params) {

+ 13 - 4
module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseOutManagerController.java

@@ -6,6 +6,8 @@ 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.ProductStockVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.model.erp.vo.WarehouseOutVO;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
@@ -103,11 +105,18 @@ public class WarehouseOutManagerController {
         this.warehouseOutManager.export(response, params);
     }
 
-    @ApiOperation(value = "根据仓库找到所有库存大于0的商品")
+    @ApiOperation(value = "根据仓库找到所有sku库存大于0的商品")
+    @GetMapping("/getGoodByWarehouse/{warehouseId}/{orderType}")
+    @Log(client = LogClient.admin, detail = "根据仓库找到所有sku库存大于0的商品")
+    public Page<ProductVO> getGoodByWarehouseOrder(@PathVariable(value = "warehouseId" )Long warehouseId, BaseQueryParam queryParam,@PathVariable(value = "orderType") String orderType) {
+       return warehouseOutManager.getGoodByWarehouse(warehouseId,queryParam,orderType);
+    }
+
+    @ApiOperation(value = "根据仓库找到所有sku库存大于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);
+    @Log(client = LogClient.admin, detail = "根据仓库找到所有sku库存大于0的商品")
+    public Page<ProductVO> getGoodByWarehouse(@PathVariable(value = "warehouseId" )Long warehouseId, BaseQueryParam queryParam) {
+        return warehouseOutManager.getGoodByWarehouse(warehouseId,queryParam,null);
     }
 }
 

+ 45 - 0
module-erp/src/main/java/com/hys/app/controller/returnBack/KdnController.java

@@ -0,0 +1,45 @@
+package com.hys.app.controller.returnBack;
+
+import com.hys.app.model.support.LogClient;
+import com.hys.app.model.support.validator.annotation.Log;
+import com.hys.app.service.kuaidiniao.KuaiDiNiaoService;
+import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
+import com.hys.app.service.kuaidiniao.entity.ReturnBackBase;
+import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * OAuth2.0 授权 API
+ *
+ * @author 张崧
+ * @since 2024-02-20
+ */
+@Api(tags = "OAuth2.0 授权")
+@RestController
+@RequestMapping("/admin/erp/kdn")
+@Validated
+@Slf4j
+@AllArgsConstructor
+public class KdnController {
+    private  KuaiDiNiaoService kuaiDiNiaoService;
+
+    @PostMapping("/returnBack")
+    public resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase) {
+
+       return kuaiDiNiaoService.kdnReturnBack(returnBackBase);
+    }
+
+    @ApiOperation(value = "快递鸟发货获取单号")
+    @PostMapping("/kdShip/{orderId}")
+    @Log(client = LogClient.admin, detail = "出库单[${shipDTO.id}]发货")
+    public String kdShip(@PathVariable(value = "orderId") Long orderId , @RequestBody @Valid PreOrderModel preOrderModel) {
+        return kuaiDiNiaoService.kdShip(preOrderModel,orderId);
+    }
+}

+ 8 - 0
module-erp/src/main/java/com/hys/app/controller/system/AdminUserOperationManagerController.java

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 平台管理员控制器
@@ -103,4 +104,11 @@ public class AdminUserOperationManagerController {
 
         return adminUser;
     }
+
+
+    @GetMapping(value = "/getUserByDept")
+    @ApiOperation(value = "查看自己部门下的所有人员")
+    public List<AdminUser> getUserByDept() {
+        return this.adminUserManager.getUserByDept();
+    }
 }

+ 0 - 53
module-erp/src/main/java/com/hys/app/converter/erp/GoodsConverter.java

@@ -32,63 +32,10 @@ import static com.hys.app.framework.util.CollectionUtils.convertMap;
  */
 @Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
 public interface GoodsConverter {
-
-    @Mapping(target = "haveSpec", source = "spec")
-    GoodsDO convert(GoodsDTO goodsDTO);
-    GoodsVO convert(GoodsDO goodsDO);
-
-    GoodsDTO convert(GoodsVO goodsVO);
-
-    GoodsDTO convertDo(GoodsDO goodsDO);
-    List<GoodsVO> convert(List<GoodsDO> list);
-
     WebPage<GoodsVO> convert(WebPage<GoodsDO> webPage);
 
-    default WebPage<GoodsVO> combination(WebPage<GoodsDO> webPage, Map<Long, String> categoryNameMap, Map<String, String> brandNameMap, List<GoodsLabelRelationDO> goodsLabelRelationList, List<GoodsLabelDO> goodsLabelList) {
-        WebPage<GoodsVO> page = convert(webPage);
-
-        Map<Long, List<GoodsLabelRelationDO>> goodsIdLabelIdsMap = goodsLabelRelationList.stream().collect(Collectors.groupingBy(GoodsLabelRelationDO::getGoodsId));
-        Map<Long, String> labelMap = convertMap(goodsLabelList, GoodsLabelDO::getId, GoodsLabelDO::getName);
-
-        for (GoodsVO goodsVO : page.getData()) {
-            goodsVO.setCategoryName(categoryNameMap.get(goodsVO.getCategoryId()));
-            goodsVO.setBrandName(brandNameMap.get(goodsVO.getBrandId()));
-            // 商品标签
-            List<GoodsLabelRelationDO> labelRelationList = goodsIdLabelIdsMap.get(goodsVO.getId());
-            if (labelRelationList != null) {
-                String labelNames = labelRelationList.stream().map(goodsLabelRelationDO -> labelMap.get(goodsLabelRelationDO.getLabelId())).collect(Collectors.joining(","));
-                goodsVO.setLabelNames(labelNames);
-            }
-        }
-
-        return page;
-    }
-
-    default GoodsDO combination(GoodsDTO goodsDTO) {
-        GoodsDO goodsDO = convert(goodsDTO);
-
-        // 商品名称过滤敏感词
-        goodsDO.setName(SensitiveFilter.filter(goodsDTO.getName(), CharacterConstant.WILDCARD_STAR));
-        // 商品图片
-        goodsDO.setImage(goodsDTO.getImageList().get(0).getThumbnail());
-        // 将价格最低的sku的字段初始化到商品上
-        ProductDTO minPriceProduct = goodsDTO.getProductList().stream().min(Comparator.comparing(ProductDTO::getPrice)).get();
-        goodsDO.setPropertiesFromProduct(minPriceProduct);
-
-        return goodsDO;
-    }
 
-    default GoodsVO convert(GoodsDO goodsDO, List<ProductVO> productList, Map catInfo, BrandDO brandDO, List<GoodsGalleryDO> goodsGalleryList, List<GoodsParamsGroupVO> goodsParamsList) {
-        GoodsVO goodsVO = convert(goodsDO);
 
-        goodsVO.setProductList(productList);
-        goodsVO.setBrandName(brandDO == null ? "" : brandDO.getName());
-        goodsVO.setCategoryName(catInfo.get("catName").toString());
-        goodsVO.setCategoryIds((Long[]) catInfo.get("catIds"));
-        goodsVO.setImageList(goodsGalleryList);
-        goodsVO.setParamsList(goodsParamsList);
 
-        return goodsVO;
-    }
 }
 

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

@@ -68,5 +68,27 @@ public interface OrderConverter {
     @Mapping(target = "aDo.provinceCityArea", ignore = true)
     @Mapping(target = "aDo.deleted", ignore = true)
     void copyProperties(@MappingTarget OrderDO aDo, PreOrderModel preOrderModel, ReceiverSender receiver, ReceiverSender sender);
+
+
+
+    @Mapping(target = "preOrderModel.sender.longitude", source = "aDo.senderLongitude")
+    @Mapping(target = "preOrderModel.sender.latitude", source = "aDo.senderLatitude")
+    @Mapping(target = "preOrderModel.sender.phone", source = "aDo.senderPhone")
+    @Mapping(target = "preOrderModel.sender.mobile", source = "aDo.senderMobile")
+    @Mapping(target = "preOrderModel.sender.name", source = "aDo.senderName")
+    @Mapping(target = "preOrderModel.sender.address", source = "aDo.senderAddress")
+    @Mapping(target = "preOrderModel.sender.areaName", source = "aDo.senderAreaName")
+    @Mapping(target = "preOrderModel.sender.cityName", source = "aDo.senderCityName")
+    @Mapping(target = "preOrderModel.sender.provinceName", source = "aDo.senderProvinceName")
+    @Mapping(target = "preOrderModel.receiver.longitude", source = "aDo.receiverLongitude")
+    @Mapping(target = "preOrderModel.receiver.latitude", source = "aDo.receiverLatitude")
+    @Mapping(target = "preOrderModel.receiver.mobile", source = "aDo.receiverMobile")
+    @Mapping(target = "preOrderModel.receiver.phone", source = "aDo.receiverPhone")
+    @Mapping(target = "preOrderModel.receiver.name", source = "aDo.receiverName")
+    @Mapping(target = "preOrderModel.receiver.address", source = "aDo.receiverAddress")
+    @Mapping(target = "preOrderModel.receiver.areaName", source = "aDo.receiverAreaName")
+    @Mapping(target = "preOrderModel.receiver.cityName", source = "aDo.receiverCityName")
+    @Mapping(target = "preOrderModel.receiver.provinceName", source = "aDo.receiverProvinceName")
+    void copyProperties(@MappingTarget PreOrderModel preOrderModel, OrderDO aDo);
 }
 

+ 0 - 2
module-erp/src/main/java/com/hys/app/converter/erp/ProcurementContractProductConverter.java

@@ -21,13 +21,11 @@ public interface ProcurementContractProductConverter {
     default ProcurementContractProduct convert(ProductDO productDO, Map<Long, CategoryDO> categoryMap, Map<String, WarehouseEntryProductDTO> warehouseEntryProductDTOMap){
         ProcurementContractProduct procurementContractProduct = new ProcurementContractProduct();
         procurementContractProduct.setProductId(productDO.getId());
-        procurementContractProduct.setSpecification(productDO.getSpecification());
         procurementContractProduct.setProductSn(productDO.getSn());
         procurementContractProduct.setProductName(productDO.getName());
         procurementContractProduct.setCategoryName(categoryMap.get(productDO.getCategoryId()).getName());
         procurementContractProduct.setCategoryId(productDO.getCategoryId());
         procurementContractProduct.setGoodsId(productDO.getGoodsId());
-        procurementContractProduct.setSpecification(productDO.getSpecification());
         procurementContractProduct.setUnit(productDO.getUnit());
         WarehouseEntryProductDTO warehouseEntryProductDTO = warehouseEntryProductDTOMap.get(productDO.getId());
         procurementContractProduct.setStockNum(warehouseEntryProductDTO.getNum());

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

@@ -24,7 +24,6 @@ import java.util.stream.Collectors;
 @Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
 public interface ProductConverter {
 
-    @Mapping(target = "specification", expression = "java(this.formatSpecification(productDTO.getSpecList()))")
     ProductDO convert(ProductDTO productDTO);
 
     ProductVO convert(ProductDO productDO);
@@ -49,7 +48,7 @@ public interface ProductConverter {
 
     default List<ProductDO> convertList(List<ProductDTO> productDTOList, GoodsDO goodsDO) {
         List<ProductDO> productList = convertList(productDTOList);
-        productList.forEach(productDO -> productDO.setPropertiesFromGoods(goodsDO));
+//        productList.forEach(productDO -> productDO.setPropertiesFromGoods(goodsDO));
         return productList;
     }
 

+ 0 - 34
module-erp/src/main/java/com/hys/app/converter/erp/StockTransferConverter.java

@@ -31,7 +31,6 @@ public interface StockTransferConverter {
 
     StockTransferDO convert(StockTransferDTO stockTransferDTO);
 
-    @Mapping(target = "allowable", expression = "java(new com.hys.app.model.erp.vo.StockTransferAllowable(stockTransferDO))")
     StockTransferVO convert(StockTransferDO stockTransferDO);
 
     List<StockTransferVO> convert(List<StockTransferDO> list);
@@ -81,40 +80,7 @@ public interface StockTransferConverter {
         }).collect(Collectors.toList());
     }
 
-    default WebPage<StockTransferVO> combination(WebPage<StockTransferDO> webPage, DataPermissionDTO dataPermission) {
-        WebPage<StockTransferVO> page = convert(webPage);
-
-        for (StockTransferVO stockTransferVO : page.getData()) {
-            StockTransferAllowable allowable = stockTransferVO.getAllowable();
-            if (!dataPermission.getAll()) {
-                if (!dataPermission.getDeptIds().contains(stockTransferVO.getOutDeptId())) {
-                    allowable.setEdit(false);
-                    allowable.setSubmit(false);
-                    allowable.setWithdraw(false);
-                    allowable.setDelete(false);
-                }
-                if (!dataPermission.getDeptIds().contains(stockTransferVO.getInDeptId())) {
-                    allowable.setConfirm(false);
-                }
-            }
-        }
-
-        return page;
-    }
-
-    default StockTransferDO combination(StockTransferDTO stockTransferDTO) {
-        StockTransferDO transferDO = convert(stockTransferDTO);
 
-        transferDO.setOutDeptName(stockTransferDTO.getOutDeptDO().getName());
-        transferDO.setOutWarehouseName(stockTransferDTO.getOutWarehouseDO().getName());
-        transferDO.setInDeptName(stockTransferDTO.getInDeptDO().getName());
-        transferDO.setInWarehouseName(stockTransferDTO.getInWarehouseDO().getName());
-        transferDO.setOutHandledByName(stockTransferDTO.getOutHandleBy().getRealName());
-        if (stockTransferDTO.getInHandleBy() != null) {
-            transferDO.setInHandledByName(stockTransferDTO.getInHandleBy().getRealName());
-        }
 
-        return transferDO;
-    }
 }
 

+ 0 - 29
module-erp/src/main/java/com/hys/app/converter/erp/StockTransferProductConverter.java

@@ -27,34 +27,5 @@ public interface StockTransferProductConverter {
     List<StockTransferProductVO> convert(List<StockTransferProductDO> list);
     
     WebPage<StockTransferProductVO> convert(WebPage<StockTransferProductDO> webPage);
-
-    default List<StockTransferProductDO> combination(List<StockTransferProductDTO> productList, Map<Long, WarehouseEntryBatchDO> batchMap, String stockTransferId){
-        return productList.stream().map(stockTransferProductDTO -> {
-            WarehouseEntryBatchDO batchDO = batchMap.get(stockTransferProductDTO.getWarehouseEntryBatchId());
-            StockTransferProductDO stockTransferProductDO = new StockTransferProductDO();
-
-            stockTransferProductDO.setStockTransferId(stockTransferId);
-            stockTransferProductDO.setWarehouseEntryId(batchDO.getWarehouseEntryId());
-            stockTransferProductDO.setWarehouseEntrySn(batchDO.getWarehouseEntrySn());
-            stockTransferProductDO.setWarehouseEntryItemId(batchDO.getWarehouseEntryItemId());
-            stockTransferProductDO.setWarehouseEntryBatchId(batchDO.getId());
-            stockTransferProductDO.setWarehouseEntryBatchSn(batchDO.getSn());
-            stockTransferProductDO.setGoodsId(batchDO.getGoodsId());
-            stockTransferProductDO.setProductId(batchDO.getProductId());
-            stockTransferProductDO.setProductSn(batchDO.getProductSn());
-            stockTransferProductDO.setProductName(batchDO.getProductName());
-            stockTransferProductDO.setProductSpecification(batchDO.getProductSpecification());
-            stockTransferProductDO.setProductUnit(batchDO.getProductUnit());
-            stockTransferProductDO.setProductBarcode(batchDO.getProductBarcode());
-            stockTransferProductDO.setCategoryId(batchDO.getCategoryId());
-            stockTransferProductDO.setCategoryName(batchDO.getCategoryName());
-            stockTransferProductDO.setProductPrice(batchDO.getEntryPrice());
-            stockTransferProductDO.setProductCostPrice(batchDO.getProductCostPrice());
-            stockTransferProductDO.setTaxRate(batchDO.getTaxRate());
-            stockTransferProductDO.setNum(stockTransferProductDTO.getNum());
-
-            return stockTransferProductDO;
-        }).collect(Collectors.toList());
-    }
 }
 

+ 4 - 2
module-erp/src/main/java/com/hys/app/framework/security/ManagerSecurityConfig.java

@@ -1,13 +1,14 @@
 package com.hys.app.framework.security;
 
-import com.hys.app.service.system.RoleManager;
 import com.hys.app.framework.cache.Cache;
 import com.hys.app.framework.security.message.UserDisableReceiver;
+import com.hys.app.service.system.RoleManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.Order;
 import org.springframework.security.config.annotation.ObjectPostProcessor;
+import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@@ -69,7 +70,8 @@ public class ManagerSecurityConfig extends WebSecurityConfigurerAdapter {
                         fsi.setAccessDecisionManager(new AdminAccessDecisionManager());
                         return fsi;
                     }
-                }).and().addFilterBefore(new TokenAuthenticationFilter(adminAuthenticationService), UsernamePasswordAuthenticationFilter.class);
+                })
+                .and().addFilterBefore(new TokenAuthenticationFilter(adminAuthenticationService), UsernamePasswordAuthenticationFilter.class);
         //禁用缓存
         http.headers().cacheControl()
                 .and().contentSecurityPolicy("script-src 'self' 'unsafe-inline' 'unsafe-eval'");

+ 0 - 2
module-erp/src/main/java/com/hys/app/mapper/goods/GoodsMapper.java

@@ -20,9 +20,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
                         w -> w.like(GoodsDO::getName, params.getKeyword()).or().like(GoodsDO::getSn, params.getKeyword()))
                 .eqIfPresent(GoodsDO::getSn, params.getSn())
                 .eqIfPresent(GoodsDO::getName, params.getName())
-                .likeIfPresent(GoodsDO::getBarCode, params.getBarcode())
                 .eqIfPresent(GoodsDO::getCategoryId, params.getCategoryId())
-                .orderByDesc(GoodsDO::getSort)
                 .page(params);
     }
 

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

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

+ 15 - 1
module-erp/src/main/java/com/hys/app/mapper/system/AdminUserMapper.java

@@ -5,19 +5,23 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.cache.MybatisRedisCache;
 import com.hys.app.model.system.dos.AdminUser;
+import com.hys.app.model.system.dos.DeptDO;
 import com.hys.app.model.system.dto.AdminUserDTO;
 import org.apache.ibatis.annotations.CacheNamespace;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * 平台管理员的Mapper
+ *
  * @author zhanghao
  * @version v1.0
  * @since v7.2.2
  * 2020/7/21
  */
-@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
+@CacheNamespace(implementation = MybatisRedisCache.class, eviction = MybatisRedisCache.class)
 public interface AdminUserMapper extends BaseMapper<AdminUser> {
 
     /**
@@ -29,4 +33,14 @@ public interface AdminUserMapper extends BaseMapper<AdminUser> {
      * @return AdminUserDTO
      */
     IPage<AdminUserDTO> selectPageDto(Page<AdminUserDTO> page, @Param("keyword") String keyword, @Param("userState") Integer userState);
+
+    List<DeptDO> getAllDept(Long id);
+
+    /**
+     * 根据部门地柜查询子部门 包括自己
+     *
+     * @param deptId
+     * @return
+     */
+    List<Long> getAllSubDept(@Param("deptId")  Long deptId);
 }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import com.hys.app.model.erp.enums.CustomerTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -52,7 +53,7 @@ public class CustomerDO extends BaseDO {
     private String email;
 
     @ApiModelProperty(name = "type", value = "客户类型")
-    private String type;
+    private CustomerTypeEnum type;
 
 
     @ApiModelProperty(name = "status", value = "客户状态")

+ 36 - 50
module-erp/src/main/java/com/hys/app/model/erp/dos/GoodsDO.java

@@ -3,6 +3,7 @@ package com.hys.app.model.erp.dos;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 import com.hys.app.model.erp.dto.ProductDTO;
 import io.swagger.annotations.ApiModelProperty;
@@ -10,7 +11,10 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 
 
 /**
@@ -31,77 +35,59 @@ public class GoodsDO extends BaseDO {
     @ApiModelProperty(hidden = true)
     private Long id;
 
-    @ApiModelProperty(name = "sn", value = "商品编号")
-    private String sn;
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    @NotEmpty(message = "出租商品  售卖商品")
+    private String hireOrSail;
 
     @ApiModelProperty(name = "name", value = "商品名称")
+    @NotBlank(message = "商品名称不能为空")
     private String name;
 
-    @ApiModelProperty(name = "en_name", value = "商品英文名称")
+    @ApiModelProperty(name = "enName", value = "商品英文名称")
     private String en_name;
 
-    @ApiModelProperty(name = "sn_code", value = "序列号")
-    private String snCode;
-
-    @ApiModelProperty(name = "goods_style", value = "规格")
-    private String goodsStyle;
-
-
-    @ApiModelProperty(name = "goods_unit", value = "单位")
-    private String goodsUnit;
-
-    @ApiModelProperty(name = "bar_code", value = "条码")
-    private String barCode;
-
-    @ApiModelProperty(name = "allow_sn", value = "是否启用序列号1是2否")
-    private Long allowSn;
+    @ApiModelProperty(name = "sn", value = "商品编号")
+    @NotBlank(message = "商品编号不能为空")
+    private String sn;
 
-    @ApiModelProperty(name = "category_id", value = "商品分类id")
+    @ApiModelProperty(name = "categoryId", value = "商品分类id")
+    @NotNull(message = "商品分类id不能为空")
     private Long categoryId;
 
+    @ApiModelProperty(name = "brandId", value = "品牌id")
+    private Long brandId;
 
-    @ApiModelProperty(name = "sort", value = "排序")
-    private Integer sort;
-
-
-    @ApiModelProperty(name = "brand_id", value = "品牌id")
-    private String brandId;
-
-    @ApiModelProperty(name = "market_enable", value = "是否上架 true上架")
+    @ApiModelProperty(name = "marketEnable", value = "是否上架 true上架")
+    @NotNull(message = "状态不能为空")
     private Boolean marketEnable;
 
-    @ApiModelProperty(name = "description", value = "商品详情")
-    private String description;
 
-    @ApiModelProperty(name = "have_spec", value = "是否有规格")
-    private Boolean haveSpec;
+    @ApiModelProperty(name = "goodsUnit", value = "商品单位")
+    @NotBlank(message = "商品单位不能为空")
+    private String goodsUnit;
 
-    @ApiModelProperty(name = "image", value = "图片")
-    private String image;
+    @ApiModelProperty(name = "allowSn", value = "是否启用序列号1是2否")
+    @NotNull(message = "是否启用序列号1是2否")
+    private Integer allowSn;
 
-    @ApiModelProperty(name = "freight_template_id", value = "运费模板id(0代表包邮)")
-    private Long freightTemplateId;
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    @NotEmpty(message = "商品图片不能为空")
+    private String images;
 
     @ApiModelProperty(name = "video", value = "商品视频")
     private String video;
 
-    // =========== 以下是使用价格最低的sku的数据 ===========
+    @ApiModelProperty(name = "haveSpec", value = "是否有规格")
+    @NotNull(message = "是否有规格不能为空 1有规格  0无规格")
+    private Boolean spec;
 
-    @ApiModelProperty(name = "price", value = "销售价格")
-    private Double price;
-
-    @ApiModelProperty(name = "cost_price", value = "成本价格")
-    private Double costPrice;
+    @ApiModelProperty(name = "description", value = "商品详情")
+    private String description;
 
-    @ApiModelProperty(name = "mkt_price", value = "市场价格")
-    private Double mktPrice;
+    @ApiModelProperty(name = "freightTemplate_id", value = "运费模板id(0代表包邮)")
+    private Long freightTemplateId;
 
-    @ApiModelProperty(name = "hire_or_sail", value = "出租商品 售卖商品")
-    private String hireOrSail;
+    @ApiModelProperty(name = "是否有序列号", value = "商品视频")
+    private Boolean haveSn;
 
-    public void setPropertiesFromProduct(ProductDTO minPriceProduct){
-        this.setPrice(minPriceProduct.getPrice());
-        this.setCostPrice(minPriceProduct.getCostPrice());
-        this.setMktPrice(minPriceProduct.getMktPrice());
-    }
 }

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

@@ -109,6 +109,9 @@ public class OrderDO extends BaseDO {
     @ApiModelProperty(name = "pay_price", value = "应付金额")
     private Double payPrice;
 
+    @ApiModelProperty(name = "real_price", value = "打折后的金额不能为空")
+    private Double realPrice;
+
     @ApiModelProperty(name = "deposit_price", value = "定金金额")
     private Double depositPrice;
 
@@ -302,4 +305,8 @@ public class OrderDO extends BaseDO {
     @ApiModelProperty(name = "kdn_order_code", value = "快递鸟单号")
     private String kdnOrderCode;
 
+    private String sendAddress;
+
+    private String receiveAddress;
+
 }

+ 21 - 22
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductDO.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 import com.hys.app.model.erp.dto.ProductSpec;
@@ -13,8 +14,12 @@ import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.ToString;
 
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -71,11 +76,8 @@ public class ProductDO extends BaseDO {
     @ApiModelProperty(name = "warning_value", value = "库存预警数")
     private Integer warningValue;
 
-    @ApiModelProperty(name = "specification", value = "规格展示信息")
-    private String specification;
-
     @ApiModelProperty(name = "spec_list", value = "规格列表")
-    @TableField(typeHandler = JacksonTypeHandler.class)
+    @TableField(typeHandler = FastjsonTypeHandler.class)
     private SpecList specList;
 
     @ApiModelProperty(name = "image", value = "产品图片")
@@ -98,24 +100,21 @@ public class ProductDO extends BaseDO {
     @ApiModelProperty(name = "day_price", value = "日租金")
     private BigDecimal dayPrice;
 
-    public void setPropertiesFromGoods(GoodsDO goodsDO) {
-        this.setGoodsId(goodsDO.getId());
-
-        // 冗余GoodsDO的字段
-        this.setName(goodsDO.getName());
-        this.setCategoryId(goodsDO.getCategoryId());
-        this.setBrandId(goodsDO.getBrandId());
-        this.setMarketEnable(goodsDO.getMarketEnable());
-        this.setImage(goodsDO.getImage());
-
-        // 如果是无规格商品
-        if (!goodsDO.getHaveSpec()) {
-            // 编号使用商品编号
-            this.setSn(goodsDO.getSn());
-            // 规格列表置空,防止前端传参错误
-            this.setSpecList(new SpecList());
-        }
-    }
+    @ApiModelProperty(name = "snCode", value = "商品序列号")
+    private String snCode;
+
+    @ApiModelProperty(name = "barCode", value = "条码")
+    private String barCode;
+
+    @ApiModelProperty(name = "sku", value = "sku")
+    private String sku;
+
+    @ApiModelProperty(name = "spec_name", value = "规格名")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<String> specName;
+
+    @ApiModelProperty(name = "spec_value", value = "规格值")
+    private String specValue;
 
     /**
      * 解决JacksonTypeHandler反序列化问题

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

@@ -21,7 +21,7 @@ import java.io.Serializable;
 @Data
 @NoArgsConstructor
 @EqualsAndHashCode
-public class ProductStockDO implements Serializable {
+public class ProductStockDO implements Serializable  {
 
     private static final long serialVersionUID = 1L;
 

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

@@ -72,6 +72,7 @@ public class StockDamageReport implements Serializable {
      */
     @ApiModelProperty(name = "creator", value = "制单人")
     private String creator;
+
     @ApiModelProperty(name = "report_time", value = "报损时间", required = true)
     @NotNull(message = "报损时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -86,7 +87,7 @@ public class StockDamageReport implements Serializable {
      * 报损类型(值) {@link StockDamageReportTypeEnum}
      */
     @ApiModelProperty(name = "damage_type_value", value = "报损类型(值)")
-    private String damageTypeValue;
+    private StockDamageReportTypeEnum damageTypeValue;
     /**
      * 报损说明
      */

+ 17 - 4
module-erp/src/main/java/com/hys/app/model/erp/dos/StockTransferDO.java

@@ -3,12 +3,17 @@ package com.hys.app.model.erp.dos;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
-import com.hys.app.model.erp.enums.StockTransferStatusEnum;
+import com.hys.app.model.erp.enums.TransferTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 /**
  * 库存调拨实体类
@@ -26,13 +31,13 @@ public class StockTransferDO extends BaseDO {
 
     @TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(hidden = true)
-    private String id;
+    private Long id;
 
     @ApiModelProperty(name = "sn", value = "编号")
     private String sn;
 
     @ApiModelProperty(name = "status", value = "状态")
-    private StockTransferStatusEnum status;
+    private TransferTypeEnum status = TransferTypeEnum.HAS_TRANSFER;
 
     @ApiModelProperty(name = "out_dept_id", value = "调出方部门id")
     private Long outDeptId;
@@ -74,6 +79,14 @@ public class StockTransferDO extends BaseDO {
     private String attachment;
 
     @ApiModelProperty(name = "transfer_time", value = "调拨时间")
-    private Long transferTime;
+    @NotNull(message = "调拨时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date transferTime;
+
+    @ApiModelProperty(name = "备注", value = "remark")
+    private String  remark;
+    @ApiModelProperty(name = "配送方式", value = "send_type")
+    private Long  sendType;
 
 }

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

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 
@@ -26,7 +28,7 @@ public class StockTransferProductDO implements Serializable {
     private Long id;
 
     @ApiModelProperty(name = "stock_transfer_id", value = "调拨单id")
-    private String stockTransferId;
+    private Long stockTransferId;
 
     @ApiModelProperty(name = "warehouse_entry_id", value = "入库单id")
     private Long warehouseEntryId;
@@ -82,4 +84,9 @@ public class StockTransferProductDO implements Serializable {
     @ApiModelProperty(name = "num", value = "调拨数量")
     private Integer num;
 
+    @ApiModelProperty(name = "num", value = "调拨数量")
+    @NotNull(message = "调拨时的库存数量")
+    @Min(value = 1, message = "调拨数量最小为1")
+    private Integer useAbleNum;
+
 }

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

@@ -83,7 +83,11 @@ public class WarehouseEntryProductDO implements Serializable {
 
     @ApiModelProperty(name = "商品")
     @TableField(exist = false)
-    private GoodsDO goodsDO ;
+    private GoodsDO goodsVO ;
+
+    @ApiModelProperty(name = "sku信息")
+    @TableField(exist = false)
+    private ProductDO productVO ;
 
     @ApiModelProperty(name = "usable_stock", value = "可用库存")
     @TableField(exist = false)

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

@@ -75,8 +75,7 @@ public class WarehouseOutDO extends BaseDO {
     private String consignee;
 
     @ApiModelProperty(name = "order_id_list", value = "订单id集合")
-    @TableField(typeHandler = LongListTypeHandler.class)
-    private List<Long> orderIdList;
+    private Long orderIdList;
 
     @ApiModelProperty(name = "order_sn_list", value = "订单编号集合")
     @TableField(typeHandler = StringListTypeHandler.class)

+ 5 - 4
module-erp/src/main/java/com/hys/app/model/erp/dto/CustomerDTO.java

@@ -1,6 +1,7 @@
 package com.hys.app.model.erp.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.hys.app.model.erp.enums.CustomerTypeEnum;
 import com.hys.app.model.goods.dos.GoodsGalleryDO;
 import com.hys.app.model.goods.dos.GoodsParamsDO;
 import io.swagger.annotations.ApiModelProperty;
@@ -30,7 +31,7 @@ public class CustomerDTO {
     private String name;
 
     @ApiModelProperty(name = "contact", value = "客户联系人")
-    @NotBlank(message = "客户联系人不能为空")
+//    @NotBlank(message = "客户联系人不能为空")
     private String contact;
 
 
@@ -44,16 +45,16 @@ public class CustomerDTO {
     private String mobile;
 
     @ApiModelProperty(name = "email", value = "邮箱地址")
-    @NotBlank(message = "邮箱地址不能为空")
+//    @NotBlank(message = "邮箱地址不能为空")
     private String email;
 
     @ApiModelProperty(name = "type", value = "客户类型")
     @NotNull(message = "客户类型不能为空")
-    private String type;
+    private CustomerTypeEnum type;
 
 
     @ApiModelProperty(name = "status", value = "客户状态")
-    @NotNull(message = "客户状态不能为空")
+//    @NotNull(message = "客户状态不能为空")
     private String status;
 
 }

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

@@ -9,6 +9,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.Valid;
+import javax.validation.constraints.Min;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
@@ -29,32 +30,9 @@ public class GoodsDTO {
     @ApiModelProperty(hidden = true)
     private Long id;
 
-    @ApiModelProperty(name = "sn", value = "商品编号")
-    @NotBlank(message = "商品编号不能为空")
-    private String sn;
-
-    @ApiModelProperty(name = "snCode", value = "商品序列号")
-//    @NotBlank(message = "商品序列号不能为空")
-    private String snCode;
-
-
-    @ApiModelProperty(name = "goodsStyle", value = "商品规格")
-//    @NotBlank(message = "商品规格不能为空")
-    private String goodsStyle;
-
-
-    @ApiModelProperty(name = "goodsUnit", value = "商品单位")
-//    @NotBlank(message = "商品单位不能为空")
-    private String goodsUnit;
-
-    @ApiModelProperty(name = "allowSn", value = "是否启用序列号1是2否")
-    @NotNull(message = "是否启用序列号1是2否")
-    private Integer allowSn;
-
-
-    @ApiModelProperty(name = "barCode", value = "条码")
-//    @NotBlank(message = "商品条码不能为空")
-    private String barCode;
+    @ApiModelProperty(name = "imageList", value = "商品相册")
+    @NotEmpty(message = "出租商品  售卖商品")
+    private String hireOrSail;
 
     @ApiModelProperty(name = "name", value = "商品名称")
     @NotBlank(message = "商品名称不能为空")
@@ -63,6 +41,10 @@ public class GoodsDTO {
     @ApiModelProperty(name = "enName", value = "商品英文名称")
     private String en_name;
 
+    @ApiModelProperty(name = "sn", value = "商品编号")
+    @NotBlank(message = "商品编号不能为空")
+    private String sn;
+
     @ApiModelProperty(name = "categoryId", value = "商品分类id")
     @NotNull(message = "商品分类id不能为空")
     private Long categoryId;
@@ -74,35 +56,39 @@ public class GoodsDTO {
     @NotNull(message = "状态不能为空")
     private Boolean marketEnable;
 
-    @ApiModelProperty(name = "description", value = "商品详情")
-    private String description;
 
-    @ApiModelProperty(name = "freightTemplate_id", value = "运费模板id(0代表包邮)")
-    @NotNull(message = "运费模板id不能为空")
-    private Long freightTemplateId;
+    @ApiModelProperty(name = "goodsUnit", value = "商品单位")
+    @NotBlank(message = "商品单位不能为空")
+    private String goodsUnit;
+
+    @ApiModelProperty(name = "allowSn", value = "是否启用序列号1是2否")
+    @NotNull(message = "是否启用序列号1是2否")
+    private Integer allowSn;
 
     @ApiModelProperty(name = "video", value = "商品视频")
     private String video;
 
     @ApiModelProperty(name = "haveSpec", value = "是否有规格")
-//    @NotNull(message = "是否有规格不能为空 1有规格  0无规格")
+    @NotNull(message = "是否有规格不能为空 1有规格  0无规格")
     private Boolean spec;
 
-    @ApiModelProperty(name = "imageList", value = "商品相册")
-    @NotEmpty(message = "商品相册不能为空")
-    private List<GoodsGalleryDO> imageList;
+    @ApiModelProperty(name = "description", value = "商品详情")
+    private String description;
 
-    @ApiModelProperty(name = "paramList", value = "商品参数列表")
-    @Valid
-    private List<GoodsParamsDO> paramList;
+    @ApiModelProperty(name = "freightTemplate_id", value = "运费模板id(0代表包邮)")
+    @NotNull(message = "运费模板id不能为空")
+    private Long freightTemplateId;
 
-    @ApiModelProperty(name = "productList", value = "产品列表")
+    @ApiModelProperty(name = "product_list", value = "产品列表")
     @NotEmpty(message = "产品列表不能为空")
     @Valid
     private List<ProductDTO> productList;
 
     @ApiModelProperty(name = "imageList", value = "商品相册")
-    @NotEmpty(message = "出租商品  售卖商品")
-    private String hireOrSail;
+    @NotEmpty(message = "商品相册不能为空")
+    private List<GoodsGalleryDO> imageList;
+
+    @ApiModelProperty(name = "是否有序列号", value = "商品视频")
+    private Boolean haveSn;
 }
 

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

@@ -81,6 +81,12 @@ public class OrderDTO {
     @Min(value = 0, message = "应付金额不能小于0")
     private Double payPrice;
 
+    @ApiModelProperty(name = "real_price", value = "打折后的金额不能为空")
+    @NotNull(message = "打折后的金额不能为空")
+    @Min(value = 0, message = "打折后的金额不能为空能小于0")
+    private Double realPrice;
+
+
     @ApiModelProperty(name = "province_city_area_address", value = "支付方式")
     @NotBlank(message = "地址不能为空")
     private String  provinceCityAreaAddress;

+ 10 - 7
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java

@@ -1,6 +1,8 @@
 package com.hys.app.model.erp.dto;
 
+import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -19,13 +21,9 @@ import javax.validation.constraints.NotNull;
 public class OrderItemDTO {
     private Long id;
 
-    @ApiModelProperty(name = "goods_id", value = "商品id")
-    @NotNull(message = "商品id不能为空")
-    private Long goodsId;
-
-    @ApiModelProperty(name = "goods_name", value = "商品名称")
-    @NotNull(message = "商品id不能为空")
-    private String name;
+    @ApiModelProperty(name = "product_id", value = "skuid")
+    @NotNull(message = "skuid不能为空")
+    private Long productId;
 
     @ApiModelProperty(name = "num", value = "数量")
     @NotNull(message = "数量不能为空")
@@ -34,5 +32,10 @@ public class OrderItemDTO {
 
     private GoodsVO goodsVO;
 
+    private ProductVO productVO;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    private Integer usableStock;
+
 }
 

+ 8 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderReturnItemDTO.java

@@ -21,5 +21,13 @@ public class OrderReturnItemDTO {
     @NotNull(message = "退货数量不能为空")
     private Integer returnNum;
 
+    private Long productId;
+
+
+    @ApiModelProperty(name = "order_num", value = "原订单数量数量")
+    @NotNull(message = "退货数量不能为空")
+    private Integer orderNum;
+
+
 }
 

+ 20 - 27
module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java

@@ -1,5 +1,7 @@
 package com.hys.app.model.erp.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.hys.app.model.erp.dos.ProductDO;
 import io.swagger.annotations.ApiModelProperty;
@@ -24,32 +26,21 @@ public class ProductDTO {
     @JsonIgnore
     private Long id;
 
-    @ApiModelProperty(name = "sn", value = "编号(如果是无规格,直接使用商品的编号)")
-    private String sn;
+    private Long goodsId;
 
-    @ApiModelProperty(name = "price", value = "销售价格")
-    @NotNull(message = "销售价格不能为空")
-    @Min(value = 0, message = "销售价格不能小于0")
-    private Double price;
+    @ApiModelProperty(name = "snCode", value = "商品序列号")
+    private String snCode;
 
-    @ApiModelProperty(name = "cost_price", value = "成本价格")
-    @NotNull(message = "成本价格不能为空")
-    @Min(value = 0, message = "成本价格不能小于0")
-    private Double costPrice;
+    @ApiModelProperty(name = "barCode", value = "条码")
+    private String barCode;
 
-    @ApiModelProperty(name = "retail_price", value = "零售价格")
-    @NotNull(message = "零售价格不能为空")
-    @Min(value = 0, message = "零售价格不能小于0")
-    private Double retailPrice;
+    @ApiModelProperty(name = "sku", value = "sku")
+    private String sku;
 
-    @ApiModelProperty(name = "tax_rate", value = "税率")
-//    @NotNull(message = "税率不能为空")
-    @Min(value = 0, message = "税率不能小于0")
-    private Double taxRate;
-
-    @ApiModelProperty(name = "mkt_price", value = "市场价格(暂时保留)", hidden = true)
-//    @Min(value = 0, message = "市场价格不能小于0")
-    private Double mktPrice;
+    @ApiModelProperty(name = "price", value = "售价")
+    @NotNull(message = "销售价格不能为空")
+    @Min(value = 0, message = "销售价格不能小于0")
+    private Double price;
 
     @ApiModelProperty(name = "weight", value = "重量")
     @NotNull(message = "重量不能为空")
@@ -60,15 +51,17 @@ public class ProductDTO {
     @NotBlank(message = "单位不能为空")
     private String unit;
 
-    @ApiModelProperty(name = "warning_value", value = "库存预警数")
-//    @NotNull(message = "库存预警数不能为空")
-    private Integer warningValue;
+    @ApiModelProperty(name = "spec_name", value = "规格名")
+    private List<String> specName;
 
-    @ApiModelProperty(name = "spec_list", value = "规格列表")
-    private ProductDO.SpecList specList;
+    @ApiModelProperty(name = "spec_value", value = "规格值")
+    private String specValue;
 
     @ApiModelProperty(name = "day_price", value = "日租金")
     private BigDecimal dayPrice;
 
+    @ApiModelProperty(name = "weight", value = "规格集合")
+    private ProductDO.SpecList specList;
+
 }
 

+ 13 - 2
module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportDTO.java

@@ -1,6 +1,7 @@
 package com.hys.app.model.erp.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.model.erp.enums.StockDamageReportTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -23,10 +24,20 @@ public class StockDamageReportDTO implements Serializable {
 
     private static final long serialVersionUID = -2146175467517339422L;
 
-    @ApiModelProperty(name = "start_time", value = "开始时间")
+
+    @ApiModelProperty(name = "report_time", value = "报损时间", required = true)
+    @NotNull(message = "报损时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date startTime;
+    private Date reportTime;
+
+
+    @ApiModelProperty(name = "damage_type_value", value = "报损类型")
+    private StockDamageReportTypeEnum damageTypeValue;
+
+    @ApiModelProperty(name = "creator_id", value = "制单人ID")
+    private Long creatorId;
+
 
     /**
      * 仓库ID

+ 13 - 4
module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportProductDTO.java

@@ -1,6 +1,7 @@
 package com.hys.app.model.erp.dto;
 
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -17,14 +18,22 @@ import java.io.Serializable;
 @Data
 public class StockDamageReportProductDTO implements Serializable {
 
-    private static final long serialVersionUID = -1175913255503592167L;
-    @ApiModelProperty(name = "goods_id", value = "商品ID", required = true)
-    @NotNull(message = "商品ID不能为空")
-    private Long goodsId;
+
+    @ApiModelProperty(name = "product_id", value = "skuID", required = true)
+    @NotNull(message = "skuID不能为空")
+    private Long productId;
 
     @ApiModelProperty(name = "report_num", value = "报损数量", required = true)
     @NotNull(message = "报损数量不能为空")
     private Integer reportNum;
 
     private GoodsVO goodsVO;
+
+    private ProductVO productVO;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    private Integer usableStock;
+
+
+
 }

+ 11 - 6
module-erp/src/main/java/com/hys/app/model/erp/dto/StockInventoryProductDTO.java

@@ -1,6 +1,7 @@
 package com.hys.app.model.erp.dto;
 
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -19,12 +20,11 @@ public class StockInventoryProductDTO implements Serializable {
 
     private static final long serialVersionUID = -6285460490304810323L;
 
-    /**
-     * 商品ID
-     */
-    @ApiModelProperty(name = "goods_id", value = "商品ID", required = true)
-    @NotNull(message = "商品ID不能为空")
-    private Long goodsId;
+
+
+    @ApiModelProperty(name = "goods_id", value = "SKUID", required = true)
+    @NotNull(message = "SKUID不能为空")
+    private Long productId;
 
     /**
      * 盘点数量
@@ -41,4 +41,9 @@ public class StockInventoryProductDTO implements Serializable {
     private Integer diffNum;
 
     private GoodsVO goodsVO;
+
+    private ProductVO productVO;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    private Integer usableStock;
 }

+ 17 - 47
module-erp/src/main/java/com/hys/app/model/erp/dto/StockTransferDTO.java

@@ -1,5 +1,7 @@
 package com.hys.app.model.erp.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.model.erp.dos.WarehouseDO;
 import com.hys.app.model.erp.dos.WarehouseEntryBatchDO;
 import com.hys.app.model.system.dos.AdminUser;
@@ -7,11 +9,13 @@ import com.hys.app.model.system.dos.DeptDO;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.Valid;
 import javax.validation.constraints.AssertFalse;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -27,36 +31,22 @@ public class StockTransferDTO {
     @ApiModelProperty(hidden = true)
     private String id;
 
-    @ApiModelProperty(name = "out_dept_id", value = "调出方部门id")
-    @NotNull(message = "调出方部门id不能为空")
-    private Long outDeptId;
-
     @ApiModelProperty(name = "out_warehouse_id", value = "调出方仓库id")
     @NotNull(message = "调出方仓库id不能为空")
     private Long outWarehouseId;
 
-    @ApiModelProperty(name = "out_handled_by_id", value = "调出方仓库经手人id")
-    @NotNull(message = "调出方仓库经手人id不能为空")
-    private Long outHandledById;
-
-    @ApiModelProperty(name = "in_dept_id", value = "调入方部门id")
-    @NotNull(message = "调入方部门id不能为空")
-    private Long inDeptId;
-
     @ApiModelProperty(name = "in_warehouse_id", value = "调入方仓库id")
     @NotNull(message = "调入方仓库id不能为空")
     private Long inWarehouseId;
 
-    @ApiModelProperty(name = "in_handled_by_id", value = "调入方仓库经手人id")
-    private Long inHandledById;
-
     @ApiModelProperty(name = "attachment", value = "附件")
-    @NotEmpty(message = "附件不能为空")
     private String attachment;
 
     @ApiModelProperty(name = "transfer_time", value = "调拨时间")
     @NotNull(message = "调拨时间不能为空")
-    private Long transferTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date transferTime;
 
     @ApiModelProperty(name = "product_list", value = "商品列表")
     @NotEmpty(message = "商品列表不能为空")
@@ -64,38 +54,18 @@ public class StockTransferDTO {
     private List<StockTransferProductDTO> productList;
 
     @AssertFalse(message = "调出方仓库和调入方仓库不能相同")
-    private boolean isSameWarehouse() {
-        return outWarehouseId.equals(inWarehouseId);
-    }
-
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private Map<Long, WarehouseEntryBatchDO> batchMap;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private DeptDO outDeptDO;
+    public   Boolean isSameWarehouse() {
+        if (outWarehouseId.equals(inWarehouseId)){
+            throw new ServiceException("调出方仓库和调入方仓库不能相同");
+        }
+        return true;
 
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private DeptDO inDeptDO;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private WarehouseDO outWarehouseDO;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private WarehouseDO inWarehouseDO;
-
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private AdminUser outHandleBy;
+    }
+    @ApiModelProperty(name = "备注", value = "remark")
+    private String  remark;
 
-    @JsonIgnore
-    @ApiModelProperty(hidden = true)
-    private AdminUser inHandleBy;
+    @ApiModelProperty(name = "配送方式", value = "send_type")
+    private Long  sendType;
 
 }
 

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

@@ -15,14 +15,20 @@ import javax.validation.constraints.NotNull;
 @Data
 public class StockTransferProductDTO {
 
-    @ApiModelProperty(name = "warehouse_entry_batch_id", value = "入库批次id")
-    @NotNull(message = "入库批次id不能为空")
-    private Long warehouseEntryBatchId;
+    @ApiModelProperty(name = "product_id", value = "skuid")
+    @NotNull(message = "skuid不能为空")
+    private Long productId;
 
     @ApiModelProperty(name = "num", value = "调拨数量")
     @NotNull(message = "调拨数量不能为空")
     @Min(value = 1, message = "调拨数量最小为1")
     private Integer num;
+
+    @ApiModelProperty(name = "num", value = "调拨数量")
+    @NotNull(message = "调拨时的库存数量")
+    @Min(value = 1, message = "调拨数量最小为1")
+    private Integer useAbleNum;
+
     
 }
 

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

@@ -56,8 +56,8 @@ public class WarehouseOutDTO {
     private Long warehouseId;
 
 
-    @ApiModelProperty(value = "操作類型")
-    @NotBlank(message = "配送地址")
+    @ApiModelProperty(value = "配送地址")
+//    @NotBlank(message = "配送地址")
     private String address;
 
 

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

@@ -2,6 +2,7 @@ package com.hys.app.model.erp.dto;
 
 import com.hys.app.model.erp.dos.GoodsDO;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -17,9 +18,9 @@ import javax.validation.constraints.NotNull;
 @Data
 public class WarehouseOutProductDTO {
 
-    @ApiModelProperty(name = "good_id", value = "商品id")
-    @NotNull(message = "商品id不能为空")
-    private Long goodsId;
+    @ApiModelProperty(name = "good_id", value = "skuId")
+    @NotNull(message = "skuId不能为空")
+    private Long productId;
 
     @ApiModelProperty(name = "good_Name", value = "商品名称")
     private Long goodName;
@@ -30,5 +31,15 @@ public class WarehouseOutProductDTO {
     private Integer outNum;
 
     private GoodsVO goodsVO;
+
+
+    private ProductVO productVO;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    private Integer usableStock;
+
+    @ApiModelProperty(name = "good_id", value = "商品id")
+    private Long goodsId;
+
 }
 

+ 25 - 0
module-erp/src/main/java/com/hys/app/model/erp/enums/CustomerTypeEnum.java

@@ -0,0 +1,25 @@
+package com.hys.app.model.erp.enums;
+
+import lombok.Getter;
+
+/**
+ * 入库单状态枚举
+ *
+ * @author 张崧
+ * @since 2023-12-05
+ */
+@Getter
+public enum CustomerTypeEnum {
+
+    CUSTOMER_SALE("CUSTOMER_SALE", "销售"),
+    CUSTOMER_LEASE("CUSTOMER_LEASE", "租赁"),
+    CUSTOMER_ALL("CUSTOMER_ALL", "销售,租赁");
+
+    private final String value;
+    private final String label;
+
+    CustomerTypeEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+}

+ 24 - 0
module-erp/src/main/java/com/hys/app/model/erp/enums/TransferTypeEnum.java

@@ -0,0 +1,24 @@
+package com.hys.app.model.erp.enums;
+
+import lombok.Getter;
+
+/**
+ * 入库单状态枚举
+ *
+ * @author 张崧
+ * @since 2023-12-05
+ */
+@Getter
+public enum TransferTypeEnum {
+
+    HAS_TRANSFER("HAS_TRANSFER", "已调拨"),
+    ROLLBACK_HANDLE("ROLLBACK_HANDLE", "已回滚");
+
+    private final String value;
+    private final String label;
+
+    TransferTypeEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+}

+ 4 - 22
module-erp/src/main/java/com/hys/app/model/erp/vo/GoodsVO.java

@@ -1,6 +1,7 @@
 package com.hys.app.model.erp.vo;
 
 import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.erp.dto.ProductDTO;
 import com.hys.app.model.goods.dos.GoodsGalleryDO;
 import com.hys.app.model.goods.vo.GoodsParamsGroupVO;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,6 +9,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
 import java.util.List;
 
@@ -22,32 +24,12 @@ import java.util.List;
 @ToString(callSuper = true)
 public class GoodsVO 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;
+    private List<ProductDTO> productList;
 
     @ApiModelProperty(name = "imageList", value = "商品相册")
-    private String hireOrSail;
+    private List<GoodsGalleryDO> imageList;
 
-    @ApiModelProperty(name = "usable_stock", value = "可用库存")
-    private Integer usableStock;
 
 }
 

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

@@ -31,5 +31,7 @@ public class OrderReturnItemVO extends OrderReturnItemDO {
 
     private GoodsVO goodsVO;
 
+    private ProductVO productVO;
+
 }
 

+ 8 - 18
module-erp/src/main/java/com/hys/app/model/erp/vo/OrderVO.java

@@ -38,22 +38,18 @@ import java.util.List;
 public class OrderVO extends OrderDO {
 
 
-
     @ApiModelProperty(hidden = true)
     private Long id;
 
     @ApiModelProperty(name = "type", value = "订单类型")
-    @NotNull(message = "订单类型不能为空")
     private OrderTypeEnum type;
 
 
     @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 = "销售人员")
@@ -66,7 +62,6 @@ public class OrderVO extends OrderDO {
     private Long paymentTime;
 
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
-    @NotNull(message = "仓库id不能为空")
     private Long warehouseId;
 
     @ApiModelProperty(name = "attachment", value = "附件")
@@ -79,39 +74,35 @@ public class OrderVO extends OrderDO {
     private String sendType;
 
     @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 = "real_price", value = "打折后的金额不能为空")
+    private Double realPrice;
+
     @ApiModelProperty(name = "province_city_area_address", value = "支付方式")
-    @NotBlank(message = "地址不能为空")
-    private String  provinceCityAreaAddress;
+    private String provinceCityAreaAddress;
 
     @ApiModelProperty(name = "address", value = "支付方式")
-    @NotBlank(message = "地址不能为空")
-    private String  address;
+    private String address;
 
     @ApiModelProperty(name = "province_city_area", value = "支付方式")
-    @NotBlank(message = "地址不能为空")
-    private String  provinceCityArea;
+    private String provinceCityArea;
 
     @ApiModelProperty(name = "status", value = "订单状态")
     private SaleOrderStatusEnum status;
 
     @ApiModelProperty(name = "end_time", value = "开始时间")
-//    @NotNull(message = "借用时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date  endTime;
+    private Date endTime;
 
     @ApiModelProperty(name = "start_time", value = "结束时间")
-//    @NotNull(message = "借用时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date startTime;
@@ -120,6 +111,5 @@ public class OrderVO extends OrderDO {
     private String kdnOrderCode;
 
 
-
 }
 

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/ProductVO.java

@@ -23,5 +23,9 @@ public class ProductVO extends ProductDO {
     @ApiModelProperty(name = "stock_num", value = "库存数量")
     private Integer stockNum;
 
+    private GoodsVO goodsVo;
+
+    @ApiModelProperty(name = "usable_stock", value = "可用库存")
+    private Integer usableStock;
 }
 

+ 10 - 1
module-erp/src/main/java/com/hys/app/model/erp/vo/StockDamageReportVO.java

@@ -5,6 +5,7 @@ import com.hys.app.model.erp.dos.StockDamageReport;
 import com.hys.app.model.erp.dos.StockDamageReportProduct;
 import com.hys.app.model.erp.dto.StockDamageReportProductDTO;
 import com.hys.app.model.erp.enums.DamageinventoryEnum;
+import com.hys.app.model.erp.enums.StockDamageReportTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -25,7 +26,7 @@ import java.util.List;
  */
 @ApiModel
 @Data
-public class StockDamageReportVO implements Serializable {
+public class StockDamageReportVO  implements Serializable {
 
     private static final long serialVersionUID = -5851214268014240143L;
 
@@ -58,4 +59,12 @@ public class StockDamageReportVO implements Serializable {
 
     @ApiModelProperty(name = "status", value = "状态")
     private DamageinventoryEnum status = DamageinventoryEnum.NOT_HANDLE;
+
+
+
+    @ApiModelProperty(name = "damage_type_value", value = "报损类型")
+    private StockDamageReportTypeEnum damageTypeValue;
+
+    @ApiModelProperty(name = "creator_id", value = "制单人ID")
+    private Long creatorId;
 }

+ 0 - 21
module-erp/src/main/java/com/hys/app/model/erp/vo/StockTransferAllowable.java

@@ -31,26 +31,5 @@ public class StockTransferAllowable {
     @ApiModelProperty(name = "delete", value = "是否允许删除")
     private Boolean delete;
 
-
-    public StockTransferAllowable(StockTransferDO stockTransferDO) {
-        StockTransferStatusEnum status = stockTransferDO.getStatus();
-        if (status == null) {
-            return;
-        }
-
-        this.setEdit(status == StockTransferStatusEnum.NotSubmit ||
-                status == StockTransferStatusEnum.AuditReject);
-
-        this.setSubmit(status == StockTransferStatusEnum.NotSubmit ||
-                status == StockTransferStatusEnum.AuditReject);
-
-        this.setDelete(status == StockTransferStatusEnum.NotSubmit ||
-                status == StockTransferStatusEnum.AuditReject);
-
-        this.setWithdraw(status == StockTransferStatusEnum.Submit);
-
-        this.setConfirm(status == StockTransferStatusEnum.Submit);
-    }
-
 }
 

+ 19 - 3
module-erp/src/main/java/com/hys/app/model/erp/vo/StockTransferProductVO.java

@@ -1,10 +1,14 @@
 package com.hys.app.model.erp.vo;
 
 import com.hys.app.model.erp.dos.StockTransferProductDO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
 /**
  * 调拨单商品明细VO
  *
@@ -12,9 +16,21 @@ import lombok.ToString;
  * @since 2023-12-12 16:34:15
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StockTransferProductVO extends StockTransferProductDO {
+public class StockTransferProductVO {
+    private Long id;
+
+    @ApiModelProperty(name = "product_id", value = "skuid")
+    private Long productId;
+
+    @ApiModelProperty(name = "num", value = "调拨数量")
+    private Integer num;
+
+    @ApiModelProperty(name = "num", value = "库存数量")
+    private Integer useAbleNum;
+
+    private GoodsVO goodsVO;
+
+    private ProductVO productVO;
 
 }
 

+ 36 - 16
module-erp/src/main/java/com/hys/app/model/erp/vo/StockTransferVO.java

@@ -1,11 +1,15 @@
 package com.hys.app.model.erp.vo;
 
-import com.hys.app.model.erp.dos.StockTransferDO;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.model.erp.enums.TransferTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -15,29 +19,45 @@ import java.util.List;
  * @since 2023-12-12 11:59:06
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StockTransferVO extends StockTransferDO {
+public class StockTransferVO  {
 
-    @ApiModelProperty(name = "allowable", value = "可进行的操作")
-    private StockTransferAllowable allowable;
+    @ApiModelProperty(hidden = true)
+    private Long id;
 
-    @ApiModelProperty(name = "product_list", value = "商品列表")
-    private List<StockTransferProductVO> productList;
 
+    @ApiModelProperty(name = "out_warehouse_id", value = "调出方仓库id")
+    @NotNull(message = "调出方仓库id不能为空")
+    private Long outWarehouseId;
+
+    @ApiModelProperty(name = "in_warehouse_id", value = "调入方仓库id")
+    @NotNull(message = "调入方仓库id不能为空")
+    private Long inWarehouseId;
 
+    @ApiModelProperty(name = "attachment", value = "附件")
+    private String attachment;
 
-    @ApiModelProperty(name = "real_stock", value = "实际库存")
-    private Long realStock;
+    @ApiModelProperty(name = "transfer_time", value = "调拨时间")
+    @NotNull(message = "调拨时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date transferTime;
 
+    @ApiModelProperty(name = "product_list", value = "商品列表")
+    @NotEmpty(message = "商品列表不能为空")
+    @Valid
+    private List<StockTransferProductVO> productList;
 
-    @ApiModelProperty(name = "allow_stock", value = "可用库存")
-    private Long allowStock;
+    @ApiModelProperty(name = "备注", value = "remark")
+    private String  remark;
 
-    @ApiModelProperty(name = "in_transit", value = "在途库存")
-    private Long inTransit;
+    @ApiModelProperty(name = "配送方式", value = "send_type")
+    private Long  sendType;
 
+    @ApiModelProperty(name = "备注", value = "remark")
+    private TransferTypeEnum  status;
 
+    @ApiModelProperty(name = "sn", value = "编号")
+    private String sn;
 
 
 }

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

@@ -50,5 +50,8 @@ public class WarehouseOutVO extends WarehouseOutDO {
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
     private Long warehouseId;
 
+    @ApiModelProperty(name = "order_id_list", value = "订单id集合")
+    private Long orderIdList;
+
 }
 

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

@@ -21,6 +21,9 @@ import java.util.List;
 public class DeptDO extends BaseDO {
 
     public static final Long ROOT_ID = 0L;
+
+    @TableField(exist = false)
+    private  List<DeptDO> childDept ;
     /**
      * 部门ID
      */

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

@@ -7,6 +7,8 @@ import com.hys.app.model.erp.dto.GoodsDTO;
 import com.hys.app.model.erp.dto.GoodsQueryParams;
 import com.hys.app.model.erp.dto.GoodsSortDto;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductStockVO;
+import com.hys.app.model.erp.vo.ProductVO;
 
 import java.util.List;
 
@@ -24,7 +26,8 @@ public interface GoodsManager extends BaseService<GoodsDO> {
      * @return 分页数据
      */
     WebPage<GoodsVO> list(GoodsQueryParams queryParams);
-    void updateSort(GoodsSortDto sortDto);
+
+
     /**
      * 添加
      *
@@ -53,9 +56,9 @@ public interface GoodsManager extends BaseService<GoodsDO> {
     /**
      * 删除
      *
-     * @param ids
+     * @param id
      */
-    void delete(List<Long> ids);
+    void delete(Long id);
 
     /**
      * 根据商品分类查询数量
@@ -64,5 +67,21 @@ public interface GoodsManager extends BaseService<GoodsDO> {
      * @return
      */
     long countByCategoryId(Long categoryId);
+
+    /**
+     * 上下架前判断该商品在各个仓库还有没有库存
+     *
+     * @param id 商品id
+     * @return 有库存返回true   无返回false
+     */
+    Boolean updateCheck(Long id);
+
+    /**
+     * 根据仓库获取仓库所有sku的库存
+     *
+     * @param warehouseId
+     * @return
+     */
+    List<ProductVO> getSkuByWarehouse();
 }
 

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

@@ -10,6 +10,7 @@ import com.hys.app.model.erp.dto.OrderQueryParams;
 import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
 import com.hys.app.model.erp.enums.OrderStatusEnum;
 import com.hys.app.model.erp.vo.OrderVO;
+import com.hys.app.service.kuaidiniao.entity.AddressDTO;
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 
 import java.util.List;
@@ -81,12 +82,7 @@ public interface OrderManager extends BaseService<OrderDO> {
      */
     IPage<OrderVO> hasSendOrder(OrderQueryParams queryParams);
 
-    /**
-     * 快递鸟下单获取快递单号
-     *
-     * @param preOrderModel
-     */
-    String kdShip(PreOrderModel preOrderModel, Long orderId);
+
 
 
     /**
@@ -94,7 +90,7 @@ public interface OrderManager extends BaseService<OrderDO> {
      *
      * @param orderId
      */
-    void orderSend(Long orderId);
+    void orderSend(Long orderId, AddressDTO addressDTO);
 
 }
 

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

@@ -36,10 +36,8 @@ public interface ProductManager extends BaseService<ProductDO> {
     /**
      * 添加
      *
-     * @param goodsDO
-     * @param productList
      */
-    void add(GoodsDO goodsDO, List<ProductDTO> productList);
+    void add(Long id );
 
     /**
      * 编辑

+ 28 - 13
module-erp/src/main/java/com/hys/app/service/erp/ProductStockManager.java

@@ -2,6 +2,7 @@ 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.ProductDO;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dto.ProductStockQueryParams;
 import com.hys.app.model.erp.enums.StockOperateEnum;
@@ -29,34 +30,39 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
 
     ProductStockDO getOne(String id);
 
-    /**
-     * 初始化商品的库存
-     *
-     * @param productIds
-     * @param goodsId
-     */
-    void initStockByProduct(List<Long> productIds, Long goodsId);
-
 
     List<ProductStockV1> selectList(ProductStockQueryParams request);
 
 
     Long selectCount(ProductStockQueryParams request);
+
+    /**
+     * 初始化库存
+     *
+     * @param goodsId
+     */
+    public void initStockByProduct(Long goodsId);
+
     /**
      * 初始化商品的库存
+     *
      * @param warehouseId
      */
     void initStockByWarehouse(Long warehouseId);
+
     //批量删除
     void deleteByIds(List<Long> ids);
+
     /**
      * 删除商品的库存
+     *
      * @param productIds
      */
     void deleteStockByProduct(List<Long> productIds);
 
     /**
      * 删除商品的库存
+     *
      * @param warehouseId
      */
     void deleteStockByWarehouse(Long warehouseId);
@@ -64,11 +70,11 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
     /**
      * 查询商品库存预警分页列表数据
      *
-     * @param pageNo 分页数
-     * @param pageSize 每页数量
+     * @param pageNo      分页数
+     * @param pageSize    每页数量
      * @param warehouseId 仓库ID
-     * @param deptId 部门ID
-     * @param name 商品名称
+     * @param deptId      部门ID
+     * @param name        商品名称
      * @return
      */
     WebPage<ProductStockWarningVO> listWarningStock(Long pageNo, Long pageSize, Long warehouseId, Long deptId, String name);
@@ -76,7 +82,7 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
     /**
      * 获取某个仓库中某个商品的库存信息
      *
-     * @param productId 产品ID
+     * @param productId   产品ID
      * @param warehouseId 仓库ID
      * @return
      */
@@ -84,6 +90,7 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
 
     /**
      * 查询多个产品在多个仓库的库存
+     *
      * @param warehouseIds
      * @param productIds
      */
@@ -91,6 +98,7 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
 
     /**
      * 查询产品库存数量
+     *
      * @param warehouseIds
      * @param productIds
      */
@@ -98,11 +106,18 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
 
     /**
      * 更新库存
+     *
      * @param warehouseId
      * @param productId
      * @param operate
      * @param changeNum
      */
     void updateStock(Long warehouseId, Long productId, StockOperateEnum operate, int changeNum);
+
+    /**
+     * 初始化库存  所有的sku在所有的仓库库存初始化为0
+     * @param bean
+     */
+    void intStock(List<ProductDO> bean);
 }
 

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

@@ -43,22 +43,24 @@ public interface StockTransferManager extends BaseService<StockTransferDO> {
      * @param id
      * @return 
      */
-    StockTransferVO getDetail(String id);
+    StockTransferVO getDetail(Long id);
 
     /**
      * 删除
      * @param ids
      */
-    void delete(List<String> ids);
+    void delete(List<Long> ids);
 
     /**
      * 提交调拨单
      * @param id
      */
-    void submit(String id);
+    void submit(Long id);
 
     /**
      * 撤销提交调拨单
+     * 更改状态
+     * 库存回滚
      * @param id
      */
     void withdraw(Long id);

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

@@ -60,6 +60,6 @@ public interface StockTransferProductManager extends BaseService<StockTransferPr
      * @param stockTransferId
      * @return
      */
-    List<StockTransferProductDO> listByStockTransferId(String stockTransferId);
+    List<StockTransferProductDO> listByStockTransferId(Long stockTransferId);
 }
 

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

@@ -98,10 +98,5 @@ public interface WarehouseEntryProductManager extends BaseService<WarehouseEntry
      */
     void updateReturnNum(String id, Integer returnNum);
 
-    /**
-     * 查找这个商品在这个仓库的库存
-     * @return  所欲带有库存的商品数据集合
-     */
-    List<GoodsVO>  getStockByWarehouseGood(WareQueryGoodParams params);
 }
 

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

@@ -8,6 +8,8 @@ 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.ProductStockVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.model.erp.vo.WarehouseOutVO;
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 
@@ -112,6 +114,6 @@ public interface WarehouseOutManager extends BaseService<WarehouseOutDO> {
      * 根据仓库找到所有库存大于0的商品
      * @param warehouseId 仓库ID
      */
-    Page<GoodsVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam);
+    Page<ProductVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam,String orderType);
 }
 

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

@@ -1,42 +1,35 @@
 package com.hys.app.service.erp.impl;
 
-import cn.hutool.core.collection.CollUtil;
+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.GoodsConverter;
-import com.hys.app.converter.erp.ProductConverter;
 import com.hys.app.framework.database.WebPage;
-import com.hys.app.framework.database.mybatisplus.wrapper.LambdaQueryChainWrapperX;
-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.StringUtil;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.BeanUtils;
 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.GoodsChangeMessage;
+import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.erp.dos.ProductDO;
+import com.hys.app.model.erp.dos.ProductStockDO;
+import com.hys.app.model.erp.dto.GoodsDTO;
+import com.hys.app.model.erp.dto.GoodsQueryParams;
+import com.hys.app.model.erp.dto.ProductDTO;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductStockVO;
 import com.hys.app.model.erp.vo.ProductVO;
-import com.hys.app.model.goods.dos.BrandDO;
 import com.hys.app.model.goods.dos.GoodsGalleryDO;
-import com.hys.app.model.goods.vo.GoodsParamsGroupVO;
-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.erp.GoodsManager;
+import com.hys.app.service.erp.ProductManager;
+import com.hys.app.service.erp.ProductStockManager;
 import com.hys.app.service.goods.GoodsGalleryManager;
-import com.hys.app.service.goods.GoodsParamsManager;
-import com.hys.app.util.ValidateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-
-import static com.hys.app.framework.util.CollectionUtils.convertList;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 商品业务层实现
@@ -45,154 +38,130 @@ import static com.hys.app.framework.util.CollectionUtils.convertList;
  * 2023-12-26 15:56:58
  */
 @Service
+@AllArgsConstructor
 public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> implements GoodsManager {
 
-    @Autowired
     private GoodsConverter converter;
-
-    @Autowired
-    private ProductConverter productConverter;
-
-    @Autowired
-    private CategoryManager categoryManager;
-
-    @Autowired
+    private ProductStockManager productStockManager;
     private ProductManager productManager;
-
-    @Autowired
-    private BrandManager brandManager;
-
-    @Autowired
     private GoodsGalleryManager goodsGalleryManager;
 
-    @Autowired
-    private GoodsParamsManager goodsParamsManager;
-
-    @Autowired
-    private MessageSender messageSender;
-
-    @Autowired
-    private GoodsLabelRelationManager goodsLabelRelationManager;
-
-    @Autowired
-    private GoodsLabelManager goodsLabelManager;
-
-    @Autowired
-    private ProductStockManager productStockManager;
-
     @Override
     public WebPage<GoodsVO> list(GoodsQueryParams queryParams) {
         WebPage<GoodsDO> webPage = baseMapper.selectPage(queryParams);
-
-        Map<Long, String> categoryNameMap = categoryManager.mapNameByIds(convertList(webPage.getData(), GoodsDO::getCategoryId));
-        Map<String, String> brandNameMap = brandManager.mapNameByIds(convertList(webPage.getData(), GoodsDO::getBrandId));
         // 查询商品标签
-        List<GoodsLabelRelationDO> goodsLabelRelationList = goodsLabelRelationManager.listByGoodsIds(convertList(webPage.getData(), GoodsDO::getId));
-        List<GoodsLabelDO> goodsLabelList = goodsLabelManager.listByIds(convertList(goodsLabelRelationList, GoodsLabelRelationDO::getLabelId));
-
-        return converter.combination(webPage, categoryNameMap, brandNameMap, goodsLabelRelationList, goodsLabelList);
+        return converter.convert(webPage);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(GoodsDTO goodsDTO) {
-        // 参数校验
         checkParams(goodsDTO);
-
-        // 保存GoodsDO
-        GoodsDO goodsDO = converter.combination(goodsDTO);
+        GoodsDO goodsDO = BeanUtil.copyProperties(goodsDTO, GoodsDO.class);
+        List<ProductDO> bean = BeanUtils.toBean(goodsDTO.getProductList(), ProductDO.class);
         super.save(goodsDO);
-        Long goodsId = goodsDO.getId();
-
-        // 保存product
-        this.productManager.add(goodsDO, goodsDTO.getProductList());
-
-        // 保存商品参数
-        this.goodsParamsManager.addParams(goodsDTO.getParamList(), goodsId);
-
+        bean.forEach(item -> item.setGoodsId(goodsDO.getId()));
+        productManager.saveBatch(bean);
         // 保存相册
-        this.goodsGalleryManager.add(goodsDTO.getImageList(), goodsId);
+        this.goodsGalleryManager.add(goodsDTO.getImageList(), goodsDO.getId());
+        //初始化库存
+        productStockManager.intStock(bean);
+        ;
 
         // 发送商品消息
-        GoodsChangeMessage message = new GoodsChangeMessage(GoodsChangeMessage.GoodsChangeType.Add, goodsId);
-        this.messageSender.send(new MqMessage(AmqpExchange.ERP_GOODS_CHANGE, AmqpExchange.ERP_GOODS_CHANGE + "_ROUTING", message));
+//        GoodsChangeMessage message = new GoodsChangeMessage(GoodsChangeMessage.GoodsChangeType.Add, goodsId);
+//        this.messageSender.send(new MqMessage(AmqpExchange.ERP_GOODS_CHANGE, AmqpExchange.ERP_GOODS_CHANGE + "_ROUTING", message));
     }
 
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void updateSort(GoodsSortDto sortDto) {
 
-        List<GoodsDO> goodsDOS=new ArrayList<>();
-        for(SortItem item:sortDto.getData()){
-            GoodsDO goodsDO=getById(item.getGoodsId());
-            goodsDO.setSort(item.getSort());
-            goodsDOS.add(goodsDO);
-        }
-        updateBatchById(goodsDOS);
-    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(GoodsDTO goodsDTO) {
-        // 参数校验
         checkParams(goodsDTO);
-
         // 更新商品
-        GoodsDO goodsDO = converter.combination(goodsDTO);
-        super.updateById(goodsDO);
+        GoodsDO aDo = BeanUtil.copyProperties(goodsDTO, GoodsDO.class);
+        //先删除sku在新增
+        productManager.remove(new LambdaQueryWrapper<ProductDO>().eq(ProductDO::getGoodsId, goodsDTO.getId()));
+        List<ProductDO> bean = BeanUtils.toBean(goodsDTO.getProductList(), ProductDO.class);
+        updateById(aDo);
+        bean.forEach(item -> item.setGoodsId(goodsDTO.getId()));
+        productManager.saveBatch(bean);
+        goodsGalleryManager.edit(goodsDTO.getImageList(), goodsDTO.getId());
 
-        // 更新product
-        this.productManager.edit(goodsDO, goodsDTO.getProductList());
+        // 发送商品消息
+//        GoodsChangeMessage message = new GoodsChangeMessage(GoodsChangeMessage.GoodsChangeType.Edit, goodsDTO.getId());
+//        this.messageSender.send(new MqMessage(AmqpExchange.ERP_GOODS_CHANGE, AmqpExchange.ERP_GOODS_CHANGE + "_ROUTING", message));
+    }
 
-        // 添加商品参数
-        this.goodsParamsManager.addParams(goodsDTO.getParamList(), goodsDTO.getId());
 
-        // 添加相册
-        this.goodsGalleryManager.edit(goodsDTO.getImageList(), goodsDTO.getId());
+    /**
+     * 校验参数   sku不能重复   条形码不能重复   商品名称不能重复
+     *
+     * @param goodsDTO
+     */
+    private void checkParams(GoodsDTO goodsDTO) {
+        GoodsDO aDo = getOne(new LambdaQueryWrapper<GoodsDO>()
+                .eq(GoodsDO::getName, goodsDTO.getName())
+                .ne(ObjectUtil.isNotNull(goodsDTO.getId()), GoodsDO::getId, goodsDTO.getId())
+                .last("limit 1"));
+        if (ObjectUtil.isNotNull(aDo)) {
+            throw new ServiceException("商品名称已存在");
+        }
+        for (ProductDTO productDTO : goodsDTO.getProductList()) {
+            ProductDO productDO = productManager.getOne(new LambdaQueryWrapper<ProductDO>()
+                    .eq(ProductDO::getSku, productDTO.getSku())
+                    .ne(ObjectUtil.isNotNull(productDTO.getId()), ProductDO::getId, productDTO.getId())
+                    .last("limit 1"));
+            if (ObjectUtil.isNotNull(productDO)) {
+                throw new ServiceException("sku已存在");
+            }
 
-        // 发送商品消息
-        GoodsChangeMessage message = new GoodsChangeMessage(GoodsChangeMessage.GoodsChangeType.Edit, goodsDTO.getId());
-        this.messageSender.send(new MqMessage(AmqpExchange.ERP_GOODS_CHANGE, AmqpExchange.ERP_GOODS_CHANGE + "_ROUTING", message));
+            ProductDO codeOne = productManager.getOne(new LambdaQueryWrapper<ProductDO>()
+                    .eq(ProductDO::getBarCode, productDTO.getBarCode())
+                    .ne(ObjectUtil.isNotNull(productDTO.getId()), ProductDO::getId, productDTO.getId())
+                    .last("limit 1"));
+            if (ObjectUtil.isNotNull(codeOne)) {
+                throw new ServiceException("条码已存在");
+            }
+        }
     }
 
 
+
     @Override
     public GoodsVO getInfo(Long id) {
         GoodsDO goodsDO = getById(id);
-        return converter.convert(goodsDO);
+        List<ProductDO> list = productManager.list(new LambdaQueryWrapper<ProductDO>().eq(ProductDO::getGoodsId, id));
+        List<ProductDTO> bean = BeanUtils.toBean(list, ProductDTO.class);
+        GoodsVO goodsVO = BeanUtil.copyProperties(goodsDO, GoodsVO.class);
+        goodsVO.setProductList(bean);
+        return goodsVO;
     }
 
     @Override
     public GoodsVO getDetail(Long id) {
         // 商品
         GoodsDO goodsDO = getById(id);
-
-        // 产品列表
-        List<ProductVO> productList = productConverter.convert(productManager.listByGoodsId(id));
-        // 分类
-        Map map = categoryManager.queryCatNameAndIs(goodsDO.getCategoryId());
-        // 品牌
-        BrandDO brandDO = brandManager.getModel(goodsDO.getBrandId());
+        List<ProductDO> list = productManager.list(new LambdaQueryWrapper<ProductDO>().eq(ProductDO::getGoodsId, id));
+        List<ProductDTO> bean = BeanUtils.toBean(list, ProductDTO.class);
+        GoodsVO goodsVO = BeanUtil.copyProperties(goodsDO, GoodsVO.class);
+        goodsVO.setProductList(bean);
         // 商品相册
         List<GoodsGalleryDO> galleryList = goodsGalleryManager.list(goodsDO.getId());
-        // 商品参数
-        List<GoodsParamsGroupVO> goodsParamsList = goodsParamsManager.queryGoodsParams(goodsDO.getCategoryId(), goodsDO.getId());
-
-        return converter.convert(goodsDO, productList, map, brandDO, galleryList, goodsParamsList);
+        goodsVO.setImageList(galleryList);
+        return goodsVO;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void delete(List<Long> ids) {
-        List<ProductStockDO> stockList = productStockManager.listByWarehouseAndProduct(null, ids);
-        if(stockList.stream().mapToInt(ProductStockDO::getNum).sum() > 0){
-            throw new ServiceException("商品已入库且剩余库存大于0,不能进行删除操作");
+    public void delete(Long id) {
+        GoodsDO goodsDO = getById(id);
+        if (goodsDO.getMarketEnable()) {
+            throw new ServiceException("请先下架商品");
         }
-        // 删除商品
-        removeBatchByIds(ids);
-        // 删除sku
-        productManager.deleteByGoodsId(ids);
+        removeById(id);
     }
 
     @Override
@@ -200,29 +169,28 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
         return this.baseMapper.selectCount(new LambdaQueryWrapper<GoodsDO>().eq(GoodsDO::getCategoryId, categoryId));
     }
 
-    private void checkParams(GoodsDTO goodsDTO) {
-        if (this.baseMapper.selectCount(new LambdaQueryWrapper<GoodsDO>().eq(GoodsDO::getSn, goodsDTO.getSn()).ne(ObjectUtil.isNotNull(goodsDTO.getId()), GoodsDO::getId, goodsDTO.getId()))>0) {
-            throw new ServiceException("商品编号已存在");
+    @Override
+    public Boolean updateCheck(Long id) {
+        ProductStockDO one = productStockManager.getOne(new LambdaQueryWrapper<ProductStockDO>().eq(ProductStockDO::getGoodsId, id).gt(ProductStockDO::getUsableStock, 0));
+        if (ObjectUtil.isNotNull(one)) {
+            return true;
         }
 
-        List<ProductDTO> productList = goodsDTO.getProductList();
-        if (!goodsDTO.getSpec() && productList.size() > 1) {
-            throw new ServiceException("单规格商品只能存在一个sku");
-        }
+        return false;
+    }
 
-        for (ProductDTO productDTO : productList) {
-            if (goodsDTO.getSpec()) {
-//                if (StringUtil.isEmpty(productDTO.getSn())) {
-//                    throw new ServiceException("产品编号不能为空");
-//                }
-                if (CollUtil.isEmpty(productDTO.getSpecList())) {
-                    throw new ServiceException("规格信息不能为空");
-                }
-            } else {
-                // 如果是无规格,将规格列表置空,防止前端传参错误
-                productDTO.setSpecList(new ProductDO.SpecList());
-            }
+    @Override
+    public List<ProductVO> getSkuByWarehouse() {
+        List<ProductDO> productDOS = productManager.list();
+        List<ProductVO> voList = BeanUtils.toBean(productDOS, ProductVO.class);
+        Set<Long> set = productDOS.stream().map(ProductDO::getGoodsId).collect(Collectors.toSet());
+        List<GoodsDO> goodsDOS = this.baseMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, set));
+        for (ProductVO vo : voList) {
+            GoodsDO goodsDO = goodsDOS.stream().filter(item -> item.getId().equals(vo.getGoodsId())).findFirst().get();
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsDO, GoodsVO.class);
+            vo.setGoodsVo(goodsVO);
         }
+        return voList;
     }
 }
 

+ 8 - 27
module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsSnManagerImpl.java

@@ -1,32 +1,20 @@
 package com.hys.app.service.erp.impl;
 
-import cn.hutool.core.collection.CollUtil;
 import com.hys.app.converter.erp.GoodsConverter;
 import com.hys.app.converter.erp.GoodsSnConverter;
-import com.hys.app.converter.erp.ProductConverter;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
 import com.hys.app.framework.exception.ServiceException;
-import com.hys.app.framework.rabbitmq.MessageSender;
-import com.hys.app.framework.rabbitmq.MqMessage;
-import com.hys.app.framework.util.StringUtil;
-import com.hys.app.mapper.goods.GoodsMapper;
 import com.hys.app.mapper.goods.GoodsSnMapper;
-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.GoodsChangeMessage;
-import com.hys.app.model.erp.vo.*;
-import com.hys.app.model.goods.dos.BrandDO;
-import com.hys.app.model.goods.dos.GoodsGalleryDO;
+import com.hys.app.model.erp.dos.GoodsSnDO;
+import com.hys.app.model.erp.dto.GoodsSnCreateDTO;
+import com.hys.app.model.erp.dto.GoodsSnDTO;
+import com.hys.app.model.erp.dto.GoodsSnQueryParams;
+import com.hys.app.model.erp.vo.GoodsSnVO;
+import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.goods.enums.GoodsSnStatusEnums;
-import com.hys.app.model.goods.vo.GoodsParamsGroupVO;
-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.goods.GoodsGalleryManager;
-import com.hys.app.service.goods.GoodsParamsManager;
-import com.hys.app.util.ValidateUtil;
+import com.hys.app.service.erp.GoodsManager;
+import com.hys.app.service.erp.GoodsSnManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,8 +22,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
-import static com.hys.app.framework.util.CollectionUtils.convertList;
-
 /**
  * 商品业务层实现
  *
@@ -52,11 +38,6 @@ public class GoodsSnManagerImpl extends BaseServiceImpl<GoodsSnMapper, GoodsSnDO
     private GoodsManager goodsManager;
 
 
-    @Autowired
-    private GoodsConverter goodsConverter;
-
-
-
     @Override
     public WebPage<GoodsSnVO> list(GoodsSnQueryParams queryParams){
         WebPage<GoodsSnDO> webPage = baseMapper.selectPage(queryParams);

+ 29 - 32
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -23,8 +23,10 @@ import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
 import com.hys.app.model.erp.enums.*;
 import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.OrderVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.service.erp.*;
 import com.hys.app.service.kuaidiniao.KuaiDiNiaoService;
+import com.hys.app.service.kuaidiniao.entity.AddressDTO;
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,9 +51,9 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     private OrderItemManager orderItemManager;
     private ProductStockManager productStockManager;
     private NoGenerateManager noGenerateManager;
-    private KuaiDiNiaoService kuaiDiNiaoService;
     private WarehouseOutMapper warehouseOutMapper;
     private WarehouseOutItemManager warehouseOutItemManager;
+    private ProductManager productManager;
 
     @Override
     public WebPage<OrderVO> list(OrderQueryParams queryParams) {
@@ -82,16 +84,16 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
 
     private void checkStock(Long warehouseId, List<OrderItemDO> itemList) {
         //订单后面需要发货订单的数量不等你超过可用库存的数量
-        List<Long> goodsId = itemList.stream().map(OrderItemDO::getGoodsId).collect(Collectors.toList());
+        List<Long> productId = itemList.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, warehouseId)
-                .in(ProductStockDO::getGoodsId, goodsId));
+                .in(ProductStockDO::getProductId, productId));
         for (ProductStockDO stockDO : stockDOList) {
-            OrderItemDO dto = itemList.stream().filter(item -> item.getGoodsId().equals(stockDO.getGoodsId())).findFirst().get();
+            OrderItemDO dto = itemList.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get();
             if (dto.getNum() > stockDO.getUsableStock()) {
-                throw new ServiceException(dto.getGoodsId() + "的可用库存数量不足");
+                throw new ServiceException(dto.getProductId() + "的可用库存数量不足");
             }
-            stockDO.setUsableStock(stockDO.getUsableStock()-dto.getNum());
+            stockDO.setUsableStock(stockDO.getUsableStock() - dto.getNum());
         }
         productStockManager.updateBatchById(stockDOList);
     }
@@ -121,17 +123,19 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         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<Long> goodIdlist = list.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
         // 查询订单项
         List<OrderItemDTO> itemList = BeanUtils.toBean(list, OrderItemDTO.class);
         //所有的商品信息
-        List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, goodIdlist));
+        List<ProductDO> productDOList = productManager.list(new LambdaQueryWrapper<ProductDO>().in(ProductDO::getId, goodIdlist));
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
-                .eq(ProductStockDO::getWarehouseId, orderDO.getWarehouseId()).in(ProductStockDO::getGoodsId, goodIdlist));
+                .eq(ProductStockDO::getWarehouseId, orderDO.getWarehouseId()).in(ProductStockDO::getProductId, 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());
+            ProductVO productVO = BeanUtil.copyProperties(productDOList.stream().filter(item -> item.getId().equals(dto.getProductId())).findFirst().get(), ProductVO.class);
+            dto.setProductVO(productVO);
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsMapper.selectById(productVO.getGoodsId()), GoodsVO.class);
             dto.setGoodsVO(goodsVO);
+            dto.setUsableStock(stockDOList.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get().getUsableStock());
         }
         orderVO.setItemList(itemList);
         return orderVO;
@@ -191,31 +195,22 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         return voPage;
     }
 
-    @Override
-    public String kdShip(PreOrderModel preOrderModel, Long orderId) {
-        String kdnCode = kuaiDiNiaoService.preOrder(preOrderModel);
-        if (StrUtil.isNotEmpty(kdnCode)) {
-            //如果快递鸟下单成功保存 快递信息
-            OrderDO aDo = getById(orderId);
-            converter.copyProperties(aDo, preOrderModel, preOrderModel.getReceiver(), preOrderModel.getSender());
-            aDo.setKdnOrderCode(kdnCode);
-            updateById(aDo);
-        }
-        return kdnCode;
-    }
 
     @Override
     @Transactional
-    public void orderSend(Long orderId) {
+    public void orderSend(Long orderId, AddressDTO addressDTO) {
         OrderDO aDo = getById(orderId);
+        aDo.setSendAddress(addressDTO.getSendAddress());
+        aDo.setReceiverAddress(addressDTO.getReceiveAddress());
         //根据订单查找到这个订单的所有货物扣减库存
-        List<OrderItemDO> goosList = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderId));
-        List<Long> goodsId = goosList.stream().map(OrderItemDO::getGoodsId).collect(Collectors.toList());
+        List<OrderItemDO> orderItemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderId));
+        List<Long> productId = orderItemDOS.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
         //查找这些商品在指定仓库的库存,减去对应数量
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
-                .eq(ProductStockDO::getWarehouseId, aDo.getWarehouseId()).in(ProductStockDO::getGoodsId, goodsId));
+                .eq(ProductStockDO::getWarehouseId, aDo.getWarehouseId()).in(ProductStockDO::getProductId, productId));
         for (ProductStockDO stockDO : stockDOList) {
-            Integer num = goosList.stream().filter(item -> item.getGoodsId().equals(stockDO.getGoodsId())).findFirst().get().getNum();
+            Integer num = orderItemDOS.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get().getNum();
+
             if (num < stockDO.getUsableStock()) {
                 if (OrderTypeEnum.TO_B.equals(aDo.getType())) {
                     //扣减可用库存
@@ -229,25 +224,27 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
                     stockDO.setTransitStock(stockDO.getTransitStock() + num);
                 }
             } else {
-                throw new ServiceException(stockDO.getGoodsId() + "的库存不够");
+                throw new ServiceException(stockDO.getProductId() + "的库存不够");
             }
         }
         productStockManager.updateBatchById(stockDOList);
         //生成出库单
         WarehouseOutDO outDO = new WarehouseOutDO();
         outDO.setType(WarehouseOutTypeEnum.BORROW_OUT);
+        outDO.setOrderIdList(orderId);
         outDO.setWarehouseId(aDo.getWarehouseId());
         outDO.setNotes("发货单生成的出货单");
         outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
         warehouseOutMapper.insert(outDO);
         //保存出库单明细
-        List<WarehouseOutItemDO> beanList = BeanUtils.toBean(goosList, WarehouseOutItemDO.class);
+        List<WarehouseOutItemDO> beanList = BeanUtils.toBean(orderItemDOS, WarehouseOutItemDO.class);
         beanList.forEach(item -> item.setWarehouseOutId(outDO.getId()));
         warehouseOutItemManager.saveBatch(beanList);
-        //更改订单状态
+        //更改订单状态56789=m+
+
         if (SaleOrderStatusEnum.TO_BE_SEND.equals(aDo.getStatus())) {
             aDo.setStatus(SaleOrderStatusEnum.SENDING);
-            aDo.setWarehouseId(outDO.getId());
+            aDo.setWarehouseOutId(outDO.getId());
             updateById(aDo);
         } else {
             throw new ServiceException("订单状态错误,待发货的订单才能发货");

+ 8 - 21
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderReturnManagerImpl.java

@@ -62,26 +62,14 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
     private OrderReturnItemManager orderReturnItemManager;
     private OrderManager orderManager;
     private OrderItemManager orderItemManager;
-    private WarehouseOutItemManager warehouseOutItemManager;
     private NoGenerateManager noGenerateManager;
     private OrderReturnMapper orderReturnMapper;
-    private WarehouseEntryBatchManager batchManager;
-    private MessageSender messageSender;
-    private AdminUserManager adminUserManager;
-    private FinanceItemManager financeItemManager;
     private GoodsManager goodsManager;
+    private ProductManager productManager;
 
     @Override
     public WebPage<OrderReturnVO> list(OrderReturnQueryParams queryParams) {
-        WebPage<OrderReturnDO> webPage = baseMapper.selectPage(queryParams);
-
-//        List<Long> deptIds = convertList(webPage.getData(), OrderReturnDO::getDeptId);
-//        Map<Long, String> deptNameMap = deptService.listAndConvertMap(deptIds, DeptDO::getId, DeptDO::getName);
-//
-//        List<Long> warehouseIds = convertList(webPage.getData(), OrderReturnDO::getWarehouseId);
-//        Map<Long, String> warehouseNameMap = warehouseManager.listAndConvertMap(warehouseIds, WarehouseDO::getId, WarehouseDO::getName);
-
-        return converter.convert(webPage);
+        return converter.convert(baseMapper.selectPage(queryParams));
     }
 
     @Override
@@ -91,7 +79,7 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
         if (ObjectUtil.isNull(aDo)) {
             throw new ServiceException("要发起售后的订单不存在");
         }
-        if (SaleOrderStatusEnum.SALE_AFTER_END.equals(aDo.getStatus())){
+        if (SaleOrderStatusEnum.SALE_AFTER_END.equals(aDo.getStatus())) {
             throw new ServiceException("一个订单只能做一次售后");
         }
         //判断要退货的商品有没有超过订单数量的商品
@@ -116,7 +104,7 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
         save(returnDO);
         // 保存退货单明细
         List<OrderReturnItemDO> itemBean = BeanUtils.toBean(orderReturnDTO.getItemList(), OrderReturnItemDO.class);
-        itemBean.forEach(item ->item.setOrderReturnId(returnDO.getId()));
+        itemBean.forEach(item -> item.setOrderReturnId(returnDO.getId()));
         orderReturnItemManager.saveBatch(itemBean);
     }
 
@@ -137,13 +125,12 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
     @Override
     public OrderReturnVO getDetail(String id) {
         OrderReturnVO orderReturnVO = converter.convert(getById(id));
-        List<OrderReturnItemDO> itemList = orderReturnItemManager.listByOrderReturnId(id);
-        List<OrderReturnItemVO> convert = itemConverter.convert(itemList);
+        List<OrderReturnItemVO> convert = itemConverter.convert(orderReturnItemManager.listByOrderReturnId(id));
         for (OrderReturnItemVO vo : convert) {
-            OrderItemDO itemDO = orderItemManager.getById(vo.getOrderItemId());
-            GoodsDO goodsDO = goodsManager.getById(itemDO.getGoodsId());
+            ProductVO productVO = BeanUtil.copyProperties(productManager.getById(vo.getProductId()), ProductVO.class);
+            vo.setProductVO(productVO);
+            GoodsDO goodsDO = goodsManager.getById(productVO.getGoodsId());
             vo.setGoodsVO(BeanUtil.copyProperties(goodsDO, GoodsVO.class));
-            vo.setNum(itemDO.getNum());
         }
         orderReturnVO.setItemList(convert);
         return orderReturnVO;

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

@@ -62,12 +62,7 @@ public class ProductManagerImpl extends BaseServiceImpl<ProductMapper, ProductDO
     }
 
     @Override
-    public void add(GoodsDO goodsDO, List<ProductDTO> productDTOList) {
-        List<ProductDO> productList = converter.convertList(productDTOList, goodsDO);
-        super.saveBatch(productList);
-
-        // 初始化库存
-        productStockManager.initStockByProduct(convertList(productList, ProductDO::getId), goodsDO.getId());
+    public void add(Long goodsId) {
     }
 
     @Override
@@ -80,20 +75,13 @@ public class ProductManagerImpl extends BaseServiceImpl<ProductMapper, ProductDO
         List<ProductDTO> updateDTOList = new ArrayList<>();
 
         for (ProductDTO productDTO : productDTOList) {
-            String buildSpecKey = buildSpecKey(productDTO.getSpecList());
+
             // 从旧sku中查找,未找到则新增,否则进行更新
-            Long oldProductId = oldProductMap.remove(buildSpecKey);
-            if (oldProductId == null) {
-                insertDTOList.add(productDTO);
-            } else {
-                productDTO.setId(oldProductId);
-                updateDTOList.add(productDTO);
-            }
         }
 
         // 执行最终的批量操作
         if (CollUtil.isNotEmpty(insertDTOList)) {
-            this.add(goodsDO, insertDTOList);
+//            this.add(goodsDO, insertDTOList);
         }
         if (CollUtil.isNotEmpty(updateDTOList)) {
             List<ProductDO> updateList = converter.convertList(updateDTOList, goodsDO);

+ 23 - 8
module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java

@@ -67,31 +67,31 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
 
     /**
      * 获取仓库列表
+     *
      * @param request
      * @return
      */
     @Override
-    public List<ProductStockV1> selectList(ProductStockQueryParams request){
+    public List<ProductStockV1> selectList(ProductStockQueryParams request) {
         return baseMapper.queryList(request);
     }
 
     /**
      * 获取仓库列表
+     *
      * @param request
      * @return
      */
     @Override
-    public Long selectCount(ProductStockQueryParams request){
+    public Long selectCount(ProductStockQueryParams request) {
         return baseMapper.selectCount(request);
     }
 
 
-
-
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void initStockByProduct(List<Long> productIds, Long goodsId) {
-        List<WarehouseDO> list1 = warehouseManager.list(new LambdaQueryWrapper<WarehouseDO>().eq(WarehouseDO::getDeleted,0));
+    public void initStockByProduct(Long goodsId) {
+        List<WarehouseDO> list1 = warehouseManager.list(new LambdaQueryWrapper<WarehouseDO>().eq(WarehouseDO::getDeleted, 0));
         List<ProductStockDO> list = new ArrayList<>();
         for (WarehouseDO warehouseDO : list1) {
             ProductStockDO productStockDO = new ProductStockDO();
@@ -133,10 +133,9 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     }
 
 
-
     @Override
     public void deleteByIds(List<Long> ids) {
-        if(ids.isEmpty()){
+        if (ids.isEmpty()) {
             return;
         }
         productStockMapper.deleteBatchIds(ids);
@@ -226,5 +225,21 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
             throw new ServiceException("库存更新失败,请联系管理员排查:" + warehouseId + "_" + productId);
         }
     }
+
+    @Override
+    public void intStock(List<ProductDO> bean) {
+        List<ProductStockDO> arrayList = new ArrayList<>();
+        List<WarehouseDO> list = warehouseManager.list();
+        for (ProductDO aDo : bean) {
+            for (WarehouseDO warehouseDO : list) {
+                ProductStockDO aDo1 = new ProductStockDO();
+                aDo1.setWarehouseId(warehouseDO.getId());
+                aDo1.setGoodsId(aDo.getGoodsId());
+                aDo1.setProductId(aDo.getId());
+                arrayList.add(aDo1);
+            }
+        }
+        saveBatch(arrayList);
+    }
 }
 

+ 15 - 18
module-erp/src/main/java/com/hys/app/service/erp/impl/StockDamageReportManagerImpl.java

@@ -25,6 +25,7 @@ import com.hys.app.model.erp.dto.*;
 import com.hys.app.model.erp.dto.message.StockDamageAuditPassMessage;
 import com.hys.app.model.erp.enums.*;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.model.erp.vo.StockDamageReportStatistics;
 import com.hys.app.model.erp.vo.StockDamageReportVO;
 import com.hys.app.service.erp.*;
@@ -59,6 +60,7 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
     private WarehouseEntryBatchManager warehouseEntryBatchManager;
     private ProductStockManager productStockManager;
     private GoodsManager goodsManager;
+    private ProductManager productManager;
 
     /**
      * 查询库存报损单分页列表数据
@@ -83,12 +85,12 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
     @Transactional(value = "goodsTransactionManager", propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void add(StockDamageReportDTO stockDamageReportDTO) {
         //报损数量不能大于库存数量
-        List<Long> collect = stockDamageReportDTO.getProductList().stream().map(StockDamageReportProductDTO::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = stockDamageReportDTO.getProductList().stream().map(StockDamageReportProductDTO::getProductId).collect(Collectors.toList());
         List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, stockDamageReportDTO.getWarehouseId())
-                .in(ProductStockDO::getGoodsId, collect));
+                .in(ProductStockDO::getProductId, collect));
         for (StockDamageReportProductDTO dto : stockDamageReportDTO.getProductList()) {
-            ProductStockDO aDo = list.stream().filter(item -> item.getGoodsId().equals(dto.getGoodsId())).findFirst().get();
+            ProductStockDO aDo = list.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get();
             if (aDo.getUsableStock() < dto.getReportNum()) {
                 throw new ServiceException("报损数量不能能大于可用库存数量");
             }
@@ -115,16 +117,18 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
         StockDamageReportVO reportVO = BeanUtil.copyProperties(report, StockDamageReportVO.class);
         //获取库存盘点单商品信息
         List<StockDamageReportProduct> goodsList = this.stockDamageReportProductManager.list(id);
-        List<Long> collect = goodsList.stream().map(StockDamageReportProduct::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = goodsList.stream().map(StockDamageReportProduct::getProductId).collect(Collectors.toList());
         List<ProductStockDO> page = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, report.getWarehouseId())
-                .in(ProductStockDO::getGoodsId, collect));
+                .in(ProductStockDO::getProductId, collect));
         List<StockDamageReportProductDTO> beanList = BeanUtils.toBean(goodsList, StockDamageReportProductDTO.class);
         for (StockDamageReportProductDTO dto : beanList) {
-            ProductStockDO aDo = page.stream().filter(item -> item.getGoodsId().equals(dto.getGoodsId())).findFirst().get();
-            dto.getGoodsVO().setUsableStock(aDo.getUsableStock());
+            ProductStockDO aDo = page.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get();
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsManager.getById(aDo.getGoodsId()), GoodsVO.class);
+            dto.setGoodsVO(goodsVO);
+            dto.setUsableStock(aDo.getUsableStock());
+            dto.setProductVO(BeanUtil.copyProperties(productManager.getById(aDo.getProductId()), ProductVO.class));
         }
-        beanList.forEach(item -> item.setGoodsVO(BeanUtil.copyProperties(goodsManager.getById(item.getGoodsId()), GoodsVO.class)));
         reportVO.setProductList(beanList);
         return reportVO;
     }
@@ -141,13 +145,13 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
         report.setStatus(DamageinventoryEnum.HAS_HANDLE);
         updateById(report);
         List<StockDamageReportProduct> productList = stockDamageReportProductManager.list(id);
-        List<Long> collect = productList.stream().map(StockDamageReportProduct::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = productList.stream().map(StockDamageReportProduct::getProductId).collect(Collectors.toList());
         List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, report.getWarehouseId())
-                .in(ProductStockDO::getGoodsId, collect));
+                .in(ProductStockDO::getProductId, collect));
 
         for (ProductStockDO stockDO : list) {
-            StockDamageReportProduct product = productList.stream().filter(item -> item.getGoodsId().equals(stockDO.getGoodsId())).findFirst().get();
+            StockDamageReportProduct product = productList.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get();
             stockDO.setActualStock(stockDO.getActualStock() - product.getReportNum());
             stockDO.setUsableStock(stockDO.getUsableStock() - product.getReportNum());
         }
@@ -166,15 +170,8 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
     public void edit(Long id, StockDamageReportDTO stockDamageReportDTO) {
         //获取库存报损单旧数据
         StockDamageReport stockDamageReport = this.getById(id);
-        if (!StockDamageReportStatusEnum.NEW.name().equals(stockDamageReport.getStatus())
-                && !StockDamageReportStatusEnum.REJECT.name().equals(stockDamageReport.getStatus())) {
-            throw new ServiceException("只有状态为未提交或审核驳回的库存报损单才可以进行编辑操作");
-        }
         //复制修改后的数据
         //修改库存报损单信息
-        this.updateById(stockDamageReport);
-        //入库库存报损单商品
-        this.stockDamageReportProductManager.saveProduct(id, stockDamageReportDTO.getProductList());
     }
 
     /**

+ 14 - 8
module-erp/src/main/java/com/hys/app/service/erp/impl/StockInventoryManagerImpl.java

@@ -17,6 +17,7 @@ import com.hys.app.mapper.erp.StockInventoryMapper;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dos.StockInventory;
 import com.hys.app.model.erp.dos.StockInventoryProduct;
+import com.hys.app.model.erp.dto.StockDamageReportProductDTO;
 import com.hys.app.model.erp.dto.StockInventoryDTO;
 import com.hys.app.model.erp.dto.StockInventoryParam;
 import com.hys.app.model.erp.dto.StockInventoryProductDTO;
@@ -24,6 +25,7 @@ import com.hys.app.model.erp.enums.DamageinventoryEnum;
 import com.hys.app.model.erp.enums.NoBusinessTypeEnum;
 import com.hys.app.model.erp.enums.StockInventoryStatusEnum;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.model.erp.vo.StockInventoryAllowable;
 import com.hys.app.model.erp.vo.StockInventoryVO;
 import com.hys.app.model.system.dos.AdminUser;
@@ -53,6 +55,7 @@ public class StockInventoryManagerImpl extends ServiceImpl<StockInventoryMapper,
     private AdminUserManager adminUserManager;
     private ProductStockManager productStockManager;
     private GoodsManager goodsManager;
+    private ProductManager productManager;
 
 
     /**
@@ -95,12 +98,12 @@ public class StockInventoryManagerImpl extends ServiceImpl<StockInventoryMapper,
         stockInventory.setStatus(DamageinventoryEnum.HAS_HANDLE);
         updateById(stockInventory);
         List<StockInventoryProduct> goodsList = this.stockInventoryProductManager.list(id);
-        List<Long> collect = goodsList.stream().map(StockInventoryProduct::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = goodsList.stream().map(StockInventoryProduct::getProductId).collect(Collectors.toList());
         List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, stockInventory.getWarehouseId())
-                .in(ProductStockDO::getGoodsId, collect));
+                .in(ProductStockDO::getProductId, collect));
         for (ProductStockDO aDo : list) {
-            StockInventoryProduct product = goodsList.stream().filter(item -> item.getGoodsId().equals(aDo.getGoodsId())).findAny().get();
+            StockInventoryProduct product = goodsList.stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findAny().get();
             aDo.setActualStock(aDo.getActualStock()+product.getDiffNum());
             aDo.setUsableStock(aDo.getUsableStock()+product.getDiffNum());
         }
@@ -120,16 +123,19 @@ public class StockInventoryManagerImpl extends ServiceImpl<StockInventoryMapper,
         StockInventoryVO stockInventoryVO = BeanUtil.copyProperties(stockInventory, StockInventoryVO.class);
         //获取库存盘点单商品信息
         List<StockInventoryProduct> goodsList = this.stockInventoryProductManager.list(id);
-        List<Long> collect = goodsList.stream().map(StockInventoryProduct::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = goodsList.stream().map(StockInventoryProduct::getProductId).collect(Collectors.toList());
         List<ProductStockDO> page = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, stockInventory.getWarehouseId())
-                .in(ProductStockDO::getGoodsId, collect));
+                .in(ProductStockDO::getProductId, collect));
         List<StockInventoryProductDTO> beanList = BeanUtils.toBean(goodsList, StockInventoryProductDTO.class);
         for (StockInventoryProductDTO dto : beanList) {
-            ProductStockDO aDo = page.stream().filter(item -> item.getGoodsId().equals(dto.getGoodsId())).findFirst().get();
-            dto.getGoodsVO().setUsableStock(aDo.getUsableStock());
+            ProductStockDO aDo = page.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get();
+            ProductVO productVO = BeanUtil.copyProperties(productManager.getById(dto.getProductId()), ProductVO.class);
+            dto.setProductVO(productVO);
+            GoodsVO goodsVO = BeanUtil.copyProperties(goodsManager.getById(productVO.getGoodsId()), GoodsVO.class);
+            dto.setUsableStock(aDo.getUsableStock());
+            dto.setGoodsVO(goodsVO);
         }
-        beanList.forEach(item ->item.setGoodsVO(BeanUtil.copyProperties(goodsManager.getById(item.getGoodsId()), GoodsVO.class)));
         stockInventoryVO.setProductList(beanList);
         return stockInventoryVO;
     }

+ 105 - 171
module-erp/src/main/java/com/hys/app/service/erp/impl/StockTransferManagerImpl.java

@@ -1,49 +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.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.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.converter.erp.StockTransferConverter;
 import com.hys.app.converter.erp.StockTransferProductConverter;
-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.BeanUtils;
 import com.hys.app.framework.util.DateUtil;
 import com.hys.app.framework.util.PageConvert;
 import com.hys.app.mapper.erp.StockTransferMapper;
 import com.hys.app.model.base.rabbitmq.AmqpExchange;
+import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dos.StockTransferDO;
 import com.hys.app.model.erp.dos.StockTransferProductDO;
-import com.hys.app.model.erp.dos.WarehouseDO;
 import com.hys.app.model.erp.dos.WarehouseEntryBatchDO;
 import com.hys.app.model.erp.dto.*;
 import com.hys.app.model.erp.enums.*;
-import com.hys.app.model.erp.vo.StockTransferAllowable;
-import com.hys.app.model.erp.vo.StockTransferStatistics;
-import com.hys.app.model.erp.vo.StockTransferVO;
+import com.hys.app.model.erp.vo.*;
 import com.hys.app.model.system.dos.AdminUser;
-import com.hys.app.model.system.dos.DeptDO;
-import com.hys.app.model.system.dto.DataPermissionDTO;
 import com.hys.app.service.erp.*;
 import com.hys.app.service.system.AdminUserManager;
 import com.hys.app.service.system.DeptManager;
-import com.hys.app.service.system.RoleManager;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.*;
-
-import static com.hys.app.framework.util.CollectionUtils.convertList;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 库存调拨业务层实现
@@ -52,159 +51,155 @@ import static com.hys.app.framework.util.CollectionUtils.convertList;
  * @since 2023-12-12 11:59:06
  */
 @Service
+@AllArgsConstructor
 public class StockTransferManagerImpl extends BaseServiceImpl<StockTransferMapper, StockTransferDO> implements StockTransferManager {
 
-    @Autowired
     private StockTransferConverter converter;
-
-    @Autowired
     private StockTransferProductConverter itemConverter;
-
-    @Autowired
-    private WarehouseEntryBatchManager warehouseEntryBatchManager;
-
-    @Autowired
-    private WarehouseManager warehouseManager;
-
-    @Autowired
     private NoGenerateManager noGenerateManager;
-
-    @Autowired
     private StockTransferProductManager stockTransferProductManager;
-
-    @Autowired
     private ProductStockManager productStockManager;
-
-    @Autowired
-    private DeptManager deptManager;
-
-    @Autowired
     private StockTransferMapper stockTransferMapper;
-
-    @Autowired
     private MessageSender messageSender;
-
-    @Autowired
-    private RoleManager roleManager;
-
-    @Autowired
     private AdminUserManager adminUserManager;
-
-    @Autowired
     private WarehouseEntryBatchManager batchManager;
+    private GoodsManager goodsManager;
+    private ProductManager productManager;
 
     @Override
     public WebPage<StockTransferVO> list(StockTransferQueryParams queryParams) {
-        // 按部门做数据过滤
-        DataPermissionDTO dataPermission = roleManager.getDataPermission(AdminUserContext.getAdminUserId());
-        if(!dataPermission.getAll()){
-            queryParams.setDeptIdList(dataPermission.getDeptIds());
-        }
-
         WebPage<StockTransferDO> webPage = baseMapper.selectPage(queryParams);
-
-        return converter.combination(webPage, dataPermission);
+        return converter.convert(webPage);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(StockTransferDTO stockTransferDTO) {
-        // 校验传参
-        check(stockTransferDTO);
-
-        // 保存调拨单
-        StockTransferDO transferDO = converter.combination(stockTransferDTO);
-        transferDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.StockTransfer, transferDO.getOutDeptId()));
-        transferDO.setStatus(StockTransferStatusEnum.NotSubmit);
-        save(transferDO);
-
-        // 保存调拨单明细
-        List<StockTransferProductDO> productList = itemConverter.combination(stockTransferDTO.getProductList(), stockTransferDTO.getBatchMap(), transferDO.getId());
-        stockTransferProductManager.saveBatch(productList);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void edit(StockTransferDTO stockTransferDTO) {
-        StockTransferDO oldDO = getById(stockTransferDTO.getId());
-        if (!new StockTransferAllowable(oldDO).getEdit()) {
-            throw new ServiceException("当前状态不允许编辑");
+        stockTransferDTO.isSameWarehouse();
+
+        List<Long> collect = stockTransferDTO.getProductList().stream().map(StockTransferProductDTO::getProductId).collect(Collectors.toList());
+        //需要调出的仓库商品库存
+        List<ProductStockDO> listOut = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, stockTransferDTO.getOutWarehouseId())
+                .in(ProductStockDO::getProductId, collect));
+        List<ProductStockDO> listIn = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, stockTransferDTO.getInWarehouseId())
+                .in(ProductStockDO::getProductId, collect));
+
+        for (ProductStockDO aDoOut : listOut) {
+            Integer num = stockTransferDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDoOut.getProductId())).findFirst().get().getNum();
+            if (aDoOut.getUsableStock() < num) {
+                throw new ServiceException(num + "的库存数量少于调拨出的库存数量");
+            }
+            //扣减调拨仓库的库存数量
+            aDoOut.setUsableStock(aDoOut.getUsableStock() - num);
+            aDoOut.setActualStock(aDoOut.getActualStock() - num);
+            //增加调入仓库的库存数量
+            for (ProductStockDO aDo : listIn) {
+                if (aDo.getProductId().equals(aDoOut.getProductId())) {
+                    aDo.setUsableStock(aDo.getUsableStock() + num);
+                    aDo.setActualStock(aDo.getActualStock() + num);
+                }
+            }
         }
-
-        // 校验传参
-        check(stockTransferDTO);
-
+        listOut.addAll(listIn);
+        productStockManager.updateBatchById(listOut);
         // 保存调拨单
-        StockTransferDO transferDO = converter.combination(stockTransferDTO);
-        updateById(transferDO);
-
+        StockTransferDO aDo = BeanUtil.copyProperties(stockTransferDTO, StockTransferDO.class);
+        aDo.setSn(noGenerateManager.generate(NoBusinessTypeEnum.StockTransfer, 78L));
+        save(aDo);
         // 保存调拨单明细
-        List<StockTransferProductDO> productList = itemConverter.combination(stockTransferDTO.getProductList(), stockTransferDTO.getBatchMap(), transferDO.getId());
-        stockTransferProductManager.deleteByStockTransferId(Collections.singletonList(stockTransferDTO.getId()));
-        stockTransferProductManager.saveBatch(productList);
+        List<StockTransferProductDO> doList = BeanUtils.toBean(stockTransferDTO.getProductList(), StockTransferProductDO.class);
+        doList.forEach(item -> item.setStockTransferId(aDo.getId()));
+        stockTransferProductManager.saveBatch(doList);
     }
 
     @Override
-    public StockTransferVO getDetail(String id) {
+    public StockTransferVO getDetail(Long id) {
         StockTransferVO stockTransferVO = converter.convert(getById(id));
         List<StockTransferProductDO> productList = stockTransferProductManager.listByStockTransferId(id);
-        stockTransferVO.setProductList(itemConverter.convert(productList));
+        List<StockTransferProductVO> convert = itemConverter.convert(productList);
+        convert.forEach(item -> {
+            ProductVO productVO = BeanUtil.copyProperties(productManager.getById(item.getProductId()), ProductVO.class);
+            item.setProductVO(productVO);
+            item.setGoodsVO(BeanUtil.copyProperties(goodsManager.getById(productVO.getGoodsId()), GoodsVO.class));
+        });
+        stockTransferVO.setProductList(convert);
         return stockTransferVO;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void delete(List<String> ids) {
-        List<StockTransferDO> stockTransferList = listByIds(ids);
-        for (StockTransferDO stockTransferDO : stockTransferList) {
-            if (!new StockTransferAllowable(stockTransferDO).getDelete()) {
-                throw new ServiceException(stockTransferDO.getSn() + "不能进行删除操作");
+    public void withdraw(Long id) {
+        StockTransferDO transferDO = getById(id);
+        if (TransferTypeEnum.ROLLBACK_HANDLE.equals(transferDO.getStatus())){
+            throw new ServiceException("该数据已经回滚,请勿重复操作");
+        }
+        transferDO.setStatus(TransferTypeEnum.ROLLBACK_HANDLE);
+        updateById(transferDO);
+        //库存回滚
+        List<StockTransferProductDO> productList = stockTransferProductManager.listByStockTransferId(id);
+        List<Long> collect = productList.stream().map(StockTransferProductDO::getProductId).collect(Collectors.toList());
+        //需要调出的仓库商品库存
+        List<ProductStockDO> listOut = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, transferDO.getOutWarehouseId())
+                .in(ProductStockDO::getProductId, collect));
+        List<ProductStockDO> listIn = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, transferDO.getInWarehouseId())
+                .in(ProductStockDO::getProductId, collect));
+
+        for (ProductStockDO aDo : listIn) {
+            Integer num = productList.stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findFirst().get().getNum();
+            if (aDo.getUsableStock() < num) {
+                throw new ServiceException(num + "的库存数量少于调拨出的库存数量,不足以支持回滚数量");
+            }
+            //扣减调拨仓库的库存数量
+            aDo.setUsableStock(aDo.getUsableStock() + num);
+            aDo.setActualStock(aDo.getActualStock() + num);
+            for (ProductStockDO stockDO : listOut) {
+                stockDO.setUsableStock(stockDO.getUsableStock() + num);
+                stockDO.setActualStock(stockDO.getActualStock() + num);
             }
         }
-        removeBatchByIds(ids);
-        stockTransferProductManager.deleteByStockTransferId(ids);
+        listOut.addAll(listIn);
+        productStockManager.updateBatchById(listOut);
     }
 
+
     @Override
-    public void submit(String id) {
-        // 校验
-        StockTransferDO oldDO = getById(id);
-        if (!new StockTransferAllowable(oldDO).getSubmit()) {
-            throw new ServiceException("当前状态不允许提交");
-        }
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(StockTransferDTO stockTransferDTO) {
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Long> ids) {
 
-        lambdaUpdate()
-                .set(StockTransferDO::getStatus, StockTransferStatusEnum.Submit)
-                .eq(StockTransferDO::getId, id)
-                .update();
     }
 
     @Override
-    public void withdraw(Long id) {
+    public void submit(Long id) {
         // 校验
         StockTransferDO oldDO = getById(id);
-        if (!new StockTransferAllowable(oldDO).getWithdraw()) {
-            throw new ServiceException("当前状态不允许撤销");
-        }
+
 
         lambdaUpdate()
-                .set(StockTransferDO::getStatus, StockTransferStatusEnum.NotSubmit)
+                .set(StockTransferDO::getStatus, StockTransferStatusEnum.Submit)
                 .eq(StockTransferDO::getId, id)
                 .update();
     }
 
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void confirm(List<String> ids, Long handleById) {
         List<StockTransferDO> stockTransferList = listByIds(ids);
         for (StockTransferDO stockTransferDO : stockTransferList) {
-            if (!new StockTransferAllowable(stockTransferDO).getConfirm()) {
-                throw new ServiceException(stockTransferDO.getSn() + "不能进行确认操作");
-            }
+
         }
 
         AdminUser adminUser = adminUserManager.getModel(handleById);
-        if(adminUser == null){
+        if (adminUser == null) {
             throw new ServiceException("经手人不存在");
         }
 
@@ -239,13 +234,11 @@ public class StockTransferManagerImpl extends BaseServiceImpl<StockTransferMappe
     public void reject(List<String> ids, Long handleById) {
         List<StockTransferDO> stockTransferList = listByIds(ids);
         for (StockTransferDO stockTransferDO : stockTransferList) {
-            if (!new StockTransferAllowable(stockTransferDO).getConfirm()) {
-                throw new ServiceException(stockTransferDO.getSn() + "不能进行退回操作");
-            }
+
         }
 
         AdminUser adminUser = adminUserManager.getModel(handleById);
-        if(adminUser == null){
+        if (adminUser == null) {
             throw new ServiceException("经手人不存在");
         }
 
@@ -258,65 +251,6 @@ public class StockTransferManagerImpl extends BaseServiceImpl<StockTransferMappe
                 .update();
     }
 
-    private void check(StockTransferDTO stockTransferDTO) {
-        DeptDO outDeptDO = deptManager.getById(stockTransferDTO.getOutDeptId());
-        if (outDeptDO == null) {
-            throw new ServiceException("调出方部门不存在");
-        }
-
-        DeptDO inDeptDO = deptManager.getById(stockTransferDTO.getInDeptId());
-        if (inDeptDO == null) {
-            throw new ServiceException("调入方部门不存在");
-        }
-
-        WarehouseDO outWarehouseDO = warehouseManager.getById(stockTransferDTO.getOutWarehouseId());
-//        if (!outWarehouseDO.getDeptId().equals(stockTransferDTO.getOutDeptId())) {
-//            throw new ServiceException("调出方部门不存在该仓库");
-//        }
-        WarehouseDO inWarehouseDO = warehouseManager.getById(stockTransferDTO.getInWarehouseId());
-//        if (!inWarehouseDO.getDeptId().equals(stockTransferDTO.getInDeptId())) {
-//            throw new ServiceException("调入方部门不存在该仓库");
-//        }
-
-        AdminUser outHandledBy = adminUserManager.getModel(stockTransferDTO.getOutHandledById());
-        if (outHandledBy == null) {
-            throw new ServiceException("调出方经手人不存在");
-        }
-        AdminUser inHandledBy = null;
-        if(stockTransferDTO.getInHandledById() != null){
-            inHandledBy = adminUserManager.getModel(stockTransferDTO.getInHandledById());
-            if (inHandledBy == null) {
-                throw new ServiceException("调入方经手人不存在");
-            }
-        }
-
-
-        // 校验入库批次
-        List<Long> batchIds = convertList(stockTransferDTO.getProductList(), StockTransferProductDTO::getWarehouseEntryBatchId);
-        Map<Long, WarehouseEntryBatchDO> batchMap = warehouseEntryBatchManager.listAndConvertMap(batchIds, WarehouseEntryBatchDO::getId);
-        for (StockTransferProductDTO transferProductDTO : stockTransferDTO.getProductList()) {
-            WarehouseEntryBatchDO batchDO = batchMap.get(transferProductDTO.getWarehouseEntryBatchId());
-            if (batchDO == null) {
-                throw new ServiceException("批次:" + transferProductDTO.getWarehouseEntryBatchId() + "不存在");
-            }
-            if (!batchDO.getWarehouseId().equals(stockTransferDTO.getOutWarehouseId())) {
-                throw new ServiceException("批次:" + batchDO.getSn() + "和调出方仓库不一致");
-            }
-            if (batchDO.getRemainNum() < transferProductDTO.getNum()) {
-                throw new ServiceException("批次:" + batchDO.getSn() + "库存不足");
-            }
-        }
-
-        // 填充批次数据
-        stockTransferDTO.setBatchMap(batchMap);
-        stockTransferDTO.setOutDeptDO(outDeptDO);
-        stockTransferDTO.setInDeptDO(inDeptDO);
-        stockTransferDTO.setOutWarehouseDO(outWarehouseDO);
-        stockTransferDTO.setInWarehouseDO(inWarehouseDO);
-        stockTransferDTO.setOutHandleBy(outHandledBy);
-        stockTransferDTO.setInHandleBy(inHandledBy);
-    }
-
     /**
      * 查询库存调拨统计分页列表数据
      *

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

@@ -62,7 +62,7 @@ public class StockTransferProductManagerImpl extends BaseServiceImpl<StockTransf
     }
 
     @Override
-    public List<StockTransferProductDO> listByStockTransferId(String stockTransferId) {
+    public List<StockTransferProductDO> listByStockTransferId(Long stockTransferId) {
         return lambdaQuery().eq(StockTransferProductDO::getStockTransferId, stockTransferId).list();
     }
 

+ 12 - 10
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryManagerImpl.java

@@ -110,7 +110,6 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
     @Autowired
     private ProductStockManager productStockManager;
 
-
     @Override
     public WebPage<WarehouseEntryDO> list(WarehouseEntryQueryParams queryParams) {
         WebPage<WarehouseEntryDO> page = baseMapper.selectPage(queryParams);
@@ -139,7 +138,7 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         ArrayList<WarehouseEntryProductDO> productList = new ArrayList<>();
         for (WarehouseEntryProductDTO dto : productList1) {
             WarehouseEntryProductDO productDO = BeanUtil.copyProperties(dto, WarehouseEntryProductDO.class);
-            productDO.setGoodsId(dto.getProductId());
+            productDO.setProductId(dto.getProductId());
             productDO.setWarehouseEntryId(warehouseEntryDO.getId());
             productList.add(productDO);
         }
@@ -164,7 +163,7 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         ArrayList<WarehouseEntryProductDO> productList = new ArrayList<>();
         for (WarehouseEntryProductDTO dto : warehouseEntryDTO.getProductList()) {
             WarehouseEntryProductDO productDO = BeanUtil.copyProperties(dto, WarehouseEntryProductDO.class);
-            productDO.setGoodsId(dto.getProductId());
+            productDO.setProductId(dto.getProductId());
             productDO.setWarehouseEntryId(warehouseEntryDO.getId());
             productList.add(productDO);
         }
@@ -180,10 +179,10 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         }
         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));
+                .eq(ProductStockDO::getWarehouseId, warehouseEntryDTO.getWarehouseId()).in(ProductStockDO::getProductId, collect));
         for (ProductStockDO aDo : stockDOList) {
             //增加可用库存实际库存
-            WarehouseEntryProductDTO productDO = warehouseEntryDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDo.getGoodsId())).findFirst().get();
+            WarehouseEntryProductDTO productDO = warehouseEntryDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findFirst().get();
             aDo.setUsableStock(aDo.getUsableStock()+productDO.getNum());
             aDo.setActualStock(aDo.getActualStock()+productDO.getNum());
             if (WarehouseEntyrTypeEnum.HAIL_ENTRY.equals(warehouseEntryDTO.getType())){
@@ -201,14 +200,17 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         WarehouseEntryDO warehouseEntryDO = getById(id);
         WarehouseEntryVO warehouseEntryVO = BeanUtil.copyProperties(warehouseEntryDO, WarehouseEntryVO.class);
         List<WarehouseEntryProductDO> productList = warehouseEntryProductManager.listByWarehouseEntryId(id);
-        List<Long> collect = productList.stream().map(WarehouseEntryProductDO::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = productList.stream().map(WarehouseEntryProductDO::getProductId).collect(Collectors.toList());
         //所有的商品信息
-        List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, collect));
+        List<ProductDO> productDOS = productManager.list(new LambdaQueryWrapper<ProductDO>().in(ProductDO::getId, collect));
+
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
-                .eq(ProductStockDO::getWarehouseId, warehouseEntryVO.getWarehouseId()).in(ProductStockDO::getGoodsId, collect));
+                .eq(ProductStockDO::getWarehouseId, warehouseEntryVO.getWarehouseId()).in(ProductStockDO::getProductId, 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());
+            ProductDO aDo = productDOS.stream().filter(item -> item.getId().equals(productDO.getProductId())).findFirst().get();
+            productDO.setGoodsVO(goodsMapper.selectById(aDo.getGoodsId()));
+            productDO.setProductVO(aDo);
+            productDO.setUsableStock(stockDOList.stream().filter(item->item.getProductId().equals(productDO.getProductId())).findFirst().get().getUsableStock());
         }
         warehouseEntryVO.setProductList(itemConverter.convert(productList));
         return warehouseEntryVO;

+ 0 - 17
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryProductManagerImpl.java

@@ -118,22 +118,5 @@ public class WarehouseEntryProductManagerImpl extends BaseServiceImpl<WarehouseE
                 .eq(WarehouseEntryProductDO::getId, id)
                 .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;
-    }
 }
 

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

@@ -1,10 +1,13 @@
 package com.hys.app.service.erp.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.converter.erp.WarehouseConverter;
 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.mapper.erp.WarehouseMapper;
+import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dos.WarehouseDO;
 import com.hys.app.model.erp.dto.WarehouseDTO;
 import com.hys.app.model.erp.dto.WarehouseQueryParams;
@@ -53,6 +56,9 @@ public class WarehouseManagerImpl extends BaseServiceImpl<WarehouseMapper, Wareh
     @Autowired
     private AdminUserManager adminUserManager;
 
+    @Autowired
+    private GoodsManager goodsManager;
+
     @Override
     public WebPage<WarehouseVO> list(WarehouseQueryParams queryParams) {
         WebPage<WarehouseDO> webPage = baseMapper.selectPage(queryParams);
@@ -90,6 +96,11 @@ public class WarehouseManagerImpl extends BaseServiceImpl<WarehouseMapper, Wareh
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void delete(Long id) {
+        //查询所有上架的商品
+        List<GoodsDO> list = goodsManager.list(new LambdaQueryWrapper<GoodsDO>().eq(GoodsDO::getMarketEnable, true));
+
+//        productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().eq(ProductStockDO::getWarehouseId,id).in(list.stream().map(GoodsDO::getId)));
+
         if (warehouseEntryManager.countByWarehouseId(id) > 0) {
             throw new ServiceException("该仓库已关联入库单,不能进行删除操作");
         }

+ 48 - 44
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java

@@ -38,6 +38,7 @@ 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 lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -58,41 +59,21 @@ import static com.hys.app.framework.util.CollectionUtils.*;
  * @since 2023-12-07 16:50:20
  */
 @Service
+@AllArgsConstructor
 public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper, WarehouseOutDO> implements WarehouseOutManager {
 
-    @Autowired
     private WarehouseOutConverter converter;
-
-    @Autowired
     private OrderManager orderManager;
-
-    @Autowired
     private NoGenerateManager noGenerateManager;
-
-    @Autowired
     private WarehouseOutItemManager warehouseOutItemManager;
-
-    @Autowired
     private WarehouseEntryBatchManager batchManager;
-
-    @Autowired
     private WarehouseOutMapper warehouseOutMapper;
-
-    @Autowired
     private MessageSender messageSender;
-
-    @Autowired
     private AdminUserManager adminUserManager;
-
-    @Autowired
-    private GoodsMapper goodsMapper;
-
-    @Autowired
     private FinanceItemManager financeItemManager;
-
-
-    @Autowired
     private ProductStockManager productStockManager;
+    private GoodsMapper goodsMapper;
+    private ProductManager productManager;
 
 
     @Override
@@ -113,7 +94,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         // 保存出库单明细
         warehouseOutDTO.setId(warehouseOutDO.getId());
         List<WarehouseOutItemDO> productList = BeanUtils.toBean(warehouseOutDTO.getProductList(), WarehouseOutItemDO.class);
-        productList.forEach(item->item.setWarehouseOutId(warehouseOutDO.getId()));
+        productList.forEach(item -> item.setWarehouseOutId(warehouseOutDO.getId()));
         warehouseOutItemManager.saveBatch(productList);
         //如果是出库就要扣减库存
         if ("submit".equals(warehouseOutDTO.getSaveOrSubmit())) {
@@ -130,7 +111,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         updateById(warehouseOutDO);
         // 保存出库单明细
         List<WarehouseOutItemDO> productList = BeanUtils.toBean(warehouseOutDTO.getProductList(), WarehouseOutItemDO.class);
-        productList.forEach(item->item.setWarehouseOutId(warehouseOutDO.getId()));
+        productList.forEach(item -> item.setWarehouseOutId(warehouseOutDO.getId()));
         warehouseOutItemManager.deleteByWarehouseOutId(Collections.singletonList(warehouseOutDTO.getId()));
         warehouseOutItemManager.saveBatch(productList);
         //如果是出库就要扣减库存
@@ -143,11 +124,11 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         if ("Y".equals(warehouseOutDO.getHasSubmit())) {
             throw new ServiceException("数据已出库,请勿重复操作");
         }
-        List<Long> collect = warehouseOutDTO.getProductList().stream().map(WarehouseOutProductDTO::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = warehouseOutDTO.getProductList().stream().map(WarehouseOutProductDTO::getProductId).collect(Collectors.toList());
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
-                .eq(ProductStockDO::getWarehouseId, warehouseOutDTO.getWarehouseId()).in(ProductStockDO::getGoodsId, collect));
+                .eq(ProductStockDO::getWarehouseId, warehouseOutDTO.getWarehouseId()).in(ProductStockDO::getProductId, collect));
         for (ProductStockDO aDo : stockDOList) {
-            WarehouseOutProductDTO productDO = warehouseOutDTO.getProductList().stream().filter(item -> item.getGoodsId().equals(aDo.getGoodsId())).findFirst().get();
+            WarehouseOutProductDTO productDO = warehouseOutDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findFirst().get();
             if (productDO.getOutNum() > aDo.getUsableStock()) {
                 throw new ServiceException(productDO.getGoodName() + "的可用库存不够,请核对数据");
             }
@@ -166,19 +147,21 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         WarehouseOutDO warehouseOutDO = getById(id);
         WarehouseOutVO outVO = BeanUtil.copyProperties(warehouseOutDO, WarehouseOutVO.class);
         // 查询出库明细
-        List<WarehouseOutItemDO> itemList = warehouseOutItemManager.list(new LambdaQueryWrapper<WarehouseOutItemDO>().eq(WarehouseOutItemDO::getWarehouseOutId,id));
+        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<Long> goodIdlist = itemList.stream().map(WarehouseOutItemDO::getProductId).collect(Collectors.toList());
 
         //所有的商品信息
-        List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapper<GoodsDO>().in(GoodsDO::getId, goodIdlist));
+        List<ProductDO> list = productManager.list(new LambdaQueryWrapper<ProductDO>().in(ProductDO::getId,goodIdlist));
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
-                .eq(ProductStockDO::getWarehouseId, warehouseOutDO.getWarehouseId()).in(ProductStockDO::getGoodsId, goodIdlist));
+                .eq(ProductStockDO::getWarehouseId, warehouseOutDO.getWarehouseId()).in(ProductStockDO::getProductId, 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);
+            ProductVO productVO = BeanUtil.copyProperties(list.stream().filter(item -> item.getId().equals(dto.getProductId())).findFirst().get(), ProductVO.class);
+            dto.setProductVO(productVO);
+            GoodsDO goodsDO = goodsMapper.selectById(productVO.getGoodsId());
+            dto.setUsableStock(stockDOList.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get().getUsableStock());
+            dto.setGoodsVO(BeanUtil.copyProperties(goodsDO,GoodsVO.class));
         }
         outVO.setProductList(productList);
         return outVO;
@@ -334,25 +317,46 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
     }
 
 
-
     @Override
-    public Page<GoodsVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam) {
+    public Page<ProductVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam,String orderType) {
+        //找出所有上架的商品
+        LambdaQueryWrapper<GoodsDO> wrapper = new LambdaQueryWrapper<GoodsDO>().eq(GoodsDO::getMarketEnable, true);
+
+        if (StrUtil.isNotBlank(orderType)) {
+            switch (orderType) {
+                case "TO_B":
+                    wrapper.eq(GoodsDO::getHireOrSail,"sail");
+                    break;
+                case "TO_C":
+                    wrapper.eq(GoodsDO::getHireOrSail,"hire");
+                    break;
+                default:
+                    break;
+            }
+        }
+        List<GoodsDO> list = goodsMapper.selectList(wrapper);
+        List<Long> goodsId = list.stream().map(GoodsDO::getId).collect(Collectors.toList());
+        if (CollUtil.isEmpty(list)){
+            throw new ServiceException("暂无对应类型的商品可供操作");
+        }
         IPage<ProductStockDO> page = new Page<>(queryParam.getPageNo(), queryParam.getPageSize());
         IPage<ProductStockDO> page1 = productStockManager.page(page, new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, warehouseId)
+                .in(ProductStockDO::getGoodsId, goodsId)
                 .gt(ProductStockDO::getUsableStock, 0));
-        List<Long> collect = page1.getRecords().stream().map(ProductStockDO::getGoodsId).collect(Collectors.toList());
+        List<Long> collect = page1.getRecords().stream().map(ProductStockDO::getProductId).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());
+            List<ProductDO> productDOS = productManager.list(new LambdaQueryWrapper<ProductDO>().in(ProductDO::getId, collect));
+            List<ProductVO> productVOS = BeanUtils.toBean(productDOS, ProductVO.class);
+            for (ProductVO goodsVO : productVOS) {
+                goodsVO.setUsableStock(page1.getRecords().stream().filter(item -> item.getProductId().equals(goodsVO.getId())).findFirst().get().getUsableStock());
+                goodsVO.setGoodsVo(BeanUtil.copyProperties(goodsMapper.selectById(goodsVO.getGoodsId()),GoodsVO.class));
             }
-            Page<GoodsVO> pageVo = new Page<>(queryParam.getPageNo(), queryParam.getPageNo());
+            Page<ProductVO> pageVo = new Page<>(queryParam.getPageNo(), queryParam.getPageNo());
             pageVo.setPages(page1.getPages());
             pageVo.setSize(page1.getSize());
             pageVo.setTotal(page1.getTotal());
-            pageVo.setRecords(beanVo);
+            pageVo.setRecords(productVOS);
             return pageVo;
         }
         return new Page<>();

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

@@ -1,14 +1,25 @@
 package com.hys.app.service.kuaidiniao;
 
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
+import com.hys.app.service.kuaidiniao.entity.ReturnBackBase;
+import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
 
 public interface KuaiDiNiaoService {
 
 
     /**
-     * 快递鸟预下单接口
+     * 快递鸟回调
      *
-     * @param preOrderModel 接收参数
+     * @param returnBackBase
+     * @return
      */
-    String preOrder(PreOrderModel preOrderModel);
+    resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase);
+
+
+    /**
+     * 快递鸟下单获取快递单号
+     *
+     * @param preOrderModel
+     */
+    String kdShip(PreOrderModel preOrderModel, Long orderId);
 }

+ 95 - 6
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -2,17 +2,23 @@ package com.hys.app.service.kuaidiniao;
 
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.URLUtil;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.hys.app.converter.erp.OrderConverter;
 import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.security.model.Admin;
 import com.hys.app.framework.util.DateUtil;
-import com.hys.app.service.kuaidiniao.entity.LongitudeLatitude;
-import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
+import com.hys.app.model.erp.dos.OrderDO;
+import com.hys.app.service.erp.OrderManager;
+import com.hys.app.service.kuaidiniao.entity.*;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -39,14 +45,28 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     @Value("${kuaidianiao.apiUrl}")
     private String url;
 
+    @Autowired
+    private OrderManager orderManager;
+
+    @Autowired
+    private OrderConverter converter;
+
 
     @Override
-    public String preOrder(PreOrderModel preOrderModel) {
-        //填充参数
+    public String kdShip(PreOrderModel preOrderModel, Long orderId) {
         fillParam(preOrderModel);
-        return sendUrl(JSONUtil.toJsonStr(preOrderModel), KdConstants.preOrder);
+        String kdnCode = sendUrl(JSONUtil.toJsonStr(preOrderModel), KdConstants.preOrder);
+        if (StrUtil.isNotEmpty(kdnCode)) {
+            //如果快递鸟下单成功保存 快递信息
+            OrderDO aDo = orderManager.getById(orderId);
+            converter.copyProperties(aDo, preOrderModel, preOrderModel.getReceiver(), preOrderModel.getSender());
+            aDo.setKdnOrderCode(kdnCode);
+            orderManager.updateById(aDo);
+        }
+        return kdnCode;
     }
 
+
     /**
      * @param dataJson      业务参数
      * @param interfaceType 请求接口指令
@@ -72,7 +92,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                     Map mapData = JSON.parseObject(mapCreate.get("data").toString(), Map.class);
                     return mapData.get("kdnOrderCode").toString();
                 }
-            }else {
+            } else {
                 throw new ServiceException(map.get("reason").toString());
             }
         } catch (Exception e) {
@@ -97,4 +117,73 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
 
 
     }
+
+    /**
+     * 推送待接单状态	接口指令103,状态码100
+     * 推送业务员接单状态	接口指令103,状态码201
+     * 推送业务员到达状态	接口指令103,状态码202
+     * 推送配送中状态	接口指令103,状态码300
+     * 推送签收状态
+     * (签收分为两种签收)	接口指令103,状态码401(正常签收)
+     * 接口指令103,状态码402(退回签收)
+     * 推送取消状态	接口指令103,状态码500
+     * 推送下单失败状态	接口指令103,状态码600
+     * 推送订单费用状态	接口指令103,状态码206
+     */
+
+    @Override
+    public resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase) {
+        Map map = JSON.parseObject(returnBackBase.getRequestData(), Map.class);
+        resReturnBackBase base = new resReturnBackBase();
+        base.setKdnOrderCode(map.get("kdnOrderCode").toString());
+        //验签
+        OrderDO aDo = orderManager.getById(Integer.valueOf(map.get("orderCode").toString()));
+        if (!checkDesign(aDo, returnBackBase.getDataSign())) {
+            base.setRequestData("验签失败");
+            base.setResultCode(1002);
+            return base;
+        }
+
+
+        switch (map.get("interfaceType").toString()) {
+            case "100":
+
+                break;
+            case "201":
+                break;
+            case "202":
+                break;
+            case "300":
+                break;
+            case "401":
+                break;
+            case "402":
+                break;
+            case "500":
+                break;
+            case "600":
+                ReCreateOrderFail reCreateOrderFail = JSON.parseObject(returnBackBase.getRequestData(), ReCreateOrderFail.class);
+                break;
+            case "206":
+                break;
+            default:
+                base.setResultCode(1002);
+                base.setReason("内部业务异常,麻烦尽快通知商家,tel:13127911751");
+        }
+        return base;
+    }
+
+    private Boolean checkDesign(OrderDO aDo, String dataSign) {
+        try {
+            PreOrderModel model = new PreOrderModel();
+            converter.copyProperties(model, aDo);
+            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(model) + apiKey)), "UTF-8");
+            if (dataSign.equals(design)) {
+                return true;
+            }
+            return false;
+        } catch (Exception e) {
+            return false;
+        }
+    }
 }

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

@@ -0,0 +1,14 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+
+import lombok.Data;
+
+/**
+ * 快递鸟  预下单商品接收类
+ */
+@Data
+public class AddressDTO {
+
+   private String sendAddress;
+   private String receiveAddress;
+}

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

@@ -18,7 +18,7 @@ public class KdGood {
     private String goodsName;
 
     @ApiModelProperty(value = "物品价格")
-    private Double goodsPrice=0.0;
+    private Double goodsPrice=0.01;
 
     @Range(min = 1, max = 99)
     @ApiModelProperty(value = "数量")

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

@@ -0,0 +1,32 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+
+import lombok.Data;
+
+/**
+ * 快递鸟  预下单商品接收类
+ */
+@Data
+public class ReCreateOrderFail {
+
+    //订单状态固定600
+    private Integer orderStatus;
+
+    //失败代码
+    private Integer failCode;
+
+    //请求时间毫秒级时间戳
+    private Long requestTime;
+
+    //失败原因
+    private String failReason;
+
+    //商家订单号
+    private String kdnOrderCode;
+
+    //数据签名
+    private String orderCode;
+
+    //备注
+    private String remark;
+}

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

@@ -0,0 +1,23 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+
+import lombok.Data;
+
+/**
+ * 快递鸟  预下单商品接收类
+ */
+@Data
+public class ReturnBackBase {
+
+    //客户编号
+    private String customerCode;
+
+    //请求接口指令
+    private String interfaceType;
+
+    //数据签名
+    private String dataSign;
+
+    //应用级参数,内容为JSON格式
+    private String requestData;
+}

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

@@ -0,0 +1,34 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+/**
+ * 快递鸟  预下单商品接收类
+ */
+@Data
+public class resReturnBackBase {
+
+    //返回码 100表示成功//1001,失败不再接收数据//1002,失败请重新推送
+    private Integer resultCode = 100;
+
+    //描述
+    private String reason = "接收成功";
+
+    //数据签名
+    private LocalDateTime responseTime = LocalDateTime.now();
+
+    //应用级参数,内容为JSON格式
+    @JsonFormat(pattern = "yyyy-MM-dd HH:" +
+            "mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String requestData;
+
+    //快递鸟单号
+    private String kdnOrderCode;
+
+}

+ 14 - 0
module-erp/src/main/java/com/hys/app/service/system/AdminUserManager.java

@@ -95,6 +95,7 @@ public interface AdminUserManager {
 
     /**
      * 根据部门id查询数量
+     *
      * @param deptId
      * @return
      */
@@ -102,18 +103,21 @@ public interface AdminUserManager {
 
     /**
      * 获取当前登录用户
+     *
      * @return
      */
     AdminUser getCurrUser();
 
     /**
      * 恢复平台管理员
+     *
      * @param id
      */
     void recover(Long id);
 
     /**
      * 根据岗位id查询数量
+     *
      * @param postId
      * @return
      */
@@ -121,14 +125,24 @@ public interface AdminUserManager {
 
     /**
      * 查询当前用户名称
+     *
      * @return
      */
     String getCurrUserName();
 
     /**
      * 批量查询管理员名称
+     *
      * @param ids
      * @return
      */
     Map<Long, String> getNameMapByIds(List<Long> ids);
+
+    /**
+     * 查看自己部门下的所有人员
+     *
+     * @param id
+     * @return
+     */
+    List<AdminUser> getUserByDept();
 }

+ 20 - 4
module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java

@@ -2,6 +2,7 @@ package com.hys.app.service.system.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+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.conditions.query.LambdaQueryChainWrapper;
@@ -23,12 +24,14 @@ import com.hys.app.model.errorcode.SystemErrorCode;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.LogLevel;
 import com.hys.app.model.system.dos.AdminUser;
+import com.hys.app.model.system.dos.DeptDO;
 import com.hys.app.model.system.dos.RoleDO;
 import com.hys.app.model.system.dos.SystemLogs;
 import com.hys.app.model.system.dto.AdminUserDTO;
 import com.hys.app.model.system.vo.AdminLoginVO;
 import com.hys.app.model.system.vo.AdminUserVO;
 import com.hys.app.service.system.AdminUserManager;
+import com.hys.app.service.system.DeptManager;
 import com.hys.app.service.system.RoleManager;
 import com.hys.app.service.system.SystemLogsManager;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,10 +40,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -66,6 +66,8 @@ public class AdminUserManagerImpl implements AdminUserManager {
     @Autowired
     private SystemLogsManager systemLogsManager;
 
+    private List<Long> ids = new ArrayList<>();
+
     /**
      * 查询平台管理员列表
      *
@@ -390,6 +392,20 @@ public class AdminUserManagerImpl implements AdminUserManager {
                 .stream().collect(Collectors.toMap(AdminUser::getId, AdminUser::getRealName));
     }
 
+    @Override
+    public List<AdminUser> getUserByDept() {
+        AdminUser byId = adminUserMapper.selectById(AdminUserContext.getAdminUserId());
+        if (byId.getFounder() == 1){
+           return adminUserMapper.selectList(new LambdaQueryWrapper<>());
+        }
+        //获取所有的部门
+        List<Long> deptIds = adminUserMapper.getAllSubDept(byId.getDeptId());
+        //找出所有人子部门下的所有人
+        List<AdminUser> adminUsers = adminUserMapper.selectList(new LambdaQueryWrapper<AdminUser>().in(AdminUser::getDeptId, deptIds));
+        return adminUsers;
+    }
+
+
     /**
      * 记录登录日志
      *

+ 15 - 0
module-erp/src/main/resources/mapper/system/AdminUserMapper.xml

@@ -21,5 +21,20 @@
         </where>
         order by sort, date_line desc
     </select>
+    <select id="getAllDept" resultType="com.hys.app.model.system.dos.DeptDO">
+        SELECT * FROM `system_dept`  where deleted = 0
+    </select>
+    <select id="getAllSubDept" resultType="java.lang.Long">
+        WITH RECURSIVE SubDepartments AS (
+            SELECT id
+            FROM system_dept
+            WHERE id = #{deptId}
+            UNION ALL
+            SELECT d.id
+            FROM system_dept d
+                     INNER JOIN SubDepartments sd ON d.parent_id = sd.id
+        )
+        SELECT * FROM SubDepartments;
+    </select>
 
 </mapper>

+ 1 - 1
server/src/main/resources/application-test.yml

@@ -8,7 +8,7 @@ spring:
       ds0:
         type: com.alibaba.druid.pool.DruidDataSource
         driver-class-name: com.mysql.jdbc.Driver
-        url: jdbc:mysql://120.46.190.49:3306/erp-standard?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
+        url: jdbc:mysql://120.46.190.49:3306/erp-standard?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true&useSSL=false
         username: root
         password: e77fd994c1c72907
 

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

@@ -4,7 +4,7 @@ spring:
   application:
     name: erp-server
   profiles:
-    active: test
+    active: local
   jackson:
     property-naming-strategy: SNAKE_CASE
   servlet:
@@ -39,8 +39,8 @@ erp:
   #token加密秘钥,请务必更换此词串,且注意保密
   token-secret: 85d6ce9da4e943ff4dcd367ab3d94164
   timeout:
-    accessTokenTimeout:  120000 #访问token失效时间 单位秒
-    refreshTokenTimeout: 180000 #刷新token失效时间 单位秒
+    accessTokenTimeout:  1200000 #访问token失效时间 单位秒
+    refreshTokenTimeout: 1800000 #刷新token失效时间 单位秒
     captchaTimout:  120       #验证码失效时间 单位秒
     smscodeTimout: 120        #短信验证码失效时间 单位秒