huanglizhi 1 vuosi sitten
vanhempi
sitoutus
0948f32cde
80 muutettua tiedostoa jossa 1835 lisäystä ja 776 poistoa
  1. 82 71
      framework/src/main/java/com/hys/app/framework/context/WebInterceptorConfigurer.java
  2. 42 0
      framework/src/main/java/com/hys/app/framework/context/user/ParameterServletRequestWrapper.java
  3. 57 0
      framework/src/main/java/com/hys/app/framework/context/user/SnakeCaseInterceptor.java
  4. 44 0
      module-erp/src/main/java/com/hys/app/controller/erp/ScanCodeController.java
  5. 3 0
      module-erp/src/main/java/com/hys/app/controller/erp/goods/GoodsManagerController.java
  6. 0 12
      module-erp/src/main/java/com/hys/app/controller/erp/goods/ProductStockManagerController.java
  7. 21 8
      module-erp/src/main/java/com/hys/app/controller/erp/sale/OrderController.java
  8. 61 0
      module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseAreaController.java
  9. 16 5
      module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseOutManagerController.java
  10. 8 8
      module-erp/src/main/java/com/hys/app/controller/returnBack/KdnController.java
  11. 3 9
      module-erp/src/main/java/com/hys/app/converter/erp/OrderConverter.java
  12. 0 4
      module-erp/src/main/java/com/hys/app/converter/erp/ProcurementContractProductConverter.java
  13. 4 0
      module-erp/src/main/java/com/hys/app/converter/erp/ProductStockConverter.java
  14. 0 12
      module-erp/src/main/java/com/hys/app/converter/erp/WarehouseConverter.java
  15. 1 0
      module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java
  16. 25 0
      module-erp/src/main/java/com/hys/app/mapper/erp/AreaStockMapper.java
  17. 21 0
      module-erp/src/main/java/com/hys/app/mapper/erp/OrderSendMapper.java
  18. 19 0
      module-erp/src/main/java/com/hys/app/mapper/erp/WarehouseAreaTypeMapper.java
  19. 44 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/AreaStock.java
  20. 48 14
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderDO.java
  21. 13 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java
  22. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderReturnItemDO.java
  23. 246 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendDO.java
  24. 4 220
      module-erp/src/main/java/com/hys/app/model/erp/dos/StockDamageReportProduct.java
  25. 4 151
      module-erp/src/main/java/com/hys/app/model/erp/dos/StockInventoryProduct.java
  26. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/StockTransferProductDO.java
  27. 6 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseAreaDO.java
  28. 44 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseAreaTypeDO.java
  29. 23 7
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseDO.java
  30. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseEntryProductDO.java
  31. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutDO.java
  32. 20 2
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutItemDO.java
  33. 0 5
      module-erp/src/main/java/com/hys/app/model/erp/dto/GoodsDTO.java
  34. 16 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/IdParams.java
  35. 3 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderDTO.java
  36. 11 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java
  37. 6 3
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductStockQueryParams.java
  38. 17 9
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseDTO.java
  39. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseEntryDTO.java
  40. 17 5
      module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseEntryProductDTO.java
  41. 5 0
      module-erp/src/main/java/com/hys/app/model/erp/enums/NoBusinessTypeEnum.java
  42. 36 0
      module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderSendStatusEnum.java
  43. 5 8
      module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderStatusEnum.java
  44. 41 0
      module-erp/src/main/java/com/hys/app/model/erp/enums/ScanFormCodeTypeEnum.java
  45. 5 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderItemVO.java
  46. 0 3
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderVO.java
  47. 7 3
      module-erp/src/main/java/com/hys/app/model/erp/vo/ProductStockVO.java
  48. 4 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/ProductVO.java
  49. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/WarehouseAreaVO.java
  50. 22 0
      module-erp/src/main/java/com/hys/app/service/erp/AreaStockManager.java
  51. 12 4
      module-erp/src/main/java/com/hys/app/service/erp/OrderManager.java
  52. 23 0
      module-erp/src/main/java/com/hys/app/service/erp/OrderSendManager.java
  53. 32 0
      module-erp/src/main/java/com/hys/app/service/erp/ScanCodeManager.java
  54. 4 1
      module-erp/src/main/java/com/hys/app/service/erp/StockDamageReportManager.java
  55. 3 1
      module-erp/src/main/java/com/hys/app/service/erp/StockDamageReportProductManager.java
  56. 4 1
      module-erp/src/main/java/com/hys/app/service/erp/StockInventoryManager.java
  57. 3 1
      module-erp/src/main/java/com/hys/app/service/erp/StockInventoryProductManager.java
  58. 30 0
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseAreaManager.java
  59. 25 0
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseAreaTypeManager.java
  60. 0 1
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseManager.java
  61. 2 1
      module-erp/src/main/java/com/hys/app/service/erp/WarehouseOutManager.java
  62. 21 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/AreaStockManagerImpl.java
  63. 5 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java
  64. 64 45
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java
  65. 1 1
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderReturnManagerImpl.java
  66. 49 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/OrderSendManagerImpl.java
  67. 12 20
      module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java
  68. 184 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/ScanCodeManagerImpl.java
  69. 66 27
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaManagerImpl.java
  70. 35 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaTypeManagerImpl.java
  71. 13 42
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseManagerImpl.java
  72. 23 25
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java
  73. 2 1
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java
  74. 48 23
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java
  75. 6 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/PreOrderModel.java
  76. 10 9
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReturnCreateOrderFail.java
  77. 88 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReturnCreateOrderSuccess.java
  78. 2 6
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/resReturnBackBase.java
  79. 0 3
      module-erp/src/main/java/com/hys/app/service/system/impl/DeptManagerImpl.java
  80. 0 2
      server/src/main/java/com/hys/app/Swagger2.java

+ 82 - 71
framework/src/main/java/com/hys/app/framework/context/WebInterceptorConfigurer.java

@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
 import com.hys.app.framework.context.params.SnakeToCamelArgumentResolver;
 import com.hys.app.framework.context.params.SnakeToCamelModelAttributeMethodProcessor;
 import com.hys.app.framework.context.request.HysRequestInterceptor;
+import com.hys.app.framework.context.user.SnakeCaseInterceptor;
 import com.hys.app.framework.parameter.ParameterFilter;
 import com.hys.app.framework.security.XssStringJsonSerializer;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -22,85 +24,94 @@ import javax.servlet.DispatcherType;
 import java.util.List;
 
 /**
- * 
  * 加载自定义的 拦截器
+ *
  * @author Chopper
  * @version v1.0
  * @since v6.2 2017年3月7日 下午5:29:56
- *
  */
 @Configuration
 public class WebInterceptorConfigurer implements WebMvcConfigurer {
 
-	@Override
-	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
-
-		//参数蛇形转驼峰拦截
-		argumentResolvers.add(new SnakeToCamelModelAttributeMethodProcessor(true));
-		argumentResolvers.add(new SnakeToCamelArgumentResolver());
-
-	}
-
-	@Override
-	public void addInterceptors(InterceptorRegistry registry) {
-		registry.addInterceptor(hysRequestInterceptor()).addPathPatterns("/**");
-	}
-
-	/**
-	 * 声明hysRequestInterceptor bean
-	 * @return
-	 */
-	@Bean
-	public HysRequestInterceptor hysRequestInterceptor() {
-		return new HysRequestInterceptor();
-	}
-
-	/**
-	 * 自定义 ObjectMapper ,用于xss攻击过滤
- 	 * @param builder
-	 * @return
-	 */
-	@Bean
-	@Primary
-	public ObjectMapper xssObjectMapper(Jackson2ObjectMapperBuilder builder) {
-		//解析器
-		ObjectMapper objectMapper = builder.createXmlMapper(false).build();
-		//注册xss解析器
-		SimpleModule xssModule = new SimpleModule("XssStringJsonSerializer");
-		xssModule.addSerializer(new XssStringJsonSerializer());
-		objectMapper.registerModule(xssModule);
-		//返回
-		return objectMapper;
-	}
-
-
-	/**
-	 * 处理参数拦截器声明,目前只处理emoji表情拦截
-	 * @return
-	 */
-	@Bean
-	public FilterRegistrationBean<ParameterFilter> parameterFilter() {
-		FilterRegistrationBean<ParameterFilter> filter=new FilterRegistrationBean<>();
-		filter.setDispatcherTypes(DispatcherType.REQUEST);
-		filter.setFilter(new ParameterFilter());
-		//拦截所有请求,如果没有设置则默认“/*”
-		filter.addUrlPatterns("/*");
-		//设置注册的名称,如果没有指定会使用Bean的名称。此name也是过滤器的名称
-		filter.setName("parameterFilter");
-		//该filter在filterChain中的执行顺序
-		filter.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
-		return filter;
-	}
-
-
-	/**
-	 * 雪花算法生成唯一数字的bean
-	 * @return
-	 */
-	@Bean
-	public IdentifierGenerator keyGenerator() {
-		return new DefaultIdentifierGenerator();
-	}
+    @Autowired
+    private SnakeCaseInterceptor snakeCaseInterceptor;
+
+    @Override
+    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
+
+        //参数蛇形转驼峰拦截
+        argumentResolvers.add(new SnakeToCamelModelAttributeMethodProcessor(true));
+        argumentResolvers.add(new SnakeToCamelArgumentResolver());
+
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(hysRequestInterceptor()).addPathPatterns("/**");
+        registry.addInterceptor(snakeCaseInterceptor).addPathPatterns("/admin/erp/kdn/returnBack");
+
+    }
+
+    /**
+     * 声明hysRequestInterceptor bean
+     *
+     * @return
+     */
+    @Bean
+    public HysRequestInterceptor hysRequestInterceptor() {
+        return new HysRequestInterceptor();
+    }
+
+
+    /**
+     * 自定义 ObjectMapper ,用于xss攻击过滤
+     *
+     * @param builder
+     * @return
+     */
+    @Bean
+    @Primary
+    public ObjectMapper xssObjectMapper(Jackson2ObjectMapperBuilder builder) {
+        //解析器
+        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
+        //注册xss解析器
+        SimpleModule xssModule = new SimpleModule("XssStringJsonSerializer");
+        xssModule.addSerializer(new XssStringJsonSerializer());
+        objectMapper.registerModule(xssModule);
+        //返回
+        return objectMapper;
+    }
+
+
+    /**
+     * 处理参数拦截器声明,目前只处理emoji表情拦截
+     *
+     * @return
+     */
+    @Bean
+    public FilterRegistrationBean<ParameterFilter> parameterFilter() {
+        FilterRegistrationBean<ParameterFilter> filter = new FilterRegistrationBean<>();
+        filter.setDispatcherTypes(DispatcherType.REQUEST);
+        filter.setFilter(new ParameterFilter());
+        //拦截所有请求,如果没有设置则默认“/*”
+        filter.addUrlPatterns("/*");
+        //设置注册的名称,如果没有指定会使用Bean的名称。此name也是过滤器的名称
+        filter.setName("parameterFilter");
+        //该filter在filterChain中的执行顺序
+        filter.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
+        return filter;
+    }
+
+
+    /**
+     * 雪花算法生成唯一数字的bean
+     *
+     * @return
+     */
+    @Bean
+    public IdentifierGenerator keyGenerator() {
+        return new DefaultIdentifierGenerator();
+    }
 
 
 }

+ 42 - 0
framework/src/main/java/com/hys/app/framework/context/user/ParameterServletRequestWrapper.java

@@ -0,0 +1,42 @@
+package com.hys.app.framework.context.user;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ParameterServletRequestWrapper extends HttpServletRequestWrapper {
+    private final Map<String, String[]> parameterMap;
+
+    public ParameterServletRequestWrapper(HttpServletRequest request, Map<String, String[]> newParams) {
+        super(request);
+        parameterMap = new HashMap<>();
+        parameterMap.putAll(newParams);
+    }
+
+    @Override
+    public String getParameter(String name) {
+        String[] values = parameterMap.get(name);
+        if (values == null || values.length == 0) {
+            return null;
+        }
+        return values[0];
+    }
+
+    @Override
+    public Map<String, String[]> getParameterMap() {
+        return Collections.unmodifiableMap(parameterMap);
+    }
+
+    @Override
+    public Enumeration<String> getParameterNames() {
+        return Collections.enumeration(parameterMap.keySet());
+    }
+
+    @Override
+    public String[] getParameterValues(String name) {
+        return parameterMap.get(name);
+    }
+}

+ 57 - 0
framework/src/main/java/com/hys/app/framework/context/user/SnakeCaseInterceptor.java

@@ -0,0 +1,57 @@
+package com.hys.app.framework.context.user;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Enumeration;
+
+@Component
+public class SnakeCaseInterceptor implements HandlerInterceptor {
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        Map<String, String[]> updatedParams = new HashMap<>(request.getParameterMap());
+        Enumeration<String> paramNames = request.getParameterNames();
+
+        while (paramNames.hasMoreElements()) {
+            String paramName = paramNames.nextElement();
+            String snakeCaseName = toSnakeCase(paramName);
+            if (!paramName.equals(snakeCaseName)) {
+                updatedParams.put(snakeCaseName, updatedParams.remove(paramName));
+            }
+        }
+
+        // 替换HttpServletRequest中的参数为下划线命名
+        ParameterServletRequestWrapper wrappedRequest = new ParameterServletRequestWrapper(request, updatedParams);
+        request = wrappedRequest;
+
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+        // 可以在这里处理响应逻辑
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        // 请求完成后的清理工作
+    }
+
+    private String toSnakeCase(String s) {
+        StringBuilder builder = new StringBuilder();
+        for (char c : s.toCharArray()) {
+            if (Character.isUpperCase(c)) {
+                builder.append('_').append(Character.toLowerCase(c));
+            } else {
+                builder.append(c);
+            }
+        }
+        return builder.toString();
+    }
+}

+ 44 - 0
module-erp/src/main/java/com/hys/app/controller/erp/ScanCodeController.java

@@ -0,0 +1,44 @@
+package com.hys.app.controller.erp;
+
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.model.erp.dto.EnterpriseDTO;
+import com.hys.app.model.erp.dto.EnterpriseQueryParams;
+import com.hys.app.model.erp.vo.EnterpriseVO;
+import com.hys.app.model.erp.vo.ProductStockVO;
+import com.hys.app.service.erp.EnterpriseManager;
+import com.hys.app.service.erp.ScanCodeManager;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 企业 API
+ *
+ * @author 张崧
+ * 2024-03-25 15:44:10
+ */
+@RestController
+@RequestMapping("/admin/erp/scancode")
+@Api(tags = "企业API")
+@Validated
+public class ScanCodeController {
+
+    @Autowired
+    private ScanCodeManager scanCodeManager;
+
+    @ApiOperation(value = "分页列表")
+    @GetMapping("/{orderCode}")
+    public Map<String, Object> getListByScan(@PathVariable(value = "orderCode") String orderCode) {
+        return scanCodeManager.getListByScan(orderCode);
+    }
+
+
+
+}
+

+ 3 - 0
module-erp/src/main/java/com/hys/app/controller/erp/goods/GoodsManagerController.java

@@ -92,5 +92,8 @@ public class GoodsManagerController {
     public List<ProductVO> getSkuByWarehouse() {
         return goodsManager.getSkuByWarehouse();
     }
+
+
+
 }
 

+ 0 - 12
module-erp/src/main/java/com/hys/app/controller/erp/goods/ProductStockManagerController.java

@@ -37,18 +37,6 @@ public class ProductStockManagerController {
     @Autowired
     private ProductStockManager productStockManager;
 
-    @Autowired
-    private ProductManager productManager;
-
-    @Autowired
-    private GoodsManager goodsManager;
-
-    @Autowired
-    private WarehouseAreaManager warehouseAreaManager;
-
-    @Autowired
-    private WarehouseManager warehouseManager;
-
     @ApiOperation(value = "分页列表")
     @GetMapping
     public WebPage<ProductStockV1> list(ProductStockQueryParams queryParams) {

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

@@ -1,12 +1,17 @@
 package com.hys.app.controller.erp.sale;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.security.model.Admin;
+import com.hys.app.model.erp.dos.OrderSendDO;
 import com.hys.app.model.erp.dto.OrderDTO;
 import com.hys.app.model.erp.dto.OrderQueryParams;
+import com.hys.app.model.erp.enums.ScanFormCodeTypeEnum;
 import com.hys.app.model.erp.vo.OrderVO;
+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.OrderManager;
@@ -20,6 +25,8 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
 
 /**
  * 订单 API
@@ -78,19 +85,25 @@ public class OrderController {
         orderManager.delete(id);
     }
 
+
+    @ApiOperation(value = "发货")
+    @PostMapping("/orderSend/{orderId}")
+    @Log(client = LogClient.admin, detail = "销售列表发货")
+    public void orderSend(@PathVariable(value = "orderId") Long orderId ) {
+         orderManager.orderSend(orderId);
+    }
+
     @ApiOperation(value = "已发货分页列表")
     @GetMapping("saleOrder/list")
-    public IPage<OrderVO> saleOrder(OrderQueryParams queryParams) {
+    public IPage<OrderSendDO> saleOrder(OrderQueryParams queryParams) {
         return orderManager.hasSendOrder(queryParams);
     }
 
-
-
-    @ApiOperation(value = "发货")
-    @PostMapping("/orderSend/{orderId}")
-    @Log(client = LogClient.admin, detail = "销售列表发货")
-    public void orderSend(@PathVariable(value = "orderId") Long orderId ,@RequestBody AddressDTO addressDTO) {
-         orderManager.orderSend(orderId,addressDTO);
+    @ApiOperation(value = "获取发货详情")
+    @GetMapping("getSendOrderDetail/{id}")
+    public OrderSendDO getSendOrderDetail( @PathVariable(value = "id") String id) {
+        return orderManager.getSendOrderDetail(id);
     }
+
 }
 

+ 61 - 0
module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseAreaController.java

@@ -1,13 +1,19 @@
 package com.hys.app.controller.erp.warehouse;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
+import com.hys.app.model.erp.dos.GoodsDO;
 import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dos.WarehouseAreaTypeDO;
 import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
 import com.hys.app.model.erp.dto.WarehouseAreaRequest;
+import com.hys.app.model.erp.vo.ProductStockVO;
 import com.hys.app.model.erp.vo.WarehouseAreaVO;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
 import com.hys.app.service.erp.WarehouseAreaManager;
+import com.hys.app.service.erp.WarehouseAreaTypeManager;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +21,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 出库单明细相关API
@@ -31,6 +38,10 @@ public class WarehouseAreaController {
     @Autowired
     private WarehouseAreaManager warehouseAreaManager;
 
+    @Autowired
+    private WarehouseAreaTypeManager warehouseAreaTypeManager;
+
+
     @ApiOperation(value = "获取库位列表")
     @GetMapping("/query")
     public WebPage<WarehouseAreaVO> list(WarehouseAreaQueryParams queryParams) {
@@ -66,5 +77,55 @@ public class WarehouseAreaController {
     public void delete(@RequestBody @Valid WarehouseAreaRequest request) {
         warehouseAreaManager.delete(request.getId());
     }
+
+    @ApiOperation(value = "添加库位类型")
+    @PostMapping("/createAreaType")
+    @Log(client = LogClient.admin, detail = "创建库位信息")
+    public void createAreaType(@RequestBody @Valid WarehouseAreaTypeDO warehouseAreaTypeDO) {
+        warehouseAreaTypeManager.save(warehouseAreaTypeDO);
+    }
+
+    @ApiOperation(value = "删除库位类型")
+    @DeleteMapping("/removeAreaType/{id}")
+    @Log(client = LogClient.admin, detail = "删除库位信息")
+    public void removeAreaType(@PathVariable Long id) {
+        warehouseAreaTypeManager.removeById(id);
+    }
+
+    @ApiOperation(value = "修改库位类型")
+    @PutMapping("/updateAreaType/{id}")
+    @Log(client = LogClient.admin, detail = "创建库位信息")
+    public void updateAreaType(@RequestBody @Valid WarehouseAreaTypeDO warehouseAreaTypeDO, @PathVariable(value = "id") Long id) {
+        warehouseAreaTypeDO.setId(id);
+        warehouseAreaTypeManager.updateById(warehouseAreaTypeDO);
+    }
+
+    @ApiOperation(value = "查询库位类型")
+    @GetMapping("/listAreaType")
+    @Log(client = LogClient.admin, detail = "创建库位信息")
+    public List<WarehouseAreaTypeDO> listAreaType() {
+        return warehouseAreaTypeManager.list();
+    }
+
+    @ApiOperation(value = "根据仓库id获取所有的库存列表")
+    @GetMapping("/goodNotAreaList/{warehouseId}")
+    @Log(client = LogClient.admin, detail = "创建库位信息")
+    public Page<ProductStockVO> goodNotAreaList(BaseQueryParam baseQueryParam, @PathVariable Long warehouseId) {
+        return warehouseAreaManager.goodNotAreaList(baseQueryParam, warehouseId);
+    }
+
+    @ApiOperation(value = "根据仓库id获取所有的库位列表")
+    @GetMapping("/getAreaByWarehouse/{warehouseId}")
+    @Log(client = LogClient.admin, detail = "创建库位信息")
+    public List<WarehouseAreaDO> getAreaByWarehouse(@PathVariable Long warehouseId) {
+        return warehouseAreaManager.getAreaByWarehouse(warehouseId);
+    }
+
+    @ApiOperation(value = "新增关系")
+    @PostMapping("/bindAreaStock/{warehouseId}/{warehouseAreaId}")
+    @Log(client = LogClient.admin, detail = "创建库位信息")
+    public void bindAreaStock(@PathVariable Long warehouseId, @PathVariable(value = "warehouseAreaId") Long warehouseAreaId, @RequestBody WarehouseAreaDO warehouseAreaDO) {
+        warehouseAreaManager.bindAreaStock(warehouseId, warehouseAreaId, warehouseAreaDO.getStockIdList());
+    }
 }
 

+ 16 - 5
module-erp/src/main/java/com/hys/app/controller/erp/warehouse/WarehouseOutManagerController.java

@@ -1,5 +1,6 @@
 package com.hys.app.controller.erp.warehouse;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
@@ -21,7 +22,10 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -106,17 +110,24 @@ public class WarehouseOutManagerController {
     }
 
     @ApiOperation(value = "根据仓库找到所有sku库存大于0的商品")
-    @GetMapping("/getGoodByWarehouse/{warehouseId}/{orderType}")
+    @GetMapping("/getGoodByWarehouse/warehouseIdAndOrderType/{orderType}/{warehouseIds}")
     @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);
+    public IPage<ProductStockVO> getGoodByWarehouse(BaseQueryParam queryParam,
+                                              @PathVariable(value = "orderType") String orderType,
+                                              @PathVariable(value = "warehouseIds") String warehouseIds) {
+        String[] split = warehouseIds.split(",");
+        List<Long> list = new ArrayList<>();
+        for (String s : split) {
+            list.add(Long.valueOf(s));
+        }
+        return warehouseOutManager.getGoodByWarehouse(null,queryParam,orderType,list);
     }
 
     @ApiOperation(value = "根据仓库找到所有sku库存大于0的商品")
     @GetMapping("/getGoodByWarehouse/{warehouseId}")
     @Log(client = LogClient.admin, detail = "根据仓库找到所有sku库存大于0的商品")
-    public Page<ProductVO> getGoodByWarehouse(@PathVariable(value = "warehouseId" )Long warehouseId, BaseQueryParam queryParam) {
-        return warehouseOutManager.getGoodByWarehouse(warehouseId,queryParam,null);
+    public IPage<ProductStockVO> getGoodByWarehouse(@PathVariable(value = "warehouseId" )Long warehouseId, BaseQueryParam queryParam) {
+        return warehouseOutManager.getGoodByWarehouse(warehouseId,queryParam,null,null);
     }
 }
 

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

@@ -1,11 +1,10 @@
 package com.hys.app.controller.returnBack;
 
+import com.alibaba.fastjson.JSON;
 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 com.hys.app.service.kuaidiniao.entity.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -21,7 +20,7 @@ import javax.validation.Valid;
  * @author 张崧
  * @since 2024-02-20
  */
-@Api(tags = "OAuth2.0 授权")
+@Api(tags = "快递鸟")
 @RestController
 @RequestMapping("/admin/erp/kdn")
 @Validated
@@ -31,15 +30,16 @@ public class KdnController {
     private  KuaiDiNiaoService kuaiDiNiaoService;
 
     @PostMapping("/returnBack")
-    public resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase) {
-
+    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);
+    public String kdShip(@PathVariable(value = "orderId") Long orderId
+            , @RequestBody @Valid PreOrderModel preOrderModel
+            ,@RequestBody AddressDTO addressDTO) {
+        return kuaiDiNiaoService.kdShip(preOrderModel,orderId,addressDTO);
     }
 }

+ 3 - 9
module-erp/src/main/java/com/hys/app/converter/erp/OrderConverter.java

@@ -2,10 +2,7 @@ package com.hys.app.converter.erp;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.hys.app.framework.database.WebPage;
-import com.hys.app.model.erp.dos.OrderDO;
-import com.hys.app.model.erp.dos.OrderItemDO;
-import com.hys.app.model.erp.dos.OrderPaymentDO;
-import com.hys.app.model.erp.dos.StoreDO;
+import com.hys.app.model.erp.dos.*;
 import com.hys.app.model.erp.dto.OrderDTO;
 import com.hys.app.model.erp.enums.OrderStatusEnum;
 import com.hys.app.model.erp.enums.OrderTypeEnum;
@@ -63,11 +60,8 @@ public interface OrderConverter {
     @Mapping(target = "aDo.senderPhone", source = "sender.phone")
     @Mapping(target = "aDo.senderLatitude", source = "sender.latitude")
     @Mapping(target = "aDo.senderLongitude", source = "sender.longitude")
-    @Mapping(target = "aDo.provinceCityAreaAddress", ignore = true)
-    @Mapping(target = "aDo.address", ignore = true)
-    @Mapping(target = "aDo.provinceCityArea", ignore = true)
     @Mapping(target = "aDo.deleted", ignore = true)
-    void copyProperties(@MappingTarget OrderDO aDo, PreOrderModel preOrderModel, ReceiverSender receiver, ReceiverSender sender);
+    void copyProperties(@MappingTarget OrderSendDO aDo, PreOrderModel preOrderModel, ReceiverSender receiver, ReceiverSender sender);
 
 
 
@@ -89,6 +83,6 @@ public interface OrderConverter {
     @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);
+    void copyProperties(@MappingTarget PreOrderModel preOrderModel, OrderSendDO aDo);
 }
 

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

@@ -29,10 +29,6 @@ public interface ProcurementContractProductConverter {
         procurementContractProduct.setUnit(productDO.getUnit());
         WarehouseEntryProductDTO warehouseEntryProductDTO = warehouseEntryProductDTOMap.get(productDO.getId());
         procurementContractProduct.setStockNum(warehouseEntryProductDTO.getNum());
-        procurementContractProduct.setPrice(warehouseEntryProductDTO.getPrice());
-        procurementContractProduct.setTaxRate(warehouseEntryProductDTO.getTaxRate());
-        procurementContractProduct.setTotalPrice(CurrencyUtil.mul(warehouseEntryProductDTO.getNum(), warehouseEntryProductDTO.getPrice()));
-
         return procurementContractProduct;
     }
 }

+ 4 - 0
module-erp/src/main/java/com/hys/app/converter/erp/ProductStockConverter.java

@@ -1,5 +1,7 @@
 package com.hys.app.converter.erp;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dto.ProductStockIncreaseDTO;
@@ -20,6 +22,8 @@ public interface ProductStockConverter {
 
     WebPage<ProductStockVO> convert(WebPage<ProductStockDO> webPage);
 
+    Page<ProductStockVO> convert(Page<ProductStockDO> Page);
+
     ProductStockIncreaseDTO convert(ProductStockReduceDTO stockReduceDTO);
 }
 

+ 0 - 12
module-erp/src/main/java/com/hys/app/converter/erp/WarehouseConverter.java

@@ -27,18 +27,6 @@ public interface WarehouseConverter {
 
     List<WarehouseVO> convert(List<WarehouseDO> list);
 
-    default WebPage<WarehouseVO> combination(WebPage<WarehouseDO> webPage, Map<Long, String> deptNameMap, Map<Long, String> adminNameMap) {
-        WebPage<WarehouseVO> page = convert(webPage);
-
-        for (WarehouseVO warehouseVO : page.getData()) {
-            // 填充管理员名称
-            warehouseVO.setAdminName(adminNameMap.get(warehouseVO.getAdminId()));
-            // 填充部门名称
-//            warehouseVO.setDeptName(deptNameMap.get(warehouseVO.getDeptId()));
-        }
-
-        return page;
     }
 
-}
 

+ 1 - 0
module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java

@@ -43,6 +43,7 @@ public class AdminAccessDecisionManager implements org.springframework.security.
         result = result || matcher.match("/configuration/security", url);
         result = result || matcher.match("/actuator/**", url);
         result = result || matcher.match("/import-tpl/**", url);
+        result = result || matcher.match("/admin/erp/kdn/returnBack", url);
         if (result) {
             return;
         }

+ 25 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/AreaStockMapper.java

@@ -0,0 +1,25 @@
+package com.hys.app.mapper.erp;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+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.framework.database.mybatisplus.base.BaseMapperX;
+import com.hys.app.model.erp.dos.AreaStock;
+import com.hys.app.model.erp.dos.ChangeForm;
+import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dto.ChangeFormStatisticsQueryParam;
+import com.hys.app.model.erp.vo.ChangeFormStatistics;
+import org.apache.ibatis.annotations.CacheNamespace;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 换货单Mapper
+ * @author dmy
+ * 2023-12-05
+ */
+public interface AreaStockMapper extends BaseMapperX<AreaStock> {
+
+}

+ 21 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/OrderSendMapper.java

@@ -0,0 +1,21 @@
+package com.hys.app.mapper.erp;
+
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
+import com.hys.app.framework.util.StringUtil;
+import com.hys.app.model.erp.dos.OrderDO;
+import com.hys.app.model.erp.dos.OrderSendDO;
+import com.hys.app.model.erp.dto.OrderQueryParams;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 订单 Mapper
+ *
+ * @author 张崧
+ * 2024-01-24 15:58:31
+ */
+@Mapper
+public interface OrderSendMapper extends BaseMapperX<OrderSendDO> {
+
+}
+

+ 19 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/WarehouseAreaTypeMapper.java

@@ -0,0 +1,19 @@
+package com.hys.app.mapper.erp;
+
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
+import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dos.WarehouseAreaTypeDO;
+import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
+
+/**
+ * 出库单商品明细的Mapper
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+public interface WarehouseAreaTypeMapper extends BaseMapperX<WarehouseAreaTypeDO> {
+
+
+}
+

+ 44 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/AreaStock.java

@@ -0,0 +1,44 @@
+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 io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * 库位信息管理
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+@TableName("erp_area_stock")
+@Data
+public class AreaStock implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(name = "id", value = "id")
+    private Long id;
+
+    @ApiModelProperty(name = "warehouseId", value = "仓库id")
+    private Long warehouseId;
+
+    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
+    private Long warehouseAreaId;
+
+    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
+    private Long productStockId;
+
+    private GoodsDO goodsVO;
+
+    private ProductDO productVO;
+
+    private ProductStockDO productStockVO;
+
+}

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

@@ -1,9 +1,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.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 import com.hys.app.model.erp.enums.OrderDeliveryType;
@@ -24,6 +22,7 @@ import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 订单 DO
@@ -31,7 +30,7 @@ import java.util.List;
  * @author 张崧
  * 2024-01-24 15:58:30
  */
-@TableName("erp_order")
+@TableName(value = "erp_order",autoResultMap = true)
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
@@ -69,7 +68,8 @@ public class OrderDO extends BaseDO {
     private Long orderTime;
 
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
-    private Long warehouseId;
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<Long> warehouseId;
 
     @ApiModelProperty(name = "warehouse_name", value = "仓库名称")
     private String warehouseName;
@@ -152,13 +152,13 @@ public class OrderDO extends BaseDO {
     private Boolean deleted;
 
     @ApiModelProperty(name = "province_city_area_address", value = "支付方式")
-    private String  provinceCityAreaAddress;
+    private String provinceCityAreaAddress;
 
     @ApiModelProperty(name = "address", value = "支付方式")
-    private String  address;
+    private String address;
 
     @ApiModelProperty(name = "province_city_area", value = "支付方式")
-    private String  provinceCityArea;
+    private String provinceCityArea;
 
     @ApiModelProperty(name = "end_time", value = "开始时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -174,13 +174,11 @@ public class OrderDO extends BaseDO {
     private String hasSubmit;
 
 
-
-
     @ApiModelProperty(value = "门店业务类型 1:商家门店  2:个人即时配")
     private Integer storeBusinessType = 2;
 
     @ApiModelProperty(value = "1、storeCode平台门店编码(商家自定义门店编码,唯一),个人即时配编码固定传storeCode;2、merchantCode快递鸟门店编码(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
-    private String storeCode ;
+    private String storeCode;
 
     @ApiModelProperty(value = "(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
     private String merchantCode = "merchantCode";
@@ -246,8 +244,6 @@ public class OrderDO extends BaseDO {
     private String orderCode;
 
 
-
-
     @ApiModelProperty(name = "receiver_province_name", value = "收货人省")
     private String receiverProvinceName;
 
@@ -290,6 +286,10 @@ public class OrderDO extends BaseDO {
     @ApiModelProperty(name = "sender_name", value = "发货人姓名")
     private String senderName;
 
+    @ApiModelProperty(name = "goods_list", value = "货物信息,最大数量50")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<KdGood> goodsList;
+
     @ApiModelProperty(name = "sender_mobile", value = "发货人座机")
     private String senderMobile;
 
@@ -309,4 +309,38 @@ public class OrderDO extends BaseDO {
 
     private String receiveAddress;
 
+    @ApiModelProperty(name = "kdn_order_code", value = "快递鸟下单失败 0")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map createOrderFail;
+
+
+    @ApiModelProperty(name = "kdn_order_code", value = "待接单状态 1")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map createOrderSuccess;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "业务员接单状态 2")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map userTakeOrder;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "业务员到达状态 3")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map userArrives;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "业务员配送中 4")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map userSending;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "订单费用 5")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map orderFee;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "签收 6")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map signIn;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "取消状态  0")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map cancelOrderKdn;
+
+
 }

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

@@ -26,6 +26,9 @@ public class OrderItemDO implements Serializable {
     @ApiModelProperty(name = "order_id", value = "订单id")
     private Long orderId;
 
+
+
+
     @ApiModelProperty(name = "order_sn", value = "订单编号")
     private String orderSn;
 
@@ -95,4 +98,14 @@ public class OrderItemDO implements Serializable {
     @ApiModelProperty(name = "return_num", value = "已退货数量")
     private Integer returnNum;
 
+
+    @ApiModelProperty(name = "warehouse_id", value = "订单id")
+    private Long warehouseId;
+
+    @ApiModelProperty(name = "warehouse_id", value = "订单id")
+    private Long orderSendId;
+
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
+
 }

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

@@ -97,4 +97,7 @@ public class OrderReturnItemDO implements Serializable {
     @ApiModelProperty(name = "return_num", value = "退货数量")
     private Integer returnNum;
 
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
+
 }

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

@@ -0,0 +1,246 @@
+package com.hys.app.model.erp.dos;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import com.hys.app.model.erp.enums.OrderTypeEnum;
+import com.hys.app.model.erp.enums.SaleOrderSendStatusEnum;
+import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
+import com.hys.app.model.erp.vo.OrderItemVO;
+import com.hys.app.service.kuaidiniao.entity.KdGood;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 订单 DO
+ *
+ * @author 张崧
+ * 2024-01-24 15:58:30
+ */
+@TableName(value = "erp_order_send", autoResultMap = true)
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class OrderSendDO extends BaseDO {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    private Long orderId;
+
+    private Long warehouseId;
+
+    // ================== 基本信息 ==================
+
+    @ApiModelProperty(name = "sn", value = "编号")
+    private String sn;
+
+    @ApiModelProperty(name = "status", value = "状态")
+    private SaleOrderSendStatusEnum status = SaleOrderSendStatusEnum.TO_BE_SEND;
+
+    @ApiModelProperty(name = "type", value = "订单类型")
+    private OrderTypeEnum orderType;
+
+
+    @ApiModelProperty(name = "warehouse_out_flag", value = "是否已出库")
+    private Boolean warehouseOutFlag = false;
+
+    @ApiModelProperty(name = "warehouse_out_id", value = "出库单id")
+    private Long warehouseOutId;
+
+    @ApiModelProperty(name = "ship_time", value = "发货时间")
+    private Long shipTime;
+
+    @ApiModelProperty(name = "deleted", value = "是否删除")
+    @TableLogic
+    private Boolean deleted;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+    @ApiModelProperty(value = "门店业务类型 1:商家门店  2:个人即时配")
+    private Integer storeBusinessType = 2;
+
+    @ApiModelProperty(value = "1、storeCode平台门店编码(商家自定义门店编码,唯一),个人即时配编码固定传storeCode;2、merchantCode快递鸟门店编码(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
+    private String storeCode;
+
+    @ApiModelProperty(value = "(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
+    private String merchantCode = "merchantCode";
+
+    @ApiModelProperty(value = "商户名称")
+    private String merchantName = "上海瑞赢旷视科技";
+
+    @ApiModelProperty(value = "产品类型编码,默认:B")
+    private String productTypeCode = "B";
+
+    @ApiModelProperty(value = "即时配编码,多个即时配编码用逗号分隔。")
+    private String intraCode = "SFTC,";
+
+    @ApiModelProperty(value = "预约类型0:立即单、1:预约上门单")
+    private Integer appointmentType;
+
+    @ApiModelProperty(value = "预约上门单必填预约上门时间格式:YYYY-MM-DD  hh:mm:ss说明:当前时间+2小时,10分钟间隔向上取整。")
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String appointmentTime;
+
+    @ApiModelProperty(value = "交通方式,默认0:未指定。指定交通方式会产生额外的费用。暂不支持")
+    private Integer travelWay = 0;
+
+    @ApiModelProperty(value = "下单类型1:帮我送 、2:帮我取;默认1")
+    private Integer deliveryType;
+
+    @ApiModelProperty(value = "坐标类型1:百度地图、 2:高德地图 、3:腾讯地图")
+    private Integer lbsType = 2;
+
+    @ApiModelProperty(value = "物品类型")
+    private String goodsType;
+
+    @ApiModelProperty(value = "物品数量1-99的整数")
+    private Integer goodsNum;
+
+    @ApiModelProperty(value = "物品总重量单位kg")
+    private Double totalWeight;
+
+    @ApiModelProperty(value = "物品总体积,单位立方厘米")
+    private Double totalVolume;
+
+    @ApiModelProperty(value = "物品声明价值,单位:元。去尾法,保留两位小数。所有物品总计声明价值。")
+    private Double declaredValue;
+
+    @ApiModelProperty(value = "是否保价  1:是 0:否 暂不支持保价,默认传0")
+    private Integer insured = 0;
+
+    @ApiModelProperty(value = "丢破损保障费用,单位:元。去尾法,保留两位小数。根据声明价值计算需要支付的保障用。暂不支持,默认传0")
+    private Double insuranceFee = 0.0;
+
+    @ApiModelProperty(value = "下单人姓名")
+    private String orderName;
+
+    @ApiModelProperty(value = "下单人手机号(下单人手机号和下单人座机二选一必填)")
+    private String orderMobile;
+
+    @ApiModelProperty(value = "下单人座机号(下单人手机号和下单人座机二选一必填)")
+    private String orderPhone;
+
+
+    @ApiModelProperty(value = "商家订单号 全局唯一")
+    private String orderCode;
+
+
+    @ApiModelProperty(name = "receiver_province_name", value = "收货人省")
+    private String receiverProvinceName;
+
+    @ApiModelProperty(name = "receiver_city_name", value = "收货人市")
+    private String receiverCityName;
+
+    @ApiModelProperty(name = "receiver_area_name", value = "收货人县")
+    private String receiverAreaName;
+
+    @ApiModelProperty(name = "receiver_address", value = "收货人地址")
+    private String receiverAddress;
+
+    @ApiModelProperty(name = "receiver_name", value = "收货人姓名")
+    private String receiverName;
+
+    @ApiModelProperty(name = "receiver_phone", value = "收货人电话")
+    private String receiverPhone;
+
+    @ApiModelProperty(name = "receiver_mobile", value = "收货人座机")
+    private String receiverMobile;
+
+    @ApiModelProperty(name = "receiver_latitude", value = "收货人纬度")
+    private String receiverLatitude;
+
+    @ApiModelProperty(name = "receiver_longitude", value = "收货人经度")
+    private String receiverLongitude;
+
+    @ApiModelProperty(name = "sender_province_name", value = "发货人省")
+    private String senderProvinceName;
+
+    @ApiModelProperty(name = "sender_city_name", value = "发货人市")
+    private String senderCityName;
+
+    @ApiModelProperty(name = "sender_area_name", value = "发货人县")
+    private String senderAreaName;
+
+    @ApiModelProperty(name = "sender_address", value = "发货人地址")
+    private String senderAddress;
+
+    @ApiModelProperty(name = "sender_name", value = "发货人姓名")
+    private String senderName;
+
+    @ApiModelProperty(name = "goods_list", value = "货物信息,最大数量50")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<KdGood> goodsList;
+
+    @ApiModelProperty(name = "sender_mobile", value = "发货人座机")
+    private String senderMobile;
+
+    @ApiModelProperty(name = "sender_phone", value = "发货人电话")
+    private String senderPhone;
+
+    @ApiModelProperty(name = "sender_latitude", value = "发货人纬度")
+    private String senderLatitude;
+
+    @ApiModelProperty(name = "sender_longitude", value = "发货人经度")
+    private String senderLongitude;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "快递鸟单号")
+    private String kdnOrderCode;
+
+    private String sendAddress;
+
+    private String receiveAddress;
+
+    @ApiModelProperty(name = "kdn_order_code", value = "快递鸟下单失败 0")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> createOrderFail = new HashMap<>();
+
+    @ApiModelProperty(name = "kdn_order_code", value = "待接单状态 1")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> createOrderSuccess = new HashMap<>();
+
+    @ApiModelProperty(name = "kdn_order_code", value = "业务员接单状态 2")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> userTakeOrder = new HashMap<>();
+
+    @ApiModelProperty(name = "kdn_order_code", value = "业务员到达状态 3")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> userArrives = new HashMap<>();
+
+    @ApiModelProperty(name = "kdn_order_code", value = "业务员配送中 4")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> userSending = new HashMap<>();
+
+    @ApiModelProperty(name = "kdn_order_code", value = "订单费用 5")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> orderFee = new HashMap<>();
+
+    @ApiModelProperty(name = "kdn_order_code", value = "签收 6")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> signIn = new HashMap<>();
+
+    @ApiModelProperty(name = "kdn_order_code", value = "取消状态  0")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String,Object> cancelOrderKdn = new HashMap<>();
+
+    @TableField(exist = false)
+    private OrderDO orderVo;
+
+    @TableField(exist = false)
+    private List<OrderItemVO> orderItemVOS;
+
+}

+ 4 - 220
module-erp/src/main/java/com/hys/app/model/erp/dos/StockDamageReportProduct.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Objects;
@@ -17,6 +18,7 @@ import java.util.Objects;
  */
 @TableName("es_stock_damage_report_product")
 @ApiModel
+@Data
 public class StockDamageReportProduct implements Serializable {
 
     private static final long serialVersionUID = -3018714217635930969L;
@@ -123,225 +125,7 @@ public class StockDamageReportProduct implements Serializable {
     @ApiModelProperty(name = "type", value = "类型 0:增加,1:减少")
     private Integer type;
 
-    public Long getId() {
-        return id;
-    }
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
 
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getReportId() {
-        return reportId;
-    }
-
-    public void setReportId(Long reportId) {
-        this.reportId = reportId;
-    }
-
-    public String getStockSn() {
-        return stockSn;
-    }
-
-    public void setStockSn(String stockSn) {
-        this.stockSn = stockSn;
-    }
-
-    public Long getBatchId() {
-        return batchId;
-    }
-
-    public void setBatchId(Long batchId) {
-        this.batchId = batchId;
-    }
-
-    public String getBatchSn() {
-        return batchSn;
-    }
-
-    public void setBatchSn(String batchSn) {
-        this.batchSn = batchSn;
-    }
-
-    public Long getGoodsId() {
-        return goodsId;
-    }
-
-    public void setGoodsId(Long goodsId) {
-        this.goodsId = goodsId;
-    }
-
-    public Long getProductId() {
-        return productId;
-    }
-
-    public void setProductId(Long productId) {
-        this.productId = productId;
-    }
-
-    public String getProductName() {
-        return productName;
-    }
-
-    public void setProductName(String productName) {
-        this.productName = productName;
-    }
-
-    public String getProductSn() {
-        return productSn;
-    }
-
-    public void setProductSn(String productSn) {
-        this.productSn = productSn;
-    }
-
-    public String getSpecification() {
-        return specification;
-    }
-
-    public void setSpecification(String specification) {
-        this.specification = specification;
-    }
-
-    public Long getCategoryId() {
-        return categoryId;
-    }
-
-    public void setCategoryId(Long categoryId) {
-        this.categoryId = categoryId;
-    }
-
-    public String getCategoryName() {
-        return categoryName;
-    }
-
-    public void setCategoryName(String categoryName) {
-        this.categoryName = categoryName;
-    }
-
-    public String getUnit() {
-        return unit;
-    }
-
-    public void setUnit(String unit) {
-        this.unit = unit;
-    }
-
-    public Double getPrice() {
-        return price;
-    }
-
-    public void setPrice(Double price) {
-        this.price = price;
-    }
-
-    public Double getCostPrice() {
-        return costPrice;
-    }
-
-    public void setCostPrice(Double costPrice) {
-        this.costPrice = costPrice;
-    }
-
-    public Double getTaxRate() {
-        return taxRate;
-    }
-
-    public void setTaxRate(Double taxRate) {
-        this.taxRate = taxRate;
-    }
-
-    public Integer getStockNum() {
-        return stockNum;
-    }
-
-    public void setStockNum(Integer stockNum) {
-        this.stockNum = stockNum;
-    }
-
-    public Integer getReportNum() {
-        return reportNum;
-    }
-
-    public void setReportNum(Integer reportNum) {
-        this.reportNum = reportNum;
-    }
-
-    public String getReportRemark() {
-        return reportRemark;
-    }
-
-    public void setReportRemark(String reportRemark) {
-        this.reportRemark = reportRemark;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        StockDamageReportProduct that = (StockDamageReportProduct) o;
-        return Objects.equals(id, that.id) &&
-                Objects.equals(reportId, that.reportId) &&
-                Objects.equals(stockSn, that.stockSn) &&
-                Objects.equals(batchId, that.batchId) &&
-                Objects.equals(batchSn, that.batchSn) &&
-                Objects.equals(goodsId, that.goodsId) &&
-                Objects.equals(productId, that.productId) &&
-                Objects.equals(productName, that.productName) &&
-                Objects.equals(productSn, that.productSn) &&
-                Objects.equals(specification, that.specification) &&
-                Objects.equals(categoryId, that.categoryId) &&
-                Objects.equals(categoryName, that.categoryName) &&
-                Objects.equals(unit, that.unit) &&
-                Objects.equals(price, that.price) &&
-                Objects.equals(costPrice, that.costPrice) &&
-                Objects.equals(taxRate, that.taxRate) &&
-                Objects.equals(stockNum, that.stockNum) &&
-                Objects.equals(reportNum, that.reportNum) &&
-                Objects.equals(reportRemark, that.reportRemark) &&
-                Objects.equals(type, that.type);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(id, reportId, stockSn, batchId, batchSn, goodsId, productId, productName, productSn, specification, categoryId, categoryName, unit, price, costPrice, taxRate, stockNum, reportNum, reportRemark, type);
-    }
-
-    @Override
-    public String toString() {
-        return "StockDamageReportProduct{" +
-                "id=" + id +
-                ", reportId=" + reportId +
-                ", stockSn='" + stockSn + '\'' +
-                ", batchId=" + batchId +
-                ", batchSn='" + batchSn + '\'' +
-                ", goodsId=" + goodsId +
-                ", productId=" + productId +
-                ", productName='" + productName + '\'' +
-                ", productSn='" + productSn + '\'' +
-                ", specification='" + specification + '\'' +
-                ", categoryId=" + categoryId +
-                ", categoryName='" + categoryName + '\'' +
-                ", unit='" + unit + '\'' +
-                ", price=" + price +
-                ", costPrice=" + costPrice +
-                ", taxRate=" + taxRate +
-                ", stockNum=" + stockNum +
-                ", reportNum=" + reportNum +
-                ", reportRemark='" + reportRemark + '\'' +
-                ", type=" + type +
-                '}';
-    }
 }

+ 4 - 151
module-erp/src/main/java/com/hys/app/model/erp/dos/StockInventoryProduct.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Objects;
@@ -17,6 +18,7 @@ import java.util.Objects;
  */
 @TableName("es_stock_inventory_product")
 @ApiModel
+@Data
 public class StockInventoryProduct implements Serializable {
 
     private static final long serialVersionUID = -8999547639817129356L;
@@ -88,155 +90,6 @@ public class StockInventoryProduct implements Serializable {
     @ApiModelProperty(name = "remark", value = "备注")
     private String remark;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getInventoryId() {
-        return inventoryId;
-    }
-
-    public void setInventoryId(Long inventoryId) {
-        this.inventoryId = inventoryId;
-    }
-
-    public Long getGoodsId() {
-        return goodsId;
-    }
-
-    public void setGoodsId(Long goodsId) {
-        this.goodsId = goodsId;
-    }
-
-    public Long getProductId() {
-        return productId;
-    }
-
-    public void setProductId(Long productId) {
-        this.productId = productId;
-    }
-
-    public String getProductName() {
-        return productName;
-    }
-
-    public void setProductName(String productName) {
-        this.productName = productName;
-    }
-
-    public String getProductSn() {
-        return productSn;
-    }
-
-    public void setProductSn(String productSn) {
-        this.productSn = productSn;
-    }
-
-    public String getSpecification() {
-        return specification;
-    }
-
-    public void setSpecification(String specification) {
-        this.specification = specification;
-    }
-
-    public String getCategoryName() {
-        return categoryName;
-    }
-
-    public void setCategoryName(String categoryName) {
-        this.categoryName = categoryName;
-    }
-
-    public String getUnit() {
-        return unit;
-    }
-
-    public void setUnit(String unit) {
-        this.unit = unit;
-    }
-
-    public Integer getStockNum() {
-        return stockNum;
-    }
-
-    public void setStockNum(Integer stockNum) {
-        this.stockNum = stockNum;
-    }
-
-    public Integer getInventoryNum() {
-        return inventoryNum;
-    }
-
-    public void setInventoryNum(Integer inventoryNum) {
-        this.inventoryNum = inventoryNum;
-    }
-
-    public Integer getDiffNum() {
-        return diffNum;
-    }
-
-    public void setDiffNum(Integer diffNum) {
-        this.diffNum = diffNum;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        StockInventoryProduct that = (StockInventoryProduct) o;
-        return Objects.equals(id, that.id) &&
-                Objects.equals(inventoryId, that.inventoryId) &&
-                Objects.equals(goodsId, that.goodsId) &&
-                Objects.equals(productId, that.productId) &&
-                Objects.equals(productName, that.productName) &&
-                Objects.equals(productSn, that.productSn) &&
-                Objects.equals(specification, that.specification) &&
-                Objects.equals(categoryName, that.categoryName) &&
-                Objects.equals(unit, that.unit) &&
-                Objects.equals(stockNum, that.stockNum) &&
-                Objects.equals(inventoryNum, that.inventoryNum) &&
-                Objects.equals(diffNum, that.diffNum) &&
-                Objects.equals(remark, that.remark);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(id, inventoryId, goodsId, productId, productName, productSn, specification, categoryName, unit, stockNum, inventoryNum, diffNum, remark);
-    }
-
-    @Override
-    public String toString() {
-        return "StockInventoryProduct{" +
-                "id=" + id +
-                ", inventoryId=" + inventoryId +
-                ", goodsId=" + goodsId +
-                ", productId=" + productId +
-                ", productName='" + productName + '\'' +
-                ", productSn='" + productSn + '\'' +
-                ", specification='" + specification + '\'' +
-                ", categoryName='" + categoryName + '\'' +
-                ", unit='" + unit + '\'' +
-                ", stockNum=" + stockNum +
-                ", inventoryNum=" + inventoryNum +
-                ", diffNum=" + diffNum +
-                ", remark='" + remark + '\'' +
-                '}';
-    }
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
 }

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

@@ -89,4 +89,7 @@ public class StockTransferProductDO implements Serializable {
     @Min(value = 1, message = "调拨数量最小为1")
     private Integer useAbleNum;
 
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
+
 }

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

@@ -1,12 +1,14 @@
 package com.hys.app.model.erp.dos;
 
 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 io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 
 /**
@@ -46,4 +48,8 @@ public class WarehouseAreaDO implements Serializable {
     @ApiModelProperty(name = "status", value = "状态")
     private String status;
 
+
+    @ApiModelProperty(name = "status", value = "库存ID")
+    @TableField(exist = false)
+    private List<Long> stockIdList;
 }

+ 44 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseAreaTypeDO.java

@@ -0,0 +1,44 @@
+package com.hys.app.model.erp.dos;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+
+/**
+ * 库位信息管理
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+@TableName("erp_warehouse_area_type")
+@Data
+public class WarehouseAreaTypeDO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(name = "id", value = "id")
+    private Long id;
+
+    @ApiModelProperty(name = "name", value = "名称")
+    @NotBlank(message = "名称不能为空")
+    private String name;
+
+    @ApiModelProperty(name = "code", value = "编号")
+    @NotBlank(message = "编码")
+    private String code;
+
+    @ApiModelProperty(name = "remark", value = "备注")
+    private String remark;
+
+    @TableLogic
+    @ApiModelProperty(name = "deleted", value = "是否删除")
+    private Boolean deleted;
+}

+ 23 - 7
module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseDO.java

@@ -10,6 +10,9 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 
 /**
  * 仓库实体类
@@ -30,19 +33,32 @@ public class WarehouseDO extends BaseDO {
     private Long id;
 
     @ApiModelProperty(name = "name", value = "仓库名称")
+    @NotBlank(message = "仓库名称不能为空")
     private String name;
-    
+
     @ApiModelProperty(name = "sn", value = "仓库编号")
+    @NotBlank(message = "仓库编号不能为空")
     private String sn;
-    
+
     @ApiModelProperty(name = "admin_id", value = "管理员id")
+    @NotNull(message = "管理员id不能为空")
     private Long adminId;
-    
-    @ApiModelProperty(name = "description", value = "描述")
-    private String description;
 
-    @ApiModelProperty(name = "dept_id", value = "部门id")
-    private Long deptId;
+    @ApiModelProperty(name = "phone", value = "管理员id")
+    @NotBlank(message = "仓库省市区")
+    private String phone;
+
+    @ApiModelProperty(name = "ware_pro_city_area", value = "管理员id")
+    @NotBlank(message = "仓库省市区")
+    private String wareProCityArea;
+
+    @ApiModelProperty(name = "warehouse_address", value = "仓库地址")
+    @NotBlank(message = "仓库地址")
+    private String warehouseAddress;
+
+    @ApiModelProperty(name = "remark", value = "备注")
+    @NotBlank(message = "仓库地址")
+    private String description;
 
     @TableLogic
     @ApiModelProperty(name = "deleted", value = "是否删除")

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

@@ -92,4 +92,7 @@ public class WarehouseEntryProductDO implements Serializable {
     @ApiModelProperty(name = "usable_stock", value = "可用库存")
     @TableField(exist = false)
     private Integer usableStock;
+
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
 }

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

@@ -74,7 +74,7 @@ public class WarehouseOutDO extends BaseDO {
     @ApiModelProperty(name = "consignee", value = "提货人")
     private String consignee;
 
-    @ApiModelProperty(name = "order_id_list", value = "订单id集合")
+    @ApiModelProperty(name = "order_id_list", value = "发货单id")
     private Long orderIdList;
 
     @ApiModelProperty(name = "order_sn_list", value = "订单编号集合")

+ 20 - 2
module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseOutItemDO.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.hys.app.model.erp.enums.ScanFormCodeTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -49,8 +50,6 @@ public class WarehouseOutItemDO implements Serializable {
     @ApiModelProperty(name = "order_sn", value = "订单编号")
     private String orderSn;
 
-    @ApiModelProperty(name = "order_item_id", value = "订单项id")
-    private Long orderItemId;
 
     @ApiModelProperty(name = "goods_id", value = "商品id")
     private Long goodsId;
@@ -94,4 +93,23 @@ public class WarehouseOutItemDO implements Serializable {
     @ApiModelProperty(name = "return_num", value = "已退货数量")
     private Integer returnNum;
 
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
+
+
+    @ApiModelProperty(name = "scan_order_id", value = "扫码的单号,扫码订单打出来的数据必传")
+    private Long scanOrderId;
+
+    @ApiModelProperty(name = "order_item_id", value = "订单项id,扫码订单打出来的数据必传")
+    private Long orderItemId;
+
+    @ApiModelProperty(name = "scan_order_sn", value = "扫码的单号,扫码订单打出来的数据必传")
+    private String scanOrderSn;
+
+    @ApiModelProperty(name = "scan_order_type", value = "扫码的单号,扫码订单打出来的数据必传")
+    private ScanFormCodeTypeEnum scanOrderType;
+
+    @ApiModelProperty(name = "scan_iff_num", value = "差异数量,扫码订单打出来的数据必传")
+    private Integer scanDiffNum;
+
 }

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

@@ -56,11 +56,6 @@ public class GoodsDTO {
     @NotNull(message = "状态不能为空")
     private Boolean marketEnable;
 
-
-    @ApiModelProperty(name = "goodsUnit", value = "商品单位")
-    @NotBlank(message = "商品单位不能为空")
-    private String goodsUnit;
-
     @ApiModelProperty(name = "allowSn", value = "是否启用序列号1是2否")
     @NotNull(message = "是否启用序列号1是2否")
     private Integer allowSn;

+ 16 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/IdParams.java

@@ -0,0 +1,16 @@
+package com.hys.app.model.erp.dto;
+
+import com.hys.app.framework.database.BaseQueryParam;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@Data
+public class IdParams extends BaseQueryParam {
+
+
+    @NotEmpty
+    private String warehouseIds;
+
+}

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

@@ -56,7 +56,7 @@ public class OrderDTO {
 
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
     @NotNull(message = "仓库id不能为空")
-    private Long warehouseId;
+    private List<Long> warehouseId;
 
     @ApiModelProperty(name = "attachment", value = "附件")
     private String attachment;
@@ -109,5 +109,7 @@ public class OrderDTO {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date startTime;
 
+
+
 }
 

+ 11 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java

@@ -25,6 +25,10 @@ public class OrderItemDTO {
     @NotNull(message = "skuid不能为空")
     private Long productId;
 
+    @ApiModelProperty(name = "goods_id", value = "goodsid不能为空")
+    @NotNull(message = "goodsid不能为空")
+    private Long goodsId;
+
     @ApiModelProperty(name = "num", value = "数量")
     @NotNull(message = "数量不能为空")
     @Min(value = 1, message = "数量必须大于0")
@@ -37,5 +41,12 @@ public class OrderItemDTO {
     @ApiModelProperty(name = "usable_stock", value = "可用库存")
     private Integer usableStock;
 
+    @ApiModelProperty(name = "warehouse_id", value = "可用库存")
+    @NotNull(message = "仓库id不能为空")
+    private Long warehouseId;
+
+    @ApiModelProperty(name = "product_stock_id", value = "商品库存id")
+    private Long productStockId;
+
 }
 

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

@@ -19,9 +19,12 @@ public class ProductStockQueryParams extends BaseQueryParam {
 
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")
     private Long warehouseId;
-//
-//    @ApiModelProperty(name = "product_id", value = "商品id")
-//    private Long productId;
+
+    @ApiModelProperty(name = "product_id", value = "skuid")
+    private Long productId;
+
+    @ApiModelProperty(name = "goods_id", value = "商品id")
+    private Long goodsId;
 
     @ApiModelProperty(name = "keyword", value = "搜索关键字")
     private Long keyword;

+ 17 - 9
module-erp/src/main/java/com/hys/app/model/erp/dto/WarehouseDTO.java

@@ -21,21 +21,29 @@ public class WarehouseDTO {
     @ApiModelProperty(name = "name", value = "仓库名称")
     @NotBlank(message = "仓库名称不能为空")
     private String name;
-    
+
     @ApiModelProperty(name = "sn", value = "仓库编号")
     @NotBlank(message = "仓库编号不能为空")
     private String sn;
-    
+
     @ApiModelProperty(name = "admin_id", value = "管理员id")
-    @NotNull(message = "管理员id不能为空")
     private Long adminId;
-    
-    @ApiModelProperty(name = "description", value = "描述")
+
+    @ApiModelProperty(name = "ware_pro_city_area", value = "手机号")
+    @NotBlank(message = "手机号")
+    private String phone;
+
+    @ApiModelProperty(name = "ware_pro_city_area", value = "仓库省市区")
+    @NotBlank(message = "仓库省市区")
+    private String wareProCityArea;
+
+    @ApiModelProperty(name = "warehouse_address", value = "仓库地址")
+    @NotBlank(message = "仓库地址")
+    private String warehouseAddress;
+
+    @ApiModelProperty(name = "remark", value = "备注")
+    @NotBlank(message = "备注")
     private String description;
-    
-    @ApiModelProperty(name = "dept_id", value = "部门id")
-    @NotNull(message = "请选择部门")
-    private Long deptId;
 
 }
 

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

@@ -39,7 +39,7 @@ public class WarehouseEntryDTO {
     @ApiModelProperty(name = "memo", value = "订单备注")
     private String memo;
 
-    @ApiModelProperty(name = "order_id", value = "入库订单id")
+    @ApiModelProperty(name = "order_id", value = "扫码或者选择的单子ID")
     private Long orderId;
 
     @ApiModelProperty(name = "warehouse_id", value = "仓库id")

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

@@ -1,5 +1,6 @@
 package com.hys.app.model.erp.dto;
 
+import com.hys.app.model.erp.enums.ScanFormCodeTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -16,7 +17,7 @@ import javax.validation.constraints.NotNull;
 public class WarehouseEntryProductDTO {
 
     @ApiModelProperty(name = "product_id", value = "商品id")
-    @NotNull(message = "商品id不能为空")
+    @NotNull(message = "库存id不能为空")
     private Long productId;
 
     @ApiModelProperty(name = "num", value = "本次入库数量")
@@ -24,11 +25,22 @@ public class WarehouseEntryProductDTO {
     @Min(value = 1, message = "入库数量最小为1")
     private Integer num;
 
-    @ApiModelProperty(name = "price", value = "单价")
-    private Double price;
 
-    @ApiModelProperty(name = "tax_rate", value = "税率")
-    private Double taxRate;
+    @ApiModelProperty(name = "scan_order_id", value = "扫码的单号,扫码订单打出来的数据必传")
+    private Long scanOrderId;
+
+    @ApiModelProperty(name = "order_item_id", value = "订单项id,扫码订单打出来的数据必传")
+    private Long orderItemId;
+
+    @ApiModelProperty(name = "scan_order_sn", value = "扫码的单号,扫码订单打出来的数据必传")
+    private String scanOrderSn;
+
+    @ApiModelProperty(name = "scan_order_type", value = "扫码的单号,扫码订单打出来的数据必传")
+    private ScanFormCodeTypeEnum scanOrderType;
+
+    @ApiModelProperty(name = "scan_iff_num", value = "差异数量,扫码订单打出来的数据必传")
+    private Integer scanDiffNum;
+
 
 }
 

+ 5 - 0
module-erp/src/main/java/com/hys/app/model/erp/enums/NoBusinessTypeEnum.java

@@ -93,6 +93,11 @@ public enum NoBusinessTypeEnum {
      */
     Order,
 
+    /**
+     * 发货单
+     */
+    OrderSend,
+
     /**
      * 财务明细
      */

+ 36 - 0
module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderSendStatusEnum.java

@@ -0,0 +1,36 @@
+package com.hys.app.model.erp.enums;
+
+import lombok.Getter;
+
+/**
+ * 订单状态枚举
+ *
+ * @author 张崧
+ * @since 2024-01-25
+ */
+@Getter
+public enum SaleOrderSendStatusEnum {
+
+    TO_BE_SEND("TO_BE_SEND", "待发货"),
+    SENDING("SENDING", "配送中"),
+    TO_BE_SINGE("TO_BE_SINGE", "已签收");
+
+    SaleOrderSendStatusEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    private final String value;
+
+    private final String label;
+
+
+}

+ 5 - 8
module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderStatusEnum.java

@@ -13,14 +13,8 @@ import lombok.Getter;
 @Getter
 public enum SaleOrderStatusEnum {
 
-    TO_BE_COMMIT("to_be_commit", "待确认"),
-    TO_BE_SEND("to_be_send", "待发货"),
-    SENDING("sending", "配送中"),
-    TO_BE_SINGE("to_be_singe", "待签收"),
-    TO_BE_AFTER_SALE("to_be_after_sale", "待售后"),
-    END("end", "完成"),
-    AFTER_SALE("after_sale", "售后"),
-    CANCEL("cancel", "关闭"),
+    TO_BE_COMMIT("TO_BE_COMMIT", "待确认"),
+    TO_BE_SEND("TO_BE_SEND", "已确认"),
     SALE_AFTER_ING("SALE_AFTER_ING", "售后中"),
     SALE_AFTER_END("SALE_AFTER_END", "售后完成"),
     SALE_AFTER_CANCEL("SALE_AFTER_CANCEL", "售后关闭");
@@ -29,12 +23,15 @@ public enum SaleOrderStatusEnum {
         this.value = value;
         this.label = label;
     }
+
     public String getValue() {
         return value;
     }
+
     public String getLabel() {
         return label;
     }
+
     private final String value;
 
     private final String label;

+ 41 - 0
module-erp/src/main/java/com/hys/app/model/erp/enums/ScanFormCodeTypeEnum.java

@@ -0,0 +1,41 @@
+package com.hys.app.model.erp.enums;
+
+import lombok.Getter;
+
+/**
+ * 订单状态枚举
+ *
+ * @author 张崧
+ * @since 2024-01-25
+ */
+@Getter
+public enum ScanFormCodeTypeEnum {
+
+    RYKS_FHD("RYKS_FHD", "发货单"),
+    RYKS_DDD("RYKS_DDD", "订单"),
+    RYKS_BSD("RYKS_BSD", "报损单"),
+    RYKS_PDD("RYKS_PDD", "盘点"),
+    RYKS_THD("RYKS_THD", "退货单"),
+    RYKS_DBD("RYKS_DBD", "调拨"),
+    RYKS_CKD("RYKS_CKD", "出库"),
+    RYKS_RKD("RYKS_RKD", "入库");
+
+    ScanFormCodeTypeEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    private final String value;
+
+    private final String label;
+
+
+}

+ 5 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/OrderItemVO.java

@@ -1,5 +1,6 @@
 package com.hys.app.model.erp.vo;
 
+import com.hys.app.model.erp.dos.ProductDO;
 import io.swagger.annotations.ApiModel;
 import com.hys.app.model.erp.dos.OrderItemDO;
 import io.swagger.annotations.ApiModelProperty;
@@ -32,5 +33,9 @@ public class OrderItemVO extends OrderItemDO {
     private Integer outNum;
 
     private GoodsVO goodsVO;
+
+    private ProductDO productVO;
+
+    private Integer useAbleStock;
 }
 

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

@@ -61,9 +61,6 @@ public class OrderVO extends OrderDO {
     @ApiModelProperty(name = "payment_time", value = "支付时间")
     private Long paymentTime;
 
-    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
-    private Long warehouseId;
-
     @ApiModelProperty(name = "attachment", value = "附件")
     private String attachment;
 

+ 7 - 3
module-erp/src/main/java/com/hys/app/model/erp/vo/ProductStockVO.java

@@ -1,6 +1,8 @@
 package com.hys.app.model.erp.vo;
 
+import com.hys.app.model.erp.dos.AreaStock;
 import com.hys.app.model.erp.dos.ProductStockDO;
+import com.hys.app.model.erp.dos.WarehouseDO;
 import com.hys.app.model.goods.vo.GoodsParamsGroupVO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -25,12 +27,14 @@ public class ProductStockVO extends ProductStockDO {
 
 
     @ApiModelProperty(name = "warehouse", value = "仓库")
-    private WarehouseVO warehouse;
+    private WarehouseDO warehouseVO;
 
     @ApiModelProperty(name = "product", value = "产品信息")
-    private ProductVO product;
+    private ProductVO productVO;
 
     @ApiModelProperty(name = "goods", value = "商品信息")
-    private GoodsVO goods;
+    private GoodsVO goodVO;
+
+    private  List<AreaStock> areaStockList;
 }
 

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

@@ -27,5 +27,9 @@ public class ProductVO extends ProductDO {
 
     @ApiModelProperty(name = "usable_stock", value = "可用库存")
     private Integer usableStock;
+
+
+    @ApiModelProperty(name = "warehouse_id", value = "仓库id")
+    private Long warehouseId;
 }
 

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

@@ -1,5 +1,6 @@
 package com.hys.app.model.erp.vo;
 
+import com.hys.app.model.erp.dos.AreaStock;
 import com.hys.app.model.erp.dos.WarehouseAreaDO;
 import com.hys.app.model.erp.dos.WarehouseDO;
 import com.hys.app.model.erp.dos.WarehouseOutItemDO;
@@ -26,5 +27,7 @@ public class WarehouseAreaVO extends WarehouseAreaDO {
     @ApiModelProperty(name = "warehouse", value = "所属仓库信息")
     private WarehouseDO warehouse;
 
+    private  List<AreaStock> areaStockVO;
+
 }
 

+ 22 - 0
module-erp/src/main/java/com/hys/app/service/erp/AreaStockManager.java

@@ -0,0 +1,22 @@
+package com.hys.app.service.erp;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.AreaStock;
+import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
+import com.hys.app.model.erp.vo.ProductStockVO;
+import com.hys.app.model.erp.vo.WarehouseAreaVO;
+
+import java.util.List;
+
+/**
+ * 出库单商品明细业务层接口
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+public interface AreaStockManager extends BaseService<AreaStock> {
+}

+ 12 - 4
module-erp/src/main/java/com/hys/app/service/erp/OrderManager.java

@@ -2,14 +2,17 @@ package com.hys.app.service.erp;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.dos.OrderDO;
+import com.hys.app.model.erp.dos.OrderSendDO;
 import com.hys.app.model.erp.dto.OrderDTO;
 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.model.erp.vo.ProductVO;
 import com.hys.app.service.kuaidiniao.entity.AddressDTO;
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 
@@ -80,9 +83,7 @@ public interface OrderManager extends BaseService<OrderDO> {
      *
      * @param queryParams
      */
-    IPage<OrderVO> hasSendOrder(OrderQueryParams queryParams);
-
-
+    IPage<OrderSendDO> hasSendOrder(OrderQueryParams queryParams);
 
 
     /**
@@ -90,7 +91,14 @@ public interface OrderManager extends BaseService<OrderDO> {
      *
      * @param orderId
      */
-    void orderSend(Long orderId, AddressDTO addressDTO);
+    void orderSend(Long orderId);
 
+    /**
+     * 获取发货单详情
+     *
+     * @param id
+     * @return
+     */
+    OrderSendDO getSendOrderDetail(String id);
 }
 

+ 23 - 0
module-erp/src/main/java/com/hys/app/service/erp/OrderSendManager.java

@@ -0,0 +1,23 @@
+package com.hys.app.service.erp;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.OrderDO;
+import com.hys.app.model.erp.dos.OrderSendDO;
+import com.hys.app.model.erp.dto.OrderDTO;
+import com.hys.app.model.erp.dto.OrderQueryParams;
+import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
+import com.hys.app.model.erp.vo.OrderVO;
+import com.hys.app.service.kuaidiniao.entity.AddressDTO;
+
+/**
+ * 订单业务层接口
+ *
+ * @author 张崧
+ * 2024-01-24 15:58:31
+ */
+public interface OrderSendManager extends BaseService<OrderSendDO> {
+
+}
+

+ 32 - 0
module-erp/src/main/java/com/hys/app/service/erp/ScanCodeManager.java

@@ -0,0 +1,32 @@
+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.EnterpriseDO;
+import com.hys.app.model.erp.dos.ProductStockDO;
+import com.hys.app.model.erp.dto.EnterpriseDTO;
+import com.hys.app.model.erp.dto.EnterpriseQueryParams;
+import com.hys.app.model.erp.vo.EnterpriseVO;
+import com.hys.app.model.erp.vo.ProductStockVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 企业业务层接口
+ *
+ * @author 张崧
+ * 2024-03-25 15:44:10
+ */
+public interface ScanCodeManager extends BaseService<ProductStockDO> {
+
+    /**
+     * 扫各种码获取
+     *
+     * @param
+     * @param orderCode
+     * @return
+     */
+    Map<String, Object> getListByScan(String orderCode);
+}
+

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

@@ -1,6 +1,9 @@
 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.ProductStockDO;
+import com.hys.app.model.erp.dos.StockDamageReport;
 import com.hys.app.model.erp.dto.StockDamageReportDTO;
 import com.hys.app.model.erp.dto.StockDamageReportParam;
 import com.hys.app.model.erp.dto.StockDamageReportStatisticsParam;
@@ -15,7 +18,7 @@ import java.util.List;
  * @author dmy
  * 2023-12-05
  */
-public interface StockDamageReportManager {
+public interface StockDamageReportManager  extends BaseService<StockDamageReport> {
 
     /**
      * 查询库存报损单分页列表数据

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

@@ -1,5 +1,7 @@
 package com.hys.app.service.erp;
 
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.StockDamageReport;
 import com.hys.app.model.erp.dos.StockDamageReportProduct;
 import com.hys.app.model.erp.dto.StockDamageReportProductDTO;
 
@@ -11,7 +13,7 @@ import java.util.List;
  * @author dmy
  * 2023-12-05
  */
-public interface StockDamageReportProductManager {
+public interface StockDamageReportProductManager extends BaseService<StockDamageReportProduct> {
 
     /**
      * 新增库存报损单产品信息

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

@@ -1,6 +1,9 @@
 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.ProductStockDO;
+import com.hys.app.model.erp.dos.StockInventory;
 import com.hys.app.model.erp.dto.StockInventoryDTO;
 import com.hys.app.model.erp.dto.StockInventoryParam;
 import com.hys.app.model.erp.vo.StockInventoryVO;
@@ -13,7 +16,7 @@ import java.util.List;
  * @author dmy
  * 2023-12-05
  */
-public interface StockInventoryManager {
+public interface StockInventoryManager   extends BaseService<StockInventory> {
 
     /**
      * 查询库存盘点单分页列表数据

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

@@ -1,5 +1,6 @@
 package com.hys.app.service.erp;
 
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.dos.StockInventoryProduct;
 import com.hys.app.model.erp.dto.StockInventoryProductDTO;
 
@@ -11,7 +12,7 @@ import java.util.List;
  * @author dmy
  * 2023-12-05
  */
-public interface StockInventoryProductManager {
+public interface StockInventoryProductManager extends BaseService<StockInventoryProduct> {
 
     /**
      * 新增库存盘点单产品信息
@@ -30,6 +31,7 @@ public interface StockInventoryProductManager {
 
     /**
      * 根据库存盘点单ID获取库存盘点单产品信息集合
+     *
      * @param inventoryId 库存盘点单ID
      * @return
      */

+ 30 - 0
module-erp/src/main/java/com/hys/app/service/erp/WarehouseAreaManager.java

@@ -1,11 +1,15 @@
 package com.hys.app.service.erp;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.GoodsDO;
 import com.hys.app.model.erp.dos.WarehouseAreaDO;
 import com.hys.app.model.erp.dos.WarehouseOutItemDO;
 import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
 import com.hys.app.model.erp.dto.WarehouseOutItemQueryParams;
+import com.hys.app.model.erp.vo.ProductStockVO;
 import com.hys.app.model.erp.vo.WarehouseAreaVO;
 import com.hys.app.model.erp.vo.WarehouseOutItemVO;
 
@@ -29,9 +33,35 @@ public interface WarehouseAreaManager extends BaseService<WarehouseAreaDO> {
     WarehouseAreaVO getDetail(Long id);
 
     void delete(Long id);
+
     void add(WarehouseAreaDO warehouseAreaDO);
 
     void edit(WarehouseAreaDO warehouseAreaDO);
 
+    /**
+     * 获取所有没有绑定枯萎的商品
+     *
+     * @param baseQueryParam
+     * @return
+     */
+    Page<ProductStockVO> goodNotAreaList(BaseQueryParam baseQueryParam, Long warehouseId);
+
+    /**
+     * 根据仓库id获取仓库下所有的库位
+     *
+     * @param warehouseId
+     * @return
+     */
+    List<WarehouseAreaDO> getAreaByWarehouse(Long warehouseId);
+
+    /**
+     * 库存绑定库位
+     * 保存以最后一次带过来的数据为主,之前的全部删掉
+     *
+     * @param warehouseId
+     * @param warehouseAreaId
+     * @param stockIdList
+     */
+    void bindAreaStock(Long warehouseId, Long warehouseAreaId, List<Long> stockIdList);
 }
 

+ 25 - 0
module-erp/src/main/java/com/hys/app/service/erp/WarehouseAreaTypeManager.java

@@ -0,0 +1,25 @@
+package com.hys.app.service.erp;
+
+import com.hys.app.framework.database.BaseQueryParam;
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.GoodsDO;
+import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dos.WarehouseAreaTypeDO;
+import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
+import com.hys.app.model.erp.vo.WarehouseAreaVO;
+
+import java.util.List;
+
+/**
+ * 出库单商品明细业务层接口
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+public interface WarehouseAreaTypeManager extends BaseService<WarehouseAreaTypeDO> {
+
+
+
+}
+

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

@@ -60,6 +60,5 @@ public interface WarehouseManager extends BaseService<WarehouseDO> {
      */
     List<WarehouseVO> listAll(Long deptId);
 
-    long countByDeptId(Long deptId);
 }
 

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

@@ -1,5 +1,6 @@
 package com.hys.app.service.erp;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
@@ -114,6 +115,6 @@ public interface WarehouseOutManager extends BaseService<WarehouseOutDO> {
      * 根据仓库找到所有库存大于0的商品
      * @param warehouseId 仓库ID
      */
-    Page<ProductVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam,String orderType);
+    IPage<ProductStockVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam, String orderType, List<Long> warehouseIds);
 }
 

+ 21 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/AreaStockManagerImpl.java

@@ -0,0 +1,21 @@
+package com.hys.app.service.erp.impl;
+
+import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
+import com.hys.app.mapper.erp.AreaStockMapper;
+import com.hys.app.model.erp.dos.AreaStock;
+import com.hys.app.service.erp.AreaStockManager;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 出库单商品明细业务层实现
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+@Service
+@AllArgsConstructor
+public class AreaStockManagerImpl extends BaseServiceImpl<AreaStockMapper, AreaStock> implements AreaStockManager {
+
+}
+

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

@@ -118,6 +118,11 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
                 throw new ServiceException("sku已存在");
             }
 
+            long count = goodsDTO.getProductList().stream().map(ProductDTO::getSku).count();
+            if (count != goodsDTO.getProductList().size()){
+                throw new ServiceException("sku不能重复");
+            }
+
             ProductDO codeOne = productManager.getOne(new LambdaQueryWrapper<ProductDO>()
                     .eq(ProductDO::getBarCode, productDTO.getBarCode())
                     .ne(ObjectUtil.isNotNull(productDTO.getId()), ProductDO::getId, productDTO.getId())

+ 64 - 45
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -22,6 +22,7 @@ import com.hys.app.model.erp.dto.OrderQueryParams;
 import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
 import com.hys.app.model.erp.enums.*;
 import com.hys.app.model.erp.vo.GoodsVO;
+import com.hys.app.model.erp.vo.OrderItemVO;
 import com.hys.app.model.erp.vo.OrderVO;
 import com.hys.app.model.erp.vo.ProductVO;
 import com.hys.app.service.erp.*;
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -54,6 +56,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     private WarehouseOutMapper warehouseOutMapper;
     private WarehouseOutItemManager warehouseOutItemManager;
     private ProductManager productManager;
+    private OrderSendManager orderSendManager;
 
     @Override
     public WebPage<OrderVO> list(OrderQueryParams queryParams) {
@@ -82,22 +85,20 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         return orderDO.getId();
     }
 
-    private void checkStock(Long warehouseId, List<OrderItemDO> itemList) {
-        //订单后面需要发货订单的数量不等你超过可用库存的数量
-        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::getProductId, productId));
-        for (ProductStockDO stockDO : stockDOList) {
-            OrderItemDO dto = itemList.stream().filter(item -> item.getProductId().equals(stockDO.getProductId())).findFirst().get();
-            if (dto.getNum() > stockDO.getUsableStock()) {
-                throw new ServiceException(dto.getProductId() + "的可用库存数量不足");
+    private void checkStock(List<Long> warehouseId, List<OrderItemDO> itemList) {
+
+        for (OrderItemDO aDo : itemList) {
+            ProductStockDO byId = productStockManager.getById(aDo.getProductStockId());
+            if (aDo.getNum() > byId.getUsableStock()) {
+                throw new ServiceException(aDo.getProductId() + "的可用库存数量不足");
             }
-            stockDO.setUsableStock(stockDO.getUsableStock() - dto.getNum());
+            byId.setUsableStock(byId.getUsableStock() - aDo.getNum());
+            productStockManager.updateById(byId);
         }
-        productStockManager.updateBatchById(stockDOList);
     }
 
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(OrderDTO orderDTO) {
@@ -128,14 +129,12 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         List<OrderItemDTO> itemList = BeanUtils.toBean(list, OrderItemDTO.class);
         //所有的商品信息
         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::getProductId, goodIdlist));
         for (OrderItemDTO dto : itemList) {
             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());
+            dto.setUsableStock(productStockManager.getById(dto.getProductStockId()).getUsableStock());
         }
         orderVO.setItemList(itemList);
         return orderVO;
@@ -163,47 +162,55 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void submit(Long id) {
         OrderDO aDo = getById(id);
+        List<OrderItemDO> dos = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
+        Set<Long> set = dos.stream().map(OrderItemDO::getWarehouseId).collect(Collectors.toSet());
+        for (Long warehouseId : set) {
+            OrderSendDO orderSendDO = new OrderSendDO();
+            orderSendDO.setOrderId(id);
+            orderSendDO.setWarehouseId(warehouseId);
+            orderSendDO.setOrderType(aDo.getType());
+            orderSendDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.OrderSend, 86L));
+            orderSendManager.save(orderSendDO);
+            List<OrderItemDO> collect = dos.stream().filter(item -> item.getWarehouseId().equals(warehouseId)).collect(Collectors.toList());
+            collect.forEach(item -> item.setOrderSendId(orderSendDO.getId()));
+        }
+        orderItemManager.updateBatchById(dos);
         if (!SaleOrderStatusEnum.TO_BE_COMMIT.equals(aDo.getStatus())) {
-            throw new ServiceException("该商品已确认");
+            throw new ServiceException("该订单已确认");
         }
         aDo.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
         updateById(aDo);
     }
 
     @Override
-    public IPage<OrderVO> hasSendOrder(OrderQueryParams queryParams) {
-        Page<OrderDO> page = new Page<>(queryParams.getPageNo(), queryParams.getPageSize());
-        LambdaQueryWrapper<OrderDO> wrapper = new LambdaQueryWrapper<OrderDO>()
-                .eq(ObjectUtil.isNotNull(queryParams.getWarehouseId()), OrderDO::getWarehouseId, queryParams.getWarehouseId())
-                .eq(StrUtil.isNotEmpty(queryParams.getSn()), OrderDO::getSn, queryParams.getSn());
+    public IPage<OrderSendDO> hasSendOrder(OrderQueryParams queryParams) {
+        Page<OrderSendDO> page = new Page<>(queryParams.getPageNo(), queryParams.getPageSize());
+        LambdaQueryWrapper<OrderSendDO> wrapper = new LambdaQueryWrapper<OrderSendDO>()
+                .eq(ObjectUtil.isNotNull(queryParams.getWarehouseId()), OrderSendDO::getWarehouseId, queryParams.getWarehouseId())
+                .eq(StrUtil.isNotEmpty(queryParams.getSn()), OrderSendDO::getSn, queryParams.getSn());
         switch (queryParams.getSelectType()) {
             case "to_be_send":
-                wrapper.in(OrderDO::getStatus, SaleOrderStatusEnum.TO_BE_SEND.getValue());
+                wrapper.in(OrderSendDO::getStatus, SaleOrderSendStatusEnum.TO_BE_SEND.getValue());
                 break;
             case "sending":
-                wrapper.notIn(OrderDO::getStatus, ListUtil.toList(SaleOrderStatusEnum.TO_BE_COMMIT.getValue(), SaleOrderStatusEnum.TO_BE_SEND.getValue()));
+                wrapper.ne(OrderSendDO::getStatus, SaleOrderSendStatusEnum.TO_BE_SEND.getValue());
                 break;
         }
-        Page<OrderDO> doPage = page(page, wrapper);
-        IPage<OrderVO> voPage = new Page<>(queryParams.getPageNo(), queryParams.getPageSize());
-        voPage.setSize(doPage.getSize());
-        voPage.setPages(doPage.getPages());
-        voPage.setRecords(BeanUtils.toBean(doPage.getRecords(), OrderVO.class));
-        voPage.setTotal(doPage.getTotal());
-        return voPage;
+        Page<OrderSendDO> paged = orderSendManager.page(page, wrapper);
+        paged.getRecords().forEach(item -> item.setOrderVo(getById(item.getOrderId())));
+        return paged;
     }
 
 
     @Override
-    @Transactional
-    public void orderSend(Long orderId, AddressDTO addressDTO) {
-        OrderDO aDo = getById(orderId);
-        aDo.setSendAddress(addressDTO.getSendAddress());
-        aDo.setReceiverAddress(addressDTO.getReceiveAddress());
+    @Transactional(rollbackFor = Exception.class)
+    public void orderSend(Long sendOrderId) {
+        OrderSendDO aDo = orderSendManager.getById(sendOrderId);
         //根据订单查找到这个订单的所有货物扣减库存
-        List<OrderItemDO> orderItemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderId));
+        List<OrderItemDO> orderItemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderSendId, sendOrderId));
         List<Long> productId = orderItemDOS.stream().map(OrderItemDO::getProductId).collect(Collectors.toList());
         //查找这些商品在指定仓库的库存,减去对应数量
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
@@ -212,12 +219,12 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
             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())) {
+                if (OrderTypeEnum.TO_B.equals(aDo.getOrderType())) {
                     //扣减可用库存
 //                    stockDO.setUsableStock(stockDO.getUsableStock() - num);
                     //扣减实际库存
                     stockDO.setActualStock(stockDO.getActualStock() - num);
-                } else if (OrderTypeEnum.TO_C.equals(aDo.getType())) {
+                } else if (OrderTypeEnum.TO_C.equals(aDo.getOrderType())) {
                     //扣减可用库存
                     stockDO.setActualStock(stockDO.getUsableStock() - num);
                     //增加在途库存
@@ -231,7 +238,7 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         //生成出库单
         WarehouseOutDO outDO = new WarehouseOutDO();
         outDO.setType(WarehouseOutTypeEnum.BORROW_OUT);
-        outDO.setOrderIdList(orderId);
+        outDO.setOrderIdList(sendOrderId);
         outDO.setWarehouseId(aDo.getWarehouseId());
         outDO.setNotes("发货单生成的出货单");
         outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
@@ -242,13 +249,25 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         warehouseOutItemManager.saveBatch(beanList);
         //更改订单状态56789=m+
 
-        if (SaleOrderStatusEnum.TO_BE_SEND.equals(aDo.getStatus())) {
-            aDo.setStatus(SaleOrderStatusEnum.SENDING);
-            aDo.setWarehouseOutId(outDO.getId());
-            updateById(aDo);
-        } else {
-            throw new ServiceException("订单状态错误,待发货的订单才能发货");
+        aDo.setStatus(SaleOrderSendStatusEnum.SENDING);
+        aDo.setWarehouseOutId(outDO.getId());
+        orderSendManager.updateById(aDo);
+    }
+
+    @Override
+    public OrderSendDO getSendOrderDetail(String id) {
+        OrderSendDO byId = orderSendManager.getById(id);
+        OrderDO aDo = getById(byId.getOrderId());
+        List<OrderItemDO> dos = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderSendId, id));
+        List<OrderItemVO> bean = BeanUtils.toBean(dos, OrderItemVO.class);
+        for (OrderItemVO itemDO : bean) {
+            itemDO.setProductVO(productManager.getById(itemDO.getProductId()));
+            itemDO.setGoodsVO(BeanUtil.copyProperties(goodsMapper.selectById(itemDO.getGoodsId()), GoodsVO.class));
+            itemDO.setUseAbleStock(productStockManager.getById(itemDO.getProductStockId()).getUsableStock());
         }
+        byId.setOrderVo(aDo);
+        byId.setOrderItemVOS(bean);
+        return byId;
     }
 }
 

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

@@ -96,7 +96,7 @@ public class OrderReturnManagerImpl extends BaseServiceImpl<OrderReturnMapper, O
         }
 
         //更改订单的状态
-        aDo.setStatus(SaleOrderStatusEnum.AFTER_SALE);
+        aDo.setStatus(SaleOrderStatusEnum.SALE_AFTER_ING);
         orderManager.updateById(aDo);
         //新增售后订单主题
         OrderReturnDO returnDO = BeanUtil.copyProperties(orderReturnDTO, OrderReturnDO.class);

+ 49 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderSendManagerImpl.java

@@ -0,0 +1,49 @@
+package com.hys.app.service.erp.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.converter.erp.OrderConverter;
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.BeanUtils;
+import com.hys.app.mapper.erp.OrderMapper;
+import com.hys.app.mapper.erp.OrderSendMapper;
+import com.hys.app.mapper.erp.WarehouseOutMapper;
+import com.hys.app.mapper.goods.GoodsMapper;
+import com.hys.app.model.erp.dos.*;
+import com.hys.app.model.erp.dto.OrderDTO;
+import com.hys.app.model.erp.dto.OrderItemDTO;
+import com.hys.app.model.erp.dto.OrderQueryParams;
+import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
+import com.hys.app.model.erp.enums.*;
+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.entity.AddressDTO;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 订单业务层实现
+ *
+ * @author 张崧
+ * 2024-01-24 15:58:31
+ */
+@Service
+@AllArgsConstructor
+public class OrderSendManagerImpl extends BaseServiceImpl<OrderSendMapper, OrderSendDO> implements OrderSendManager {
+
+}
+

+ 12 - 20
module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java

@@ -105,31 +105,20 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void initStockByWarehouse(Long warehouseId) {
-        Long lastId = null;
-        while (true) {
-            List<ProductDO> productList = productManager.lambdaQuery().gt(ProductDO::getId, lastId).last("limit 1000").list();
-            if (productList.isEmpty()) {
-                break;
-            }
-            lastId = productList.get(productList.size() - 1).getId();
-
-            List<ProductStockDO> stockList = productList.stream()
-                    .map(productDO -> new ProductStockDO(warehouseId, productDO.getGoodsId(), productDO.getId(), 0))
-                    .collect(Collectors.toList());
-            super.saveBatch(stockList);
+        List<ProductDO> list = productManager.list();
+        List<ProductStockDO> arrayList = new ArrayList<>();
+        for (ProductDO aDo : list) {
+            ProductStockDO aDo1 = new ProductStockDO();
+            aDo1.setWarehouseId(warehouseId);
+            aDo1.setGoodsId(aDo.getGoodsId());
+            aDo1.setProductId(aDo.getId());
+            arrayList.add(aDo1);
         }
+        saveBatch(arrayList);
     }
 
     @Override
     public void deleteStockByProduct(List<Long> productIds) {
-        // 目前注释掉下面的代码,因为产品被删除后,暂时先不需要删除该产品的库存,因为比如入库单退货时要扣批次的库存,批次库存和产品库存应该是保持一致的
-
-
-//        if(productIds.isEmpty()){
-//            return;
-//        }
-
-//        lambdaUpdate().in(ProductStockDO::getProductId, productIds).remove();
     }
 
 
@@ -230,6 +219,9 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     public void intStock(List<ProductDO> bean) {
         List<ProductStockDO> arrayList = new ArrayList<>();
         List<WarehouseDO> list = warehouseManager.list();
+        if (CollUtil.isEmpty(list)) {
+            throw new ServiceException("清先创建仓库");
+        }
         for (ProductDO aDo : bean) {
             for (WarehouseDO warehouseDO : list) {
                 ProductStockDO aDo1 = new ProductStockDO();

+ 184 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/ScanCodeManagerImpl.java

@@ -0,0 +1,184 @@
+package com.hys.app.service.erp.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.EnumUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.google.common.collect.Lists;
+import com.hys.app.converter.erp.EnterpriseConverter;
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.BeanUtils;
+import com.hys.app.mapper.erp.EnterpriseMapper;
+import com.hys.app.mapper.erp.ProductStockMapper;
+import com.hys.app.model.erp.dos.*;
+import com.hys.app.model.erp.dto.EnterpriseDTO;
+import com.hys.app.model.erp.dto.EnterpriseQueryParams;
+import com.hys.app.model.erp.enums.ScanFormCodeTypeEnum;
+import com.hys.app.model.erp.vo.EnterpriseVO;
+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.service.erp.*;
+import com.hys.app.util.ValidateUtil;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 企业业务层实现
+ *
+ * @author 张崧
+ * 2024-03-25 15:44:10
+ */
+@Service
+@AllArgsConstructor
+public class ScanCodeManagerImpl extends BaseServiceImpl<ProductStockMapper, ProductStockDO> implements ScanCodeManager {
+
+    private OrderSendManager orderSendManager;
+    private OrderItemManager orderItemManager;
+    private OrderManager orderManager;
+    private WarehouseOutManager warehouseOutManager;
+    private WarehouseOutItemManager warehouseOutItemManager;
+    private StockDamageReportManager stockDamageReportManager;
+    private StockDamageReportProductManager stockDamageReportProductManager;
+    private StockInventoryManager stockInventoryManager;
+    private StockInventoryProductManager stockInventoryProductManager;
+    private OrderReturnManager orderReturnManager;
+    private OrderReturnItemManager orderReturnItemManager;
+    private StockTransferManager stockTransferManager;
+    private StockTransferProductManager stockTransferProductManager;
+    private WarehouseEntryManager warehouseEntryManager;
+    private WarehouseEntryProductManager warehouseEntryProductManager;
+    private ProductStockManager productStockManager;
+    private GoodsManager goodsManager;
+    private ProductManager productManager;
+
+
+    @Override
+    public Map<String, Object> getListByScan( String orderCode) {
+        Map<String, Object> resMap = new HashMap<>();
+        List<ProductStockVO> list = new ArrayList<>();
+
+        //自定义的订单号长度都是8为以上,前面8为使我们自定义的用来匹配
+        if (orderCode.length() < 8) {
+            return list;
+        }
+        String substring = orderCode.substring(0, 8);
+        if (!EnumUtil.contains(ScanFormCodeTypeEnum.class, substring)) {
+            return list;
+        }
+        //发货单
+        if (ScanFormCodeTypeEnum.RYKS_FHD.getValue().equals(substring)) {
+            OrderSendDO sendDO = orderSendManager.getOne(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getSn, orderCode));
+            if (ObjectUtil.isNull(sendDO)) {
+                return list;
+            }
+            List<OrderItemDO> orderItemList = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderSendId, sendDO.getId()));
+            List<Long> collect = orderItemList.stream().map(OrderItemDO::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",sendDO);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_FHD.getValue());
+        }
+        //订单
+        if (ScanFormCodeTypeEnum.RYKS_DDD.getValue().equals(substring)) {
+            OrderDO orderDo = orderManager.getOne(new LambdaQueryWrapper<OrderDO>().eq(OrderDO::getSn, orderCode));
+            if (ObjectUtil.isNull(orderDo)) {
+                return list;
+            }
+            List<OrderItemDO> orderItemList = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDo.getId()));
+            List<Long> collect = orderItemList.stream().map(OrderItemDO::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",orderDo);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_DDD.getValue());
+        }
+        //入库单
+        if (ScanFormCodeTypeEnum.RYKS_RKD.getValue().equals(substring)) {
+            WarehouseOutDO outDo = warehouseOutManager.getOne(new LambdaQueryWrapper<WarehouseOutDO>().eq(WarehouseOutDO::getSn, orderCode));
+            if (ObjectUtil.isNull(outDo)) {
+                return list;
+            }
+            List<WarehouseOutItemDO> orderItemList = warehouseOutItemManager.list(new LambdaQueryWrapper<WarehouseOutItemDO>().eq(WarehouseOutItemDO::getWarehouseOutId, outDo.getId()));
+            List<Long> collect = orderItemList.stream().map(WarehouseOutItemDO::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",outDo);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_RKD.getValue());
+        }
+        //盘点
+        if (ScanFormCodeTypeEnum.RYKS_PDD.getValue().equals(substring)) {
+            StockInventory stockDo = stockInventoryManager.getOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getSn, orderCode));
+            if (ObjectUtil.isNull(stockDo)) {
+                return list;
+            }
+            List<StockInventoryProduct> orderItemList = stockInventoryProductManager.list(new LambdaQueryWrapper<StockInventoryProduct>().eq(StockInventoryProduct::getInventoryId, stockDo.getId()));
+            List<Long> collect = orderItemList.stream().map(StockInventoryProduct::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",stockDo);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_PDD.getValue());
+        }
+        //退货单
+        if (ScanFormCodeTypeEnum.RYKS_THD.getValue().equals(substring)) {
+            OrderReturnDO returnDo = orderReturnManager.getOne(new LambdaQueryWrapper<OrderReturnDO>().eq(OrderReturnDO::getSn, orderCode));
+            if (ObjectUtil.isNull(returnDo)) {
+                return list;
+            }
+            List<OrderReturnItemDO> orderItemList = orderReturnItemManager.list(new LambdaQueryWrapper<OrderReturnItemDO>().eq(OrderReturnItemDO::getOrderReturnId, returnDo.getId()));
+            List<Long> collect = orderItemList.stream().map(OrderReturnItemDO::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",returnDo);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_THD.getValue());
+        }
+
+        if (ScanFormCodeTypeEnum.RYKS_DBD.getValue().equals(substring)) {
+            StockTransferDO transDo = stockTransferManager.getOne(new LambdaQueryWrapper<StockTransferDO>().eq(StockTransferDO::getSn, orderCode));
+            if (ObjectUtil.isNull(transDo)) {
+                return list;
+            }
+            List<StockTransferProductDO> orderItemList = stockTransferProductManager.list(new LambdaQueryWrapper<StockTransferProductDO>().eq(StockTransferProductDO::getStockTransferId, transDo.getId()));
+            List<Long> collect = orderItemList.stream().map(StockTransferProductDO::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",transDo);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_DBD.getValue());
+        }
+
+        List<WarehouseEntryDO> list1 = warehouseEntryManager.list();
+
+        //入库单
+        if (ScanFormCodeTypeEnum.RYKS_CKD.getValue().equals(substring)) {
+            WarehouseEntryDO entryDo = warehouseEntryManager.getOne(new LambdaQueryWrapper<WarehouseEntryDO>().eq(WarehouseEntryDO::getSn, orderCode));
+            if (ObjectUtil.isNull(entryDo)) {
+                return list;
+            }
+            List<WarehouseEntryProductDO> orderItemList = warehouseEntryProductManager.list(new LambdaQueryWrapper<WarehouseEntryProductDO>().eq(WarehouseEntryProductDO::getWarehouseEntryId, entryDo.getId()));
+            List<Long> collect = orderItemList.stream().map(WarehouseEntryProductDO::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",entryDo);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_CKD.getValue());
+        }
+
+
+        if (ScanFormCodeTypeEnum.RYKS_BSD.getValue().equals(substring)) {
+            StockDamageReport damageDo = stockDamageReportManager.getOne(new LambdaQueryWrapper<StockDamageReport>().eq(StockDamageReport::getSn, orderCode));
+            if (ObjectUtil.isNull(damageDo)) {
+                return list;
+            }
+            List<StockDamageReportProduct> orderItemList = stockDamageReportProductManager.list(new LambdaQueryWrapper<StockDamageReportProduct>().eq(StockDamageReportProduct::getReportId, damageDo.getId()));
+            List<Long> collect = orderItemList.stream().map(StockDamageReportProduct::getProductStockId).collect(Collectors.toList());
+            list = BeanUtils.toBean(productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect)), ProductStockVO.class);
+            resMap.put("order",damageDo);
+            resMap.put("orderType",ScanFormCodeTypeEnum.RYKS_BSD.getValue());
+        }
+        for (ProductStockVO vo : list) {
+            vo.setGoodVO(BeanUtil.copyProperties(goodsManager.getById(vo.getGoodsId()), GoodsVO.class));
+            vo.setProductVO(BeanUtil.copyProperties(productManager.getById(vo.getProductId()), ProductVO.class));
+        }
+        resMap.put("list",list);
+        return resMap;
+    }
+}
+

+ 66 - 27
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaManagerImpl.java

@@ -1,39 +1,35 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.interfaces.MPJBaseJoin;
+import com.hys.app.converter.erp.ProductStockConverter;
 import com.hys.app.converter.erp.WarehouseAreaConverter;
 import com.hys.app.converter.erp.WarehouseOutItemConverter;
+import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
 import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.mapper.erp.WarehouseAreaMapper;
 import com.hys.app.mapper.erp.WarehouseOutItemMapper;
-import com.hys.app.model.erp.dos.WarehouseAreaDO;
-import com.hys.app.model.erp.dos.WarehouseDO;
-import com.hys.app.model.erp.dos.WarehouseOutItemDO;
+import com.hys.app.model.erp.dos.*;
 import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
 import com.hys.app.model.erp.dto.WarehouseDTO;
 import com.hys.app.model.erp.dto.WarehouseOutItemQueryParams;
-import com.hys.app.model.erp.vo.WarehouseAreaVO;
-import com.hys.app.model.erp.vo.WarehouseOutItemVO;
-import com.hys.app.model.erp.vo.WarehouseVO;
-import com.hys.app.service.erp.WarehouseAreaManager;
-import com.hys.app.service.erp.WarehouseManager;
-import com.hys.app.service.erp.WarehouseOutItemManager;
+import com.hys.app.model.erp.vo.*;
+import com.hys.app.service.erp.*;
+import lombok.AllArgsConstructor;
 import org.apache.ibatis.session.ResultHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.Serializable;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 出库单商品明细业务层实现
@@ -42,23 +38,26 @@ import java.util.Objects;
  * @since 2023-12-07 17:06:32
  */
 @Service
+@AllArgsConstructor
 public class WarehouseAreaManagerImpl extends BaseServiceImpl<WarehouseAreaMapper, WarehouseAreaDO> implements WarehouseAreaManager {
 
-    @Autowired
     private WarehouseAreaConverter converter;
-
-    @Autowired
     private WarehouseManager warehouseManager;
+    private ProductStockManager productStockManager;
+    private ProductStockConverter productConverter;
+    private ProductManager productManager;
+    private GoodsManager goodsManager;
+    private AreaStockManager areaStockManager;
+
 
     @Override
     public WebPage<WarehouseAreaVO> list(WarehouseAreaQueryParams queryParams) {
         WebPage<WarehouseAreaDO> webPage = baseMapper.selectPage(queryParams);
-        WebPage<WarehouseAreaVO> webPage1=converter.convert(webPage);
-        for(WarehouseAreaVO item:webPage1.getData()){
-            WarehouseVO warehouseVO=warehouseManager.getDetail(item.getWarehouseId());
+        WebPage<WarehouseAreaVO> webPage1 = converter.convert(webPage);
+        for (WarehouseAreaVO item : webPage1.getData()) {
+            WarehouseVO warehouseVO = warehouseManager.getDetail(item.getWarehouseId());
             item.setWarehouse(warehouseVO);
         }
-
         return webPage1;
     }
 
@@ -68,7 +67,7 @@ public class WarehouseAreaManagerImpl extends BaseServiceImpl<WarehouseAreaMappe
         WarehouseAreaDO one = this.baseMapper.selectOne(new LambdaQueryWrapper<WarehouseAreaDO>()
                 .eq(WarehouseAreaDO::getWarehouseId, warehouseAreaDO.getWarehouseId())
                 .eq(WarehouseAreaDO::getCode, warehouseAreaDO.getCode()));
-        if (ObjectUtil.isNotNull(one)){
+        if (ObjectUtil.isNotNull(one)) {
             throw new ServiceException("该仓库下库位编号已存在");
         }
         save(warehouseAreaDO);
@@ -78,22 +77,62 @@ public class WarehouseAreaManagerImpl extends BaseServiceImpl<WarehouseAreaMappe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void edit(WarehouseAreaDO warehouseAreaDO) {
-        if (warehouseAreaDO.getId()<=0) {
+        if (warehouseAreaDO.getId() <= 0) {
             throw new ServiceException("库位信息更新失败,库位信息不存在");
         }
-
         updateById(warehouseAreaDO);
     }
 
+    @Override
+    public Page<ProductStockVO> goodNotAreaList(BaseQueryParam baseQueryParam, Long warehouseId) {
+        Page<ProductStockDO> page = productStockManager.page(new Page<>( baseQueryParam.getPageNo(),baseQueryParam.getPageSize()),
+                new LambdaQueryWrapper<ProductStockDO>().eq(ProductStockDO::getWarehouseId, warehouseId));
+        Page<ProductStockVO> convert = productConverter.convert(page);
+        for (ProductStockVO record : convert.getRecords()) {
+            record.setGoodVO(BeanUtil.copyProperties(goodsManager.getById(record.getGoodsId()), GoodsVO.class));
+            record.setProductVO(BeanUtil.copyProperties(productManager.getById(record.getProductId()), ProductVO.class));
+        }
+        return convert;
+    }
+
+    @Override
+    public List<WarehouseAreaDO> getAreaByWarehouse(Long warehouseId) {
+        return list(new LambdaQueryWrapper<WarehouseAreaDO>().eq(WarehouseAreaDO::getWarehouseId, warehouseId));
+    }
+
+    @Override
+    public void bindAreaStock(Long warehouseId, Long warehouseAreaId, List<Long> stockIdList) {
+        areaStockManager.remove(new LambdaQueryWrapper<AreaStock>()
+                .eq(AreaStock::getWarehouseAreaId, warehouseAreaId)
+                .eq(AreaStock::getWarehouseAreaId, warehouseAreaId)
+                .in(AreaStock::getProductStockId, stockIdList));
+        List<AreaStock> list = new ArrayList<>();
+        for (Long aLong : stockIdList) {
+            AreaStock stock = new AreaStock();
+            stock.setProductStockId(aLong);
+            stock.setWarehouseId(warehouseId);
+            stock.setWarehouseAreaId(warehouseAreaId);
+            list.add(stock);
+        }
+        areaStockManager.saveBatch(list);
+    }
+
 
     @Override
     public WarehouseAreaVO getDetail(Long id) {
-        WarehouseAreaVO vo=converter.convert(getById(id));
-        if(!Objects.isNull(vo)){
-            WarehouseVO warehouseVO=warehouseManager.getDetail(vo.getWarehouseId());
+        WarehouseAreaVO vo = converter.convert(getById(id));
+        if (!Objects.isNull(vo)) {
+            WarehouseVO warehouseVO = warehouseManager.getDetail(vo.getWarehouseId());
             vo.setWarehouse(warehouseVO);
         }
-
+        List<AreaStock> list = areaStockManager.list(new LambdaQueryWrapper<AreaStock>().eq(AreaStock::getWarehouseAreaId, id));
+        for (AreaStock stock : list) {
+            ProductStockDO byId = productStockManager.getById(stock.getProductStockId());
+            stock.setProductVO(productManager.getById(byId.getGoodsId()));
+            stock.setGoodsVO(goodsManager.getById(byId.getProductId()));
+            stock.setProductStockVO(byId);
+        }
+        vo.setAreaStockVO(list);
         return vo;
     }
 

+ 35 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaTypeManagerImpl.java

@@ -0,0 +1,35 @@
+package com.hys.app.service.erp.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.hys.app.converter.erp.WarehouseAreaConverter;
+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.mapper.erp.WarehouseAreaMapper;
+import com.hys.app.mapper.erp.WarehouseAreaTypeMapper;
+import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dos.WarehouseAreaTypeDO;
+import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
+import com.hys.app.model.erp.vo.WarehouseAreaVO;
+import com.hys.app.model.erp.vo.WarehouseVO;
+import com.hys.app.service.erp.WarehouseAreaManager;
+import com.hys.app.service.erp.WarehouseAreaTypeManager;
+import com.hys.app.service.erp.WarehouseManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Objects;
+
+/**
+ * 出库单商品明细业务层实现
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+@Service
+public class WarehouseAreaTypeManagerImpl extends BaseServiceImpl<WarehouseAreaTypeMapper, WarehouseAreaTypeDO> implements WarehouseAreaTypeManager {
+
+}
+

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

@@ -1,5 +1,8 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.converter.erp.WarehouseConverter;
 import com.hys.app.framework.database.WebPage;
@@ -23,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import static com.hys.app.framework.util.CollectionUtils.convertList;
 
@@ -38,38 +42,15 @@ public class WarehouseManagerImpl extends BaseServiceImpl<WarehouseMapper, Wareh
     @Autowired
     private WarehouseConverter converter;
 
-    @Autowired
-    private DeptManager deptManager;
-
     @Autowired
     private ProductStockManager productStockManager;
 
-    @Autowired
-    private WarehouseEntryManager warehouseEntryManager;
-
-    @Autowired
-    private WarehouseOutManager warehouseOutManager;
-
-    @Autowired
-    private StockTransferManager stockTransferManager;
-
-    @Autowired
-    private AdminUserManager adminUserManager;
-
     @Autowired
     private GoodsManager goodsManager;
 
     @Override
     public WebPage<WarehouseVO> list(WarehouseQueryParams queryParams) {
-        WebPage<WarehouseDO> webPage = baseMapper.selectPage(queryParams);
-
-        List<WarehouseDO> data = webPage.getData();
-
-
-        Map<Long, String> deptNameMap = deptManager.listAndConvertMap(convertList(data, WarehouseDO::getDeptId), DeptDO::getId, DeptDO::getName);
-        Map<Long, String> adminNameMap = adminUserManager.getNameMapByIds(convertList(data, WarehouseDO::getAdminId));
-
-        return converter.combination(webPage, deptNameMap, adminNameMap);
+        return converter.convert(baseMapper.selectPage(queryParams));
     }
 
     @Override
@@ -98,39 +79,29 @@ public class WarehouseManagerImpl extends BaseServiceImpl<WarehouseMapper, Wareh
     public void delete(Long id) {
         //查询所有上架的商品
         List<GoodsDO> list = goodsManager.list(new LambdaQueryWrapper<GoodsDO>().eq(GoodsDO::getMarketEnable, true));
+        List<Long> collect = list.stream().map(GoodsDO::getId).collect(Collectors.toList());
 
-//        productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().eq(ProductStockDO::getWarehouseId,id).in(list.stream().map(GoodsDO::getId)));
-
-        if (warehouseEntryManager.countByWarehouseId(id) > 0) {
+        List<ProductStockDO> doList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ProductStockDO::getWarehouseId, id)
+                .in(ProductStockDO::getGoodsId, collect).gt(ProductStockDO::getUsableStock, 0));
+        if (CollUtil.isNotEmpty(doList)) {
             throw new ServiceException("该仓库已关联入库单,不能进行删除操作");
         }
-        if (warehouseOutManager.countByWarehouseId(id) > 0) {
-            throw new ServiceException("该仓库已关联出库单,不能进行删除操作");
-        }
-        if (stockTransferManager.countByWarehouseId(id) > 0) {
-            throw new ServiceException("该仓库已关联调拨单,不能进行删除操作");
-        }
-
         removeById(id);
         productStockManager.deleteStockByWarehouse(id);
     }
 
     @Override
     public List<WarehouseVO> listAll(Long deptId) {
-        List<WarehouseDO> list = baseMapper.listAll(deptId);
+        List<WarehouseDO> list = baseMapper.selectList();
         return converter.convert(list);
     }
 
-    @Override
-    public long countByDeptId(Long deptId) {
-        return lambdaQuery().eq(WarehouseDO::getDeptId, deptId).count();
-    }
-
     private void check(WarehouseDTO warehouseDTO) {
-        if (ValidateUtil.checkRepeat(baseMapper, WarehouseDO::getSn, warehouseDTO.getSn(), WarehouseDO::getId, warehouseDTO.getId())) {
+        LambdaQueryWrapper<WarehouseDO> wrapper = new LambdaQueryWrapper<WarehouseDO>().ne(ObjectUtil.isNotNull(warehouseDTO.getId()), WarehouseDO::getId, warehouseDTO.getId()).eq(WarehouseDO::getSn, warehouseDTO.getSn());
+        if (count(wrapper) > 1) {
             throw new ServiceException("仓库编号已存在");
         }
     }
-
 }
 

+ 23 - 25
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java

@@ -4,12 +4,14 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.ExcelWriter;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.converter.erp.ProductStockConverter;
 import com.hys.app.converter.erp.WarehouseOutConverter;
 import com.hys.app.converter.erp.WarehouseOutItemConverter;
 import com.hys.app.framework.database.BaseQueryParam;
@@ -74,7 +76,9 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
     private ProductStockManager productStockManager;
     private GoodsMapper goodsMapper;
     private ProductManager productManager;
-
+    private ProductStockConverter productStockConverter;
+    private WarehouseManager warehouseManager;
+    private AreaStockManager areaStockManager;
 
     @Override
     public WebPage<WarehouseOutVO> list(WarehouseOutQueryParams queryParams) {
@@ -153,7 +157,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         List<Long> goodIdlist = itemList.stream().map(WarehouseOutItemDO::getProductId).collect(Collectors.toList());
 
         //所有的商品信息
-        List<ProductDO> list = productManager.list(new LambdaQueryWrapper<ProductDO>().in(ProductDO::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::getProductId, goodIdlist));
         for (WarehouseOutProductDTO dto : productList) {
@@ -161,7 +165,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
             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));
+            dto.setGoodsVO(BeanUtil.copyProperties(goodsDO, GoodsVO.class));
         }
         outVO.setProductList(productList);
         return outVO;
@@ -318,17 +322,17 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
 
 
     @Override
-    public Page<ProductVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam,String orderType) {
+    public Page<ProductStockVO> getGoodByWarehouse(Long warehouseId, BaseQueryParam queryParam, String orderType, List<Long> warehouseIds) {
         //找出所有上架的商品
         LambdaQueryWrapper<GoodsDO> wrapper = new LambdaQueryWrapper<GoodsDO>().eq(GoodsDO::getMarketEnable, true);
 
         if (StrUtil.isNotBlank(orderType)) {
             switch (orderType) {
                 case "TO_B":
-                    wrapper.eq(GoodsDO::getHireOrSail,"sail");
+                    wrapper.eq(GoodsDO::getHireOrSail, "sail");
                     break;
                 case "TO_C":
-                    wrapper.eq(GoodsDO::getHireOrSail,"hire");
+                    wrapper.eq(GoodsDO::getHireOrSail, "hire");
                     break;
                 default:
                     break;
@@ -336,30 +340,24 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         }
         List<GoodsDO> list = goodsMapper.selectList(wrapper);
         List<Long> goodsId = list.stream().map(GoodsDO::getId).collect(Collectors.toList());
-        if (CollUtil.isEmpty(list)){
+        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)
+        Page<ProductStockDO> page = new Page<>(queryParam.getPageNo(), queryParam.getPageSize());
+        Page<ProductStockDO> page1 = productStockManager.page(page, new LambdaQueryWrapper<ProductStockDO>()
+                .eq(ObjectUtil.isNotNull(warehouseId), ProductStockDO::getWarehouseId, warehouseId)
+                .in(CollUtil.isNotEmpty(warehouseIds), ProductStockDO::getWarehouseId, warehouseIds)
                 .in(ProductStockDO::getGoodsId, goodsId)
                 .gt(ProductStockDO::getUsableStock, 0));
-        List<Long> collect = page1.getRecords().stream().map(ProductStockDO::getProductId).collect(Collectors.toList());
-        if (CollectionUtil.isNotEmpty(collect)) {
-            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<ProductVO> pageVo = new Page<>(queryParam.getPageNo(), queryParam.getPageNo());
-            pageVo.setPages(page1.getPages());
-            pageVo.setSize(page1.getSize());
-            pageVo.setTotal(page1.getTotal());
-            pageVo.setRecords(productVOS);
-            return pageVo;
+        Page<ProductStockVO> convert = productStockConverter.convert(page1);
+        for (ProductStockVO record : convert.getRecords()) {
+            record.setGoodVO(BeanUtil.copyProperties(goodsMapper.selectById(record.getGoodsId()),GoodsVO.class));
+            record.setProductVO(BeanUtil.copyProperties(productManager.getById(record.getProductId()),ProductVO.class));
+            record.setWarehouseVO(warehouseManager.getById(record.getWarehouseId()));
+            List<AreaStock> areaStockList = areaStockManager.list(new LambdaQueryWrapper<AreaStock>().eq(AreaStock::getProductStockId, record.getId()));
+            record.setAreaStockList(areaStockList);
         }
-        return new Page<>();
+        return convert;
     }
 }
 

+ 2 - 1
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java

@@ -1,5 +1,6 @@
 package com.hys.app.service.kuaidiniao;
 
+import com.hys.app.service.kuaidiniao.entity.AddressDTO;
 import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
 import com.hys.app.service.kuaidiniao.entity.ReturnBackBase;
 import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;
@@ -21,5 +22,5 @@ public interface KuaiDiNiaoService {
      *
      * @param preOrderModel
      */
-    String kdShip(PreOrderModel preOrderModel, Long orderId);
+    String kdShip(PreOrderModel preOrderModel, Long orderId, AddressDTO addressDTO);
 }

+ 48 - 23
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -15,7 +15,11 @@ 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.model.erp.dos.OrderDO;
+import com.hys.app.model.erp.dos.OrderSendDO;
+import com.hys.app.model.erp.enums.SaleOrderSendStatusEnum;
+import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
 import com.hys.app.service.erp.OrderManager;
+import com.hys.app.service.erp.OrderSendManager;
 import com.hys.app.service.kuaidiniao.entity.*;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,22 +50,25 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     private String url;
 
     @Autowired
-    private OrderManager orderManager;
+    private OrderSendManager orderSendManager;
 
     @Autowired
     private OrderConverter converter;
 
 
     @Override
-    public String kdShip(PreOrderModel preOrderModel, Long orderId) {
+    public String kdShip(PreOrderModel preOrderModel, Long orderId,AddressDTO addressDTO) {
         fillParam(preOrderModel);
         String kdnCode = sendUrl(JSONUtil.toJsonStr(preOrderModel), KdConstants.preOrder);
         if (StrUtil.isNotEmpty(kdnCode)) {
             //如果快递鸟下单成功保存 快递信息
-            OrderDO aDo = orderManager.getById(orderId);
+            OrderSendDO aDo = orderSendManager.getById(orderId);
             converter.copyProperties(aDo, preOrderModel, preOrderModel.getReceiver(), preOrderModel.getSender());
+            aDo.setGoodsList(preOrderModel.getGoodsList());
             aDo.setKdnOrderCode(kdnCode);
-            orderManager.updateById(aDo);
+            aDo.setSendAddress(addressDTO.getSendAddress());
+            aDo.setReceiveAddress(addressDTO.getReceiveAddress());
+            orderSendManager.updateById(aDo);
         }
         return kdnCode;
     }
@@ -75,6 +82,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     private String sendUrl(String dataJson, String interfaceType) {
         try {
             String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(dataJson + apiKey)), "UTF-8");
+            System.out.println("--------------------------------------"+design);
             //拼接参数
             String param = "interfaceType=" + interfaceType + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
             //发请求
@@ -115,7 +123,6 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         preOrderModel.setOrderName(AdminUserContext.getAdminUserName());
         preOrderModel.setOrderPhone("13127911751");
 
-
     }
 
     /**
@@ -137,46 +144,61 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         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("验签失败");
+        OrderSendDO aDo = orderSendManager.getById(Long.valueOf(map.get("orderCode").toString()));
+        if (ObjectUtil.isNull(aDo)){
+            base.setReason("验签失败");
             base.setResultCode(1002);
             return base;
         }
-
-
-        switch (map.get("interfaceType").toString()) {
-            case "100":
-
+//        if (!checkDesign(aDo, returnBackBase.getDataSign())) {
+//            base.setRequestData("验签失败");
+//            base.setResultCode(1002);
+//            return base;
+//        }
+
+        switch (Integer.valueOf(map.get("orderStatus").toString())) {
+            case 100:
+                aDo.setCreateOrderSuccess(map);
                 break;
-            case "201":
+            case 201:
+                aDo.setUserTakeOrder(map);
                 break;
-            case "202":
+            case 202:
+                aDo.setUserArrives(map);
                 break;
-            case "300":
+            case 300:
+                aDo.setUserSending(map);
                 break;
-            case "401":
+            case 401:
+                aDo.setSignIn(map);
+                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE);
                 break;
-            case "402":
+            case 402:
+                aDo.setSignIn(map);
+                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE);
                 break;
-            case "500":
+            case 500:
+                aDo.setCancelOrderKdn(map);
                 break;
-            case "600":
-                ReCreateOrderFail reCreateOrderFail = JSON.parseObject(returnBackBase.getRequestData(), ReCreateOrderFail.class);
+            case 600:
+                aDo.setCreateOrderFail(map);
                 break;
-            case "206":
+            case 206:
+                aDo.setOrderFee(map);
                 break;
             default:
                 base.setResultCode(1002);
                 base.setReason("内部业务异常,麻烦尽快通知商家,tel:13127911751");
         }
+        orderSendManager.updateById(aDo);
         return base;
     }
 
-    private Boolean checkDesign(OrderDO aDo, String dataSign) {
+    private Boolean checkDesign(OrderSendDO aDo, String dataSign) {
         try {
             PreOrderModel model = new PreOrderModel();
             converter.copyProperties(model, aDo);
+            model.setGoodsList(aDo.getGoodsList());
             String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(model) + apiKey)), "UTF-8");
             if (dataSign.equals(design)) {
                 return true;
@@ -186,4 +208,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
             return false;
         }
     }
+
+
+
 }

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

@@ -6,6 +6,7 @@ import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.Valid;
+import javax.validation.constraints.Max;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
@@ -60,6 +61,7 @@ public class PreOrderModel {
     private Integer goodsNum;
 
     @ApiModelProperty(value = "物品总重量单位kg")
+    @Max(50)
     private Double totalWeight;
 
     @ApiModelProperty(value = "物品总体积,单位立方厘米")
@@ -99,4 +101,8 @@ public class PreOrderModel {
 
     @ApiModelProperty(value = "备注")
     private String remark;
+
+    private String sendAddress;
+
+    private String receiveAddress;
 }

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

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

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

@@ -0,0 +1,88 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 推送下单失败状态
+ */
+@Data
+public class ReturnCreateOrderSuccess {
+    @ApiModelProperty(value = "快递鸟订单号")
+    private String kdnOrderCode;
+
+    @ApiModelProperty(value = "商家订单号")
+    private String orderCode;
+
+    @ApiModelProperty(value = "即时配物流单号")
+    private String channelOrderCode;
+
+    @ApiModelProperty(value = "KDN订单状态 固定为100")
+    private Integer orderStatus;
+
+    @ApiModelProperty(value = "取件码")
+    private String pickupCode;
+
+    @ApiModelProperty(value = "总距离单位米")
+    private Double totalDistance;
+
+    @ApiModelProperty(value = "总费用,单位:元(常规配送费+加价费+拒收扣费+特殊时段费+增值费用总和—优惠总费用)")
+    private Double totalAmount;
+
+    @ApiModelProperty(value = "实际支付的费用,单位:元(总金额-优惠费用-限时补贴)")
+    private Double actualTotalFee;
+
+    @ApiModelProperty(value = "限时补贴的费用,单位:元")
+    private Double dynamicSubsidyAmount;
+
+    @ApiModelProperty(value = "起步价,单位:元")
+    private Double startAmount;
+
+    @ApiModelProperty(value = "超重费,单位:元;默认为0时,无需处理。非0,前端展示(6KG,超重3KG)")
+    private Double continuousWeightAmount;
+
+    private List<Object> continuousWeightInfoList;
+
+    @ApiModelProperty(value = "超距费用")
+    private Double continuousDistanceAmount;
+
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<Object> continuousDistanceInfoList;
+
+    @ApiModelProperty(value = "时段加价费,单位:元;默认为0时,无需处理。非0,前端展示")
+    private Double specialTimeAmount;
+
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<Object> specialTimeInfoList;
+
+    @ApiModelProperty(value = "费用")
+    private Double additionAmount;
+
+    @ApiModelProperty(value = "加价费用明细")
+    private String additionDesc;
+
+    @ApiModelProperty(value = "拒收费用")
+    private Double rejectFee;
+
+    @ApiModelProperty(value = "优惠金额")
+    private Double discountFee;
+
+    @ApiModelProperty(value = "优惠明细JSON数据")
+    private String discountInfoList;
+
+    @ApiModelProperty(value = "增值费用总金额")
+    private Double incrementFee;
+
+    @ApiModelProperty(value = "增值费用明细JSON数据")
+    private String incrementFeeInfoList;
+
+    @ApiModelProperty(value = "备注说明")
+    private String  remark;
+
+    @ApiModelProperty(value = "请求时间毫秒级时间戳")
+    private Long requestTime;
+}

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

@@ -20,13 +20,9 @@ public class resReturnBackBase {
     private String reason = "接收成功";
 
     //数据签名
-    private LocalDateTime responseTime = LocalDateTime.now();
-
-    //应用级参数,内容为JSON格式
-    @JsonFormat(pattern = "yyyy-MM-dd HH:" +
-            "mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private String requestData;
+    private LocalDateTime responseTime = LocalDateTime.now();
 
     //快递鸟单号
     private String kdnOrderCode;

+ 0 - 3
module-erp/src/main/java/com/hys/app/service/system/impl/DeptManagerImpl.java

@@ -91,9 +91,6 @@ public class DeptManagerImpl extends BaseServiceImpl<DeptMapper, DeptDO> impleme
         if(count > 0){
             throw new ServiceException("部门下存在用户,无法删除");
         }
-        if(warehouseManager.countByDeptId(id) > 0){
-            throw new ServiceException("部门下存在仓库,无法删除");
-        }
         // 删除部门
         deptMapper.deleteById(id);
         cache.remove(CachePrefix.DEPT_CHILDREN_ID_LIST.getPrefix());

+ 0 - 2
server/src/main/java/com/hys/app/Swagger2.java

@@ -4,8 +4,6 @@ import com.hys.app.framework.swagger.AbstractSwagger2;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Profile;
-import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import springfox.documentation.builders.ApiInfoBuilder;
 import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.service.ApiInfo;