diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java index 542635e18..d54a35e6d 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/ModuleNameConstant.java @@ -135,4 +135,9 @@ public interface ModuleNameConstant { */ String LOGPM_FACTORY_DATA_OPPEIN_NAME = "logpm-factory-data-oppein" + DEVAUTH; + /** + * 商家模块 + */ + String LOGPM_BUSINESS_NAME = "logpm-business" + DEVAUTH; + } diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/RabbitConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/RabbitConstant.java index 822cc8771..42e3c081e 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/RabbitConstant.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/RabbitConstant.java @@ -33,9 +33,9 @@ public interface RabbitConstant { /** * 新系统推送信息 */ - String NEW_SYSTEM_RECEIVE_INFO_QUEUE = "new_system_receive_info_queue"+ ModuleNameConstant.DEVAUTH; - String NEW_SYSTEM_RECEIVE_INFO_EXCHANGE = "new_system_receive_info_exchange"+ ModuleNameConstant.DEVAUTH; - String NEW_SYSTEM_RECEIVE_INFO_ROUTING = "new_system_receive_info_routing"+ ModuleNameConstant.DEVAUTH; + String NEW_SYSTEM_RECEIVE_INFO_QUEUE = "new_system_receive_info_queue" + ModuleNameConstant.DEVAUTH; + String NEW_SYSTEM_RECEIVE_INFO_EXCHANGE = "new_system_receive_info_exchange" + ModuleNameConstant.DEVAUTH; + String NEW_SYSTEM_RECEIVE_INFO_ROUTING = "new_system_receive_info_routing" + ModuleNameConstant.DEVAUTH; /** * 卸车完成确认 */ @@ -108,7 +108,6 @@ public interface RabbitConstant { /****************文员复合签收推送老系统队列 end *************************/ - /****************文员自提复合签收推送老系统队列 start *************************/ String BILL_CLERK_CHECK_PUSH_DATA_QUEUE = "bill_clerk_check_push_data_queue" + ModuleNameConstant.DEVAUTH; @@ -137,8 +136,6 @@ public interface RabbitConstant { /***************************************梦天签收扫描数据推送 end************************************************/ - - /****************************************梦天签收复核数据推送 start***********************************************/ String MT_BUSINESS_DATA_CLERK_CHECK_2_FACTORY_QUEUE = "mt_business_data_clerk_check_2_factory_queue" + ModuleNameConstant.DEVAUTH; String MT_BUSINESS_DATA_CLERK_CHECK_2_FACTORY_EXCHANGE = "mt_business_data_clerk_check_2_factory_exchange" + ModuleNameConstant.DEVAUTH; @@ -174,7 +171,24 @@ public interface RabbitConstant { String OPEN_ORDER_LOAD_SCAN_ROUTING = "open_order_load_scan_routing" + ModuleNameConstant.DEVAUTH; + /****************运单创建推送商家数据start *************************/ + + String OPEN_WAYBILL_TO_BUSINESS_DATA_QUEUE = "open_waybill_to_business_data_queue" + ModuleNameConstant.DEVAUTH; + String OPEN_WAYBILL_TO_BUSINESS_DATA_EXCHANGE = "open_waybill_to_business_data_exchange" + ModuleNameConstant.DEVAUTH; + String OPEN_WAYBILL_TO_BUSINESS_DATA_ROUTING = "open_waybill_to_business_data_routing" + ModuleNameConstant.DEVAUTH; + + + /****************运单创建推送商家数据end *************************/ + + + /****************库内入库推送商家数据start *************************/ + String IN_WAREHOUSE_TO_BUSINESS_DATA_QUEUE = "in_warehouse_to_business_data_queue" + ModuleNameConstant.DEVAUTH; + String IN_WAREHOUSE_TO_BUSINESS_DATA_EXCHANGE = "in_warehouse_to_business_data_exchange" + ModuleNameConstant.DEVAUTH; + String IN_WAREHOUSE_TO_BUSINESS_DATA_ROUTING = "in_warehouse_to_business_data_routing" + ModuleNameConstant.DEVAUTH; + + + /****************库内入库推送商家数据end *************************/ /****************创建商家配送计划 start *************************/ @@ -192,4 +206,14 @@ public interface RabbitConstant { String HWY_ORDER_STATUS_EXCHANGE = "hwy_order_status_exchange" + ModuleNameConstant.DEVAUTH; String HWY_ORDER_STATUS_ROUTING = "hwy_order_status_routing" + ModuleNameConstant.DEVAUTH; + + /****************商家入库完结 start *************************/ + + String BUSINESS_IN_CONVERSION_DATA_QUEUE = "business_in_conversion_data_queue" + ModuleNameConstant.DEVAUTH; + String BUSINESS_IN_CONVERSION_DATA_EXCHANGE = "business_in_conversion_data_exchange" + ModuleNameConstant.DEVAUTH; + String BUSINESS_IN_CONVERSION_DATA_ROUTING = "business_in_conversion_data_routing" + ModuleNameConstant.DEVAUTH; + + + /****************商家入库完结 end *************************/ + } diff --git a/blade-service-api/logpm-business-api/pom.xml b/blade-service-api/logpm-business-api/pom.xml new file mode 100644 index 000000000..24c096b69 --- /dev/null +++ b/blade-service-api/logpm-business-api/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + + org.springblade + blade-service-api + 3.2.0.RELEASE + + + org.springblade + logpm-business-api + 3.2.0.RELEASE + + + diff --git a/blade-service-api/logpm-business-conversion-api/src/main/java/com/logpm/business/dto/DistributionBusinessPreOrderDTO.java b/blade-service-api/logpm-business-conversion-api/src/main/java/com/logpm/business/dto/DistributionBusinessPreOrderDTO.java new file mode 100644 index 000000000..c93867760 --- /dev/null +++ b/blade-service-api/logpm-business-conversion-api/src/main/java/com/logpm/business/dto/DistributionBusinessPreOrderDTO.java @@ -0,0 +1,13 @@ +package com.logpm.business.dto; + +import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import lombok.Data; + +/** + * + */ +public class DistributionBusinessPreOrderDTO extends DistributionBusinessPreOrderEntity { + + + +} diff --git a/blade-service-api/logpm-business-conversion-api/src/main/java/com/logpm/business/vo/DistributionBusinessPreCarNumberVO.java b/blade-service-api/logpm-business-conversion-api/src/main/java/com/logpm/business/vo/DistributionBusinessPreCarNumberVO.java new file mode 100644 index 000000000..3b03f44c0 --- /dev/null +++ b/blade-service-api/logpm-business-conversion-api/src/main/java/com/logpm/business/vo/DistributionBusinessPreCarNumberVO.java @@ -0,0 +1,28 @@ +package com.logpm.business.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class DistributionBusinessPreCarNumberVO { + + @ApiModelProperty(value = "配送车次") + private String distrCarNumber; + + @ApiModelProperty(value = "运单号") + private String waybillNumber; + + @ApiModelProperty(value = "订单号") + private String orderCode; + + + @ApiModelProperty(value = "总件数") + private Integer totalNum; + + @ApiModelProperty(value = "入库件数") + private Integer inNum; + + @ApiModelProperty(value = "待入库件数") + private Integer restNum; + +} diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionStockArticleEntity.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionStockArticleEntity.java index 105d2df4b..6f829fa80 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionStockArticleEntity.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionStockArticleEntity.java @@ -404,7 +404,7 @@ public class DistributionStockArticleEntity extends TenantEntity { private String orderStatus; @ApiModelProperty(value = "预约状态") - private String reservationStatus; + private String reservationStatus; @ApiModelProperty(value = "备货状态") private String stockupStatus; diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/feign/IDistributionBusinessPreOrderClient.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/feign/IDistributionBusinessPreOrderClient.java new file mode 100644 index 000000000..244960d14 --- /dev/null +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/feign/IDistributionBusinessPreOrderClient.java @@ -0,0 +1,18 @@ +package com.logpm.distribution.feign; + +import org.springblade.common.constant.ModuleNameConstant; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@FeignClient( + value = ModuleNameConstant.APPLICATION_DISTRIBUTION_NAME +) +public interface IDistributionBusinessPreOrderClient { + + + String API_PREFIX = "/client"; + String INORDERBYORDERPACKAGECODE = API_PREFIX + "/inOrderByOrderPackageCode"; + @GetMapping(INORDERBYORDERPACKAGECODE) + public Integer inOrderByOrderPackageCode(@RequestParam("orderPackageCode") String orderPackageCode, @RequestParam("carNum")String carNum); +} diff --git a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/feign/IInComingClient.java b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/feign/IInComingClient.java new file mode 100644 index 000000000..bb33a2ad9 --- /dev/null +++ b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/feign/IInComingClient.java @@ -0,0 +1,21 @@ +package com.logpm.trunkline.feign; + +import com.logpm.trunkline.dto.InComingDTO; +import org.springblade.common.constant.ModuleNameConstant; +import org.springblade.core.tool.api.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient( + value = ModuleNameConstant.APPLICATION_TRUNKLINE_NAME +) +public interface IInComingClient { + + String API_PREFIX = "inComing/client"; + + + @PostMapping(API_PREFIX+"/incomingPackage") + R incomingPackage(@RequestBody InComingDTO inComingDTO); + +} diff --git a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/feign/ITrunklinePackageTrackLogClient.java b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/feign/ITrunklinePackageTrackLogClient.java index c6b909d3a..28474dd13 100644 --- a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/feign/ITrunklinePackageTrackLogClient.java +++ b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/feign/ITrunklinePackageTrackLogClient.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import org.springblade.common.constant.ModuleNameConstant; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -16,6 +17,6 @@ public interface ITrunklinePackageTrackLogClient { String API_PREFIX = "trunklinePackageTrackLog/client"; @PostMapping(API_PREFIX+"/addBatchPackageTrackLog") - void addPackageTrackLog(@RequestParam List addPackageTrackLogList, @RequestParam List orderPackageCodes, @RequestParam Integer workNode); + void addPackageTrackLog(@RequestBody List addPackageTrackLogList); } diff --git a/blade-service-api/pom.xml b/blade-service-api/pom.xml index b7b10a21b..89f2c56e3 100644 --- a/blade-service-api/pom.xml +++ b/blade-service-api/pom.xml @@ -45,6 +45,9 @@ logpm-business-conversion-api logpm-factory-data-zbom-api + + + logpm-business-api diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/BasicDataApplication.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/BasicDataApplication.java index 799bc4276..468f5acd7 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/BasicDataApplication.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/BasicDataApplication.java @@ -5,7 +5,6 @@ import org.springblade.common.constant.ModuleNameConstant; import org.springblade.core.cloud.client.BladeCloudApplication; import org.springblade.core.launch.BladeApplication; import org.springblade.core.transaction.annotation.SeataCloudApplication; -//import org.springblade.core.transaction.annotation.SeataCloudApplication; /** * Basic启动器 diff --git a/blade-service/logpm-business/pom.xml b/blade-service/logpm-business/pom.xml new file mode 100644 index 000000000..dc96f312a --- /dev/null +++ b/blade-service/logpm-business/pom.xml @@ -0,0 +1,118 @@ + + + 4.0.0 + + + org.springblade + blade-service + 3.2.0.RELEASE + + + org.springblade + logpm-business + ${project.artifactId} + ${bladex.project.version} + jar + + + + org.springblade + blade-core-boot + + + org.springblade + blade-starter-swagger + + + org.springblade + blade-starter-excel + + + org.springblade + blade-core-auto + compile + + + + org.springframework.boot + spring-boot-starter-amqp + + + org.springblade + logpm-business-api + 3.2.0.RELEASE + compile + + + + org.springblade + logpm-business-conversion-api + 3.2.0.RELEASE + + + org.springblade + logpm-trunkline-api + 3.2.0.RELEASE + compile + + + + org.springblade + logpm-basicdata-api + 3.2.0.RELEASE + compile + + + + org.springblade + logpm-distribution-api + ${bladex.project.version} + + + + org.springblade + logpm-warehouse-api + ${bladex.project.version} + + + + org.springblade + blade-user-api + ${bladex.project.version} + + + org.springblade + blade-system-api + 3.2.0.RELEASE + compile + + + + + + + + com.spotify + dockerfile-maven-plugin + + ${docker.username} + ${docker.password} + ${docker.registry.url}/${docker.namespace}/${project.artifactId} + ${project.version} + true + + target/${project.build.finalName}.jar + + false + + + + org.apache.maven.plugins + maven-antrun-plugin + + + + + diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/BusinessApplication.java b/blade-service/logpm-business/src/main/java/com/logpm/business/BusinessApplication.java new file mode 100644 index 000000000..048ae5f84 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/BusinessApplication.java @@ -0,0 +1,17 @@ +package com.logpm.business; + + +import org.springblade.common.constant.ModuleNameConstant; +import org.springblade.core.cloud.client.BladeCloudApplication; +import org.springblade.core.launch.BladeApplication; +import org.springblade.core.transaction.annotation.SeataCloudApplication; + +@BladeCloudApplication +@SeataCloudApplication +public class BusinessApplication { + + public static void main(String[] args) { + BladeApplication.run(ModuleNameConstant.LOGPM_BUSINESS_NAME, BusinessApplication.class, args); + } + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/AsyncAnnotationAspect.java new file mode 100644 index 000000000..2cabab7a5 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/AsyncAnnotationAspect.java @@ -0,0 +1,51 @@ +package com.logpm.business.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +@Aspect +@Component +@Slf4j +@Order(-1) +public class AsyncAnnotationAspect { + + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") + public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); + String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); + + // 在方法执行前的操作 + String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); + DynamicDataSourceContextHolder.push(tenantId); + + // 执行原方法 + Object result = joinPoint.proceed(); + + // 在方法执行后的操作 + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/ChangeAsyncAnnotationAspect.java b/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/ChangeAsyncAnnotationAspect.java new file mode 100644 index 000000000..2be435999 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/ChangeAsyncAnnotationAspect.java @@ -0,0 +1,120 @@ +package com.logpm.business.aspect; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.ChangeAsync; +import org.springblade.common.cache.CacheNames; +import org.springblade.common.component.MockLoginService; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.core.tool.utils.ThreadLocalUtil; +import org.springframework.core.annotation.Order; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.lang.reflect.Method; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +@Aspect +@Component +@Slf4j +@Order(-1) +@AllArgsConstructor +public class ChangeAsyncAnnotationAspect { + + private final MockLoginService mockLoginService; + + private final BladeRedis bladeRedis; + private final Environment environment; + private final RedisLockClient redisLockClient; + private final String account = "shujutongbu"; + + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ + @Around("@annotation(org.springblade.common.annotations.ChangeAsync)") + public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + ChangeAsync myAsync = method.getAnnotation(ChangeAsync.class); + String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> ChangeAsync={}", annotationValue); + + // 获取当前拦截方法的入参参数 + Object[] args = joinPoint.getArgs(); + // 获取入参名称 + String[] parameterNames = signature.getParameterNames(); + String tenantId = null; + // 获取参数名称 为tenantId 的值 + for (int i = 0; i < parameterNames.length; i++) { + if ("tenantId".equals(parameterNames[i])) { + tenantId = (String) args[i]; + log.info(">> tenandId {} ", tenantId); + break; + } + } + // 执行模拟登录 + if (StringUtil.isNotBlank(tenantId)) { + JSONObject data = bladeRedis.get(CacheNames.LOCAL_SERVER_USER + tenantId + ":" + account); + if (Objects.isNull(data)) { + boolean flag = redisLockClient.tryLock("local_server_user" + tenantId, LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if (flag) { + data = bladeRedis.get(CacheNames.LOCAL_SERVER_USER + tenantId + ":" + account); + if (Objects.isNull(data)) { + data = mockLoginService.mockToken(tenantId, account); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER + tenantId + ":" + account, data, 3200L); + redisLockClient.unLock("local_server_user" + tenantId, LockType.FAIR); + } + } + } + + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Blade-Auth", "bearer "+data.get("access_token")); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Blade-Auth","bearer "+data.get("access_token") ); + httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + ThreadLocalUtil.put("bladeContext", httpHeaders); + + DynamicDataSourceContextHolder.push(data.getString("tenant_id")); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + }else{ + return joinPoint.proceed(); + } + + +// // 在方法执行前的操作 +// String tenantId = AuthUtil.getTenantId(); +// log.info(">> tenandId {} ",tenantId); +// DynamicDataSourceContextHolder.push("627683"); +// +// // 执行原方法 +// Object result = joinPoint.proceed(); +// +// // 在方法执行后的操作 +// DynamicDataSourceContextHolder.poll(); +// return result; + } + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/RabbitAnnotationAspect.java b/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/RabbitAnnotationAspect.java new file mode 100644 index 000000000..0577947a0 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/aspect/RabbitAnnotationAspect.java @@ -0,0 +1,48 @@ +package com.logpm.business.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class RabbitAnnotationAspect { + + + /** + * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 + * + * @param joinPoint 切面的连接点,表示当前被拦截的方法。 + * @return 返回被拦截方法的执行结果。 + * @throws Throwable 如果执行过程中发生异常,则抛出。 + */ + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/bean/Resp.java b/blade-service/logpm-business/src/main/java/com/logpm/business/bean/Resp.java new file mode 100644 index 000000000..d5efee797 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/bean/Resp.java @@ -0,0 +1,35 @@ +package com.logpm.business.bean; + +import lombok.Data; +import org.springblade.core.tool.api.R; + +@Data +public class Resp extends R { + + private String audio; + + public static Resp scanSuccess(String msg,String audio){ + Resp resp = new Resp(); + resp.setCode(200); + resp.setMsg(msg); + resp.setAudio(audio); + return resp; + } + + public static Resp scanFail(String msg,String audio){ + Resp resp = new Resp(); + resp.setCode(3001); + resp.setMsg(msg); + resp.setAudio(audio); + return resp; + } + + public static Resp scanFail(int code,String msg,String audio){ + Resp resp = new Resp(); + resp.setCode(code); + resp.setMsg(msg); + resp.setAudio(audio); + return resp; + } + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/config/BusinessProperties.java b/blade-service/logpm-business/src/main/java/com/logpm/business/config/BusinessProperties.java new file mode 100644 index 000000000..b1842f513 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/config/BusinessProperties.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package com.logpm.business.config; + + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * 配置feign、mybatis包名、properties + * + * @author chaos + */ +@Configuration(proxyBeanMethods = false) +@ComponentScan({"org.springblade", "com.logpm"}) +@EnableFeignClients({"org.springblade", "com.logpm"}) +@MapperScan({"org.springblade.**.mapper.**", "com.logpm.**.mapper.**"}) +@EnableConfigurationProperties(BusinessProperties.class) +public class BusinessProperties { + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/controller/DistributionBusinessPreOrderController.java b/blade-service/logpm-business/src/main/java/com/logpm/business/controller/DistributionBusinessPreOrderController.java new file mode 100644 index 000000000..9f0a25919 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/controller/DistributionBusinessPreOrderController.java @@ -0,0 +1,79 @@ +package com.logpm.business.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.logpm.business.service.IDistributionBusinessPreOrderService; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; +import com.logpm.business.vo.DistributionBusinessPreOrderVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.Map; + +@RestController +@AllArgsConstructor +@Slf4j +@RequestMapping("/businessPreOrder") +@Api(value = "预入库信息控制器", tags = "预入库信息控制器") +public class DistributionBusinessPreOrderController extends BladeController { + + private final IDistributionBusinessPreOrderService distributionBusinessPreOrderService; + + /** + * 预入库信息 分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "分页", notes = "传入distributionDeliveryList") + public R> page(@ApiIgnore @RequestParam Map distributionBusinessPreOrderDTO, Query query) { + IPage page = Condition.getPage(query); + IPage data= distributionBusinessPreOrderService.pacgeList(distributionBusinessPreOrderDTO,page); + return R.data(data); + } + + /** + * 预入库信息--配送车次 + */ + @GetMapping("/pageByCarNum") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "分页", notes = "传入distributionDeliveryList") + public R> pageByCarNum(@ApiIgnore @RequestParam Map distributionBusinessPreOrderDTO, Query query) { + IPage page = Condition.getPage(query); + IPage data= distributionBusinessPreOrderService.pageByCarNum(distributionBusinessPreOrderDTO,page); + return R.data(data); + } + + + + + @GetMapping("/inOrder") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "页面ID", notes = "传入distributionDeliveryList") + public R inOrder(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { +// try { + Boolean isSuccess =distributionBusinessPreOrderService.inOrder(ids); + return R.data(isSuccess); +// }catch (Exception e){ +// log.error("预入库信息入库失败",e); +// return R.fail(500,e.getMessage()); +// } + + } + + + + + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/launcher/BusinessLauncherServiceImpl.java b/blade-service/logpm-business/src/main/java/com/logpm/business/launcher/BusinessLauncherServiceImpl.java new file mode 100644 index 000000000..646e80c9b --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/launcher/BusinessLauncherServiceImpl.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package com.logpm.business.launcher; + +import org.springblade.core.auto.service.AutoService; +import org.springblade.core.launch.constant.NacosConstant; +import org.springblade.core.launch.service.LauncherService; +import org.springblade.core.launch.utils.PropsUtil; +import org.springframework.boot.builder.SpringApplicationBuilder; + +import java.util.Properties; + +/** + * 启动参数拓展 + * + * @author Chill + */ +@AutoService(LauncherService.class) +public class BusinessLauncherServiceImpl implements LauncherService { + + @Override + public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) { + Properties props = System.getProperties(); + // 开启多数据源 + PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "true"); + // 指定注册配置信息 + PropsUtil.setProperty(props, "spring.cloud.nacos.config.extension-configs[0].data-id", NacosConstant.dataId(appName, profile)); + PropsUtil.setProperty(props, "spring.cloud.nacos.config.extension-configs[0].group", NacosConstant.NACOS_CONFIG_GROUP); + PropsUtil.setProperty(props, "spring.cloud.nacos.config.extension-configs[0].refresh", NacosConstant.NACOS_CONFIG_REFRESH); + // 指定注册IP + // PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.ip", "127.0.0.1"); + // 指定注册端口 + // PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.port", "8200"); + // 自定义命名空间 + // PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", LauncherConstant.NACOS_NAMESPACE); + // PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", LauncherConstant.NACOS_NAMESPACE); + // 自定义分组 + // PropsUtil.setProperty(props, "spring.cloud.nacos.config.group", NacosConstant.NACOS_CONFIG_GROUP); + // PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.group", NacosConstant.NACOS_CONFIG_GROUP); + } + + @Override + public int getOrder() { + return 20; + } +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/mapper/DistributionBusinessPreOrderMapper.java b/blade-service/logpm-business/src/main/java/com/logpm/business/mapper/DistributionBusinessPreOrderMapper.java new file mode 100644 index 000000000..58b607afb --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/mapper/DistributionBusinessPreOrderMapper.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package com.logpm.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.logpm.business.dto.BusinessPreListDTO; +import com.logpm.business.dto.DistributionBusinessPreOrderDTO; +import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; +import com.logpm.business.vo.DistributionBusinessPreOrderVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 商家预备导入数据信息 Mapper 接口 + * + * @author cyz + * @since 2023-06-13 + */ +public interface DistributionBusinessPreOrderMapper extends BaseMapper { + + + /** + * 查询DistributionBusinessPreOrderVO列表 + * + * @param page + * @param param + * @return + */ + IPage pageList(IPage page, @Param("param") DistributionBusinessPreOrderDTO param); + + /** + * 删除商家端数据 + * + * @param deletedPackageList + * @return + */ + Integer deleteBusinessPreOrder(String reservationCode, List deletedPackageList); + + List listByBusinessPreListDTO(@Param("queryrderDTO") BusinessPreListDTO queryrderDTO); + + Integer updateBusinessPreOrderByOrderPackageCode(@Param("orderPackageCode") String orderPackageCode); + + IPage pageByCarNum(IPage page, Map distributionBusinessPreOrderDTO); +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/mapper/DistributionBusinessPreOrderMapper.xml b/blade-service/logpm-business/src/main/java/com/logpm/business/mapper/DistributionBusinessPreOrderMapper.xml new file mode 100644 index 000000000..99acffb81 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/mapper/DistributionBusinessPreOrderMapper.xml @@ -0,0 +1,187 @@ + + + + + + + update logpm_business_pre_order set in_warehouse=1 + + where order_package_code=#{orderPackageCode} and is_deleted=0 and in_warehouse=0 + + + + DELETE FROM logpm_business_pre_order WHERE reservation_code = #{reservationCode} + AND order_package_code IN + + #{orderPackageCode} + + + + + + + + + diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/receiver/BusinessInOrderDataQueueHandler.java b/blade-service/logpm-business/src/main/java/com/logpm/business/receiver/BusinessInOrderDataQueueHandler.java new file mode 100644 index 000000000..b731ef5c4 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/receiver/BusinessInOrderDataQueueHandler.java @@ -0,0 +1,31 @@ +package com.logpm.business.receiver; + +import com.rabbitmq.client.Channel; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.RabbitConstant; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 商家完结订单 + */ +@Slf4j +@RabbitListener(queues = RabbitConstant.BUSINESS_IN_CONVERSION_DATA_QUEUE) +@Component +@AllArgsConstructor +public class BusinessInOrderDataQueueHandler { + + @RabbitHandler + public void businessInOrderDataHandler(Map map, Message message, Channel channel) { + + + + + + } +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/service/IDistributionBusinessPreOrderService.java b/blade-service/logpm-business/src/main/java/com/logpm/business/service/IDistributionBusinessPreOrderService.java new file mode 100644 index 000000000..94f8032f2 --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/service/IDistributionBusinessPreOrderService.java @@ -0,0 +1,55 @@ +package com.logpm.business.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.logpm.business.bean.Resp; +import com.logpm.business.dto.BusinessPreListDTO; +import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; +import com.logpm.business.vo.DistributionBusinessPreOrderListVO; +import com.logpm.business.vo.DistributionBusinessPreOrderVO; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.mp.base.BaseService; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +public interface IDistributionBusinessPreOrderService extends BaseService { + /** + * 预备入库ID集合 + * @param ids + * @return + */ + Boolean inOrder(String ids) throws ServiceException; + + + /** + * 更新预入库状态 + * @param orderPackageCode 包条码 + * @param carNum 入库的配送车次 + * @return + */ + Integer inOrderByOrderPackageCode(String orderPackageCode,String carNum); + + /** + * 查询DistributionBusinessPreOrder列表 + * @param distributionBusinessPreOrderDTO + * @param page + * @return + */ + IPage pacgeList(Map distributionBusinessPreOrderDTO, IPage page); + + /** + * 删除商家端数据 + * @param k + * @param deletedPackageList + * @return + */ + Integer deleteBusinessPreOrder(String k, List deletedPackageList); + DistributionBusinessPreOrderListVO list(BusinessPreListDTO queryrderDTO); + + Resp inOrderWarehourse(String orderPackageCode, String reservationCode) throws ExecutionException, InterruptedException; + + IPage pageByCarNum(Map distributionBusinessPreOrderDTO, IPage page); + +} diff --git a/blade-service/logpm-business/src/main/java/com/logpm/business/service/impl/IDistributionBusinessPreOrderServiceImpl.java b/blade-service/logpm-business/src/main/java/com/logpm/business/service/impl/IDistributionBusinessPreOrderServiceImpl.java new file mode 100644 index 000000000..5e027034f --- /dev/null +++ b/blade-service/logpm-business/src/main/java/com/logpm/business/service/impl/IDistributionBusinessPreOrderServiceImpl.java @@ -0,0 +1,249 @@ +package com.logpm.business.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.logpm.basicdata.entity.BasicdataWarehouseEntity; +import com.logpm.basicdata.feign.IBasicdataWarehouseClient; +import com.logpm.business.bean.Resp; +import com.logpm.business.dto.BusinessPreListDTO; +import com.logpm.business.dto.DistributionBusinessPreOrderDTO; +import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import com.logpm.business.mapper.DistributionBusinessPreOrderMapper; +import com.logpm.business.service.IDistributionBusinessPreOrderService; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; +import com.logpm.business.vo.DistributionBusinessPreOrderListVO; +import com.logpm.business.vo.DistributionBusinessPreOrderVO; +import com.logpm.trunkline.dto.InComingDTO; +import com.logpm.trunkline.feign.IInComingClient; +import lombok.AllArgsConstructor; +import org.springblade.common.constant.IncomingTypeEnum; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.BeanUtil; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl implements IDistributionBusinessPreOrderService { + + + private final IBasicdataWarehouseClient basicdataWarehouseClient; + + private final IInComingClient inComingClient; + + @Override + public Boolean inOrder(String ids) throws ServiceException { + + // 查询出来需要处理的包条码 + List idArray = Arrays.asList(ids.split(",")); + QueryWrapper wrapper = new QueryWrapper(); + wrapper.in("id", idArray); + + InComingDTO inComingDTO = new InComingDTO(); + StringBuffer sb = new StringBuffer(); + List list = baseMapper.selectList(wrapper); + + List data = new ArrayList<>(); + for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) { + + if (distributionBusinessPreOrderEntity.getInWarehouse() == 1) { + throw new ServiceException("存在已入库的包件"); + } + if(!sb.toString().isEmpty()){ + sb.append(","); + } + sb.append(distributionBusinessPreOrderEntity.getOrderPackageCode()); + data.add(distributionBusinessPreOrderEntity); + } + + BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); + inComingDTO.setOrderPackageCode(sb.toString()); + inComingDTO.setIncomingType(IncomingTypeEnum.LINE_INCOMING.getCode()); + inComingDTO.setWarehouseId(myCurrentWarehouse.getId()); + inComingDTO.setWarehouseName(myCurrentWarehouse.getName()); + R r = inComingClient.incomingPackage(inComingDTO); + if(r.isSuccess()){ + // 更新成功 + for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : data) { + distributionBusinessPreOrderEntity.setInWarehouse(1); + baseMapper.updateById(distributionBusinessPreOrderEntity); + } + } + return true; + } + + + + @Override + public Integer inOrderByOrderPackageCode(String orderPackageCode,String carNum) { + + + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("order_package_code", orderPackageCode); +// wrapper.eq("in_warehouse",0); + wrapper.eq("is_deleted","0"); + List list = baseMapper.selectList(wrapper); + if(!list.isEmpty()){ + DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity = list.get(0); + + distributionBusinessPreOrderEntity.setInWarehouse(1); + return baseMapper.updateById(distributionBusinessPreOrderEntity); + } + return 0; + + + } + + + @Override + public IPage pacgeList(Map distributionBusinessPreOrderDTO, IPage page) { + DistributionBusinessPreOrderDTO param = JSONObject.parseObject(JSONObject.toJSONString(distributionBusinessPreOrderDTO), DistributionBusinessPreOrderDTO.class); + return baseMapper.pageList(page, param); + } + + @Override + public Integer deleteBusinessPreOrder(String k, List deletedPackageList) { + + return baseMapper.deleteBusinessPreOrder(k, deletedPackageList); + } + + + @Override + public DistributionBusinessPreOrderListVO list(BusinessPreListDTO queryrderDTO) { + + DistributionBusinessPreOrderListVO distributionBusinessPreOrderListVO = new DistributionBusinessPreOrderListVO(); + + + List data = baseMapper.listByBusinessPreListDTO(queryrderDTO); + + + // data 分组 + Map> groupedData = data.stream() + .collect(Collectors.groupingBy(DistributionBusinessPreOrderEntity::getInWarehouse)); + + // 已入库的 + List distributionBusinessPreOrderEntities = groupedData.get(1); + + + List result = new ArrayList<>(); + for (DistributionBusinessPreOrderEntity datum : data) { + + if(datum.getInWarehouse() .equals(queryrderDTO.getInWarehouse()) ){ + DistributionBusinessPreOrderVO copy = BeanUtil.copy(datum, DistributionBusinessPreOrderVO.class); + result.add(copy); + } + + } + distributionBusinessPreOrderListVO.setList(result); + distributionBusinessPreOrderListVO.setSumNum(data.size()); + distributionBusinessPreOrderListVO.setInNum(ObjectUtils.isEmpty(distributionBusinessPreOrderEntities) ? 0 : distributionBusinessPreOrderEntities.size()); + + + return distributionBusinessPreOrderListVO; + + + } + + @Override + public Resp inOrderWarehourse(String orderPackageCode, String reservationCode) { + + +// // 查询当前预约单所有的包件 +// +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.eq(DistributionBusinessPreOrderEntity::getReservationCode, reservationCode); +// List list = baseMapper.selectList(queryWrapper); +// +// // 寻找 当前匹配的包条 +// DistributionBusinessPreOrderEntity t = null; +// DistributionBusinessPreOrderEntity t1 = null; +// for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) { +// if (distributionBusinessPreOrderEntity.getOrderPackageCode().equals(orderPackageCode)) { +// // 找到匹配的包条码 +// if (distributionBusinessPreOrderEntity.getInWarehouse() == 1) { +// return Resp.scanSuccess("扫描成功", "包件已入库"); +// } else { +// t = distributionBusinessPreOrderEntity; +// } +// } +// if (t1 == null) { +// t1 = distributionBusinessPreOrderEntity; +// } +// } +// if (t == null) { +// try { +// DistributionBusinessPreOrderEntity finalT = t1; +// CompletableFuture distributionParcelListEntityCompletableFuture = CompletableFuture.supplyAsync(() -> this.selectByOrderPackageCode(orderPackageCode, finalT.getAcceptWarehouseId())); +// +// DistributionParcelListEntity distributionParcelListEntity = distributionParcelListEntityCompletableFuture.get(); +// +// // 如找到了 保存在当前的这个配送计划任务中 +// if (distributionParcelListEntity != null) { +// // 保存包件 +// t = BeanUtil.copy(distributionParcelListEntity, DistributionBusinessPreOrderEntity.class); +// t.setDriverName(finalT.getDriverName()); +// t.setVehicleName(finalT.getVehicleName()); +// t.setDistrCarNumber(finalT.getTrainNumber()); +// t.setOperationStatus(1); +// t.setInWarehouse(0); +// this.save(t); +// list.add(t); +// +// } +// } catch (InterruptedException | ExecutionException e) { +// log.error("inOrderWarehourse:", e); +// throw new ServiceException("包件信息不存在!"); +// } +// +// +// } +// +// // 保存订单 +// DistributionStockArticleEntity stockArticleEntity = buildDistributionStockArticleEntity(t); +// if (stockArticleEntity == null) { +// return Resp.scanFail("操作失败", "包件数据不存在"); +// } +// // 保存包件 +// t.setWarehouseId(stockArticleEntity.getWarehouseId()); +// t.setWarehouse(stockArticleEntity.getWarehouse()); +// t.setStockArticleId(stockArticleEntity.getId()); +// buildDistributionParcelListEntity(t); +// +// // 调用入库方法 +// t.setInWarehouse(1); +// baseMapper.updateById(t); +// +// queryWrapper.eq(DistributionBusinessPreOrderEntity::getInWarehouse, 1); +// Long l = baseMapper.selectCount(queryWrapper); + + + return Resp.scanSuccess("扫描成功", "请前往码板打托进行入库!"); + } + + + @Override + public IPage pageByCarNum(Map distributionBusinessPreOrderDTO, IPage page) { + + IPage pageByCarNum =baseMapper.pageByCarNum(page, distributionBusinessPreOrderDTO); + + return pageByCarNum; + + } + + + + + + + + +} diff --git a/blade-service/logpm-business/src/main/resources/application-dev.yml b/blade-service/logpm-business/src/main/resources/application-dev.yml new file mode 100644 index 000000000..c7d8f38ee --- /dev/null +++ b/blade-service/logpm-business/src/main/resources/application-dev.yml @@ -0,0 +1,53 @@ +#服务器端口 +server: + port: 17020 + +#数据源配置 +#spring: +# datasource: +# url: ${blade.datasource.dev.url} +# username: ${blade.datasource.dev.username} +# password: ${blade.datasource.dev.password} + +spring: + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure,com.alibaba.cloud.seata.feign.SeataFeignClientAutoConfiguration + datasource: + dynamic: + druid: + #通用校验配置 + validation-query: select 1 + #启用sql日志拦截器 + proxy-filters: + - sqlLogInterceptor + #设置默认的数据源或者数据源组,默认值即为master + primary: master + datasource: + master: + druid: + #独立校验配置 + validation-query: select 1 + #oracle校验 + #validation-query: select 1 from dual + url: ${blade.datasource.business.master.url} + username: ${blade.datasource.business.master.username} + password: ${blade.datasource.business.master.password} + 627683: + druid: + #独立校验配置 + validation-query: select 1 + #oracle校验 + #validation-query: select 1 from dual + url: ${blade.datasource.business.627683.url} + username: ${blade.datasource.business.627683.username} + password: ${blade.datasource.business.627683.password} + 703623: + druid: + #独立校验配置 + validation-query: select 1 + #oracle校验 + #validation-query: select 1 from dual + url: ${blade.datasource.business.703623.url} + username: ${blade.datasource.business.703623.username} + password: ${blade.datasource.business.703623.password} + diff --git a/blade-service/logpm-business/src/main/resources/application-prod.yml b/blade-service/logpm-business/src/main/resources/application-prod.yml new file mode 100644 index 000000000..51a5081ea --- /dev/null +++ b/blade-service/logpm-business/src/main/resources/application-prod.yml @@ -0,0 +1,68 @@ +#服务器端口 +server: + port: 17020 + +#数据源配置 +#spring: +# datasource: +# url: ${blade.datasource.prod.url} +# username: ${blade.datasource.prod.username} +# password: ${blade.datasource.prod.password} + +spring: + #排除DruidDataSourceAutoConfigure + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure,com.alibaba.cloud.seata.feign.SeataFeignClientAutoConfiguration + datasource: + dynamic: + druid: + proxy-filters: + - sqlLogInterceptor + #设置默认的数据源或者数据源组,默认值即为master + primary: master + datasource: + master: + url: ${blade.datasource.warehouse.master.url} + username: ${blade.datasource.warehouse.master.username} + password: ${blade.datasource.warehouse.master.password} + 627683: + url: ${blade.datasource.warehouse.627683.url} + username: ${blade.datasource.warehouse.627683.username} + password: ${blade.datasource.warehouse.627683.password} + #rabbitmq配置 + rabbitmq: + host: 172.16.128.145 + port: 5672 + username: admin + password: Slwk@123654 + #虚拟host 可以不设置,使用server默认host + virtual-host: / + #确认消息已发送到队列(Queue) + publisher-returns: true + publisher-confirm-type: correlated + # 手动提交消息 + listener: + simple: + acknowledge-mode: auto + default-requeue-rejected: false + retry: + enabled: true # 开启消费者失败重试 + initial-interval: 1000 # 初识的失败等待时长为1秒 + multiplier: 1 # 失败的等待时长倍数,下次等待时长 = multiplier * last-interval + max-attempts: 3 # 最大重试次数 + stateless: true # true无状态;false有状态。如果业务中包含事务,这里改为false + direct: + acknowledge-mode: manual + template: + mandatory: true +xxl: + job: + accessToken: '' + admin: + addresses: http://172.16.128.147:7009/xxl-job-admin + executor: + appname: logpm-factory-xxljob + ip: 127.0.0.1 + logpath: ../data/applogs/logpm-factory-xxljob/jobhandler + logretentiondays: -1 + port: 7018 diff --git a/blade-service/logpm-business/src/main/resources/application-test.yml b/blade-service/logpm-business/src/main/resources/application-test.yml new file mode 100644 index 000000000..edde06f1e --- /dev/null +++ b/blade-service/logpm-business/src/main/resources/application-test.yml @@ -0,0 +1,68 @@ +#服务器端口 +server: + port: 17020 + +#数据源配置 +#spring: +# datasource: +# url: ${blade.datasource.test.url} +# username: ${blade.datasource.test.username} +# password: ${blade.datasource.test.password} + +spring: + #排除DruidDataSourceAutoConfigure + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure,com.alibaba.cloud.seata.feign.SeataFeignClientAutoConfiguration + datasource: + dynamic: + druid: + proxy-filters: + - sqlLogInterceptor + #设置默认的数据源或者数据源组,默认值即为master + primary: master + datasource: + master: + url: ${blade.datasource.warehouse.master.url} + username: ${blade.datasource.warehouse.master.username} + password: ${blade.datasource.warehouse.master.password} + 627683: + url: ${blade.datasource.warehouse.627683.url} + username: ${blade.datasource.warehouse.627683.username} + password: ${blade.datasource.warehouse.627683.password} + #rabbitmq配置 + rabbitmq: + host: 192.168.2.110 + port: 5672 + username: admin + password: Slwk@123654 + #虚拟host 可以不设置,使用server默认host + virtual-host: / + #确认消息已发送到队列(Queue) + publisher-returns: true + publisher-confirm-type: correlated + # 手动提交消息 + listener: + simple: + acknowledge-mode: auto + default-requeue-rejected: false + retry: + enabled: true # 开启消费者失败重试 + initial-interval: 1000 # 初识的失败等待时长为1秒 + multiplier: 1 # 失败的等待时长倍数,下次等待时长 = multiplier * last-interval + max-attempts: 3 # 最大重试次数 + stateless: true # true无状态;false有状态。如果业务中包含事务,这里改为false + direct: + acknowledge-mode: manual + template: + mandatory: true +xxl: + job: + accessToken: '' + admin: + addresses: http://127.0.0.1:7009/xxl-job-admin + executor: + appname: logpm-factory-xxljob + ip: 127.0.0.1 + logpath: ../data/applogs/logpm-factory-xxljob/jobhandler + logretentiondays: -1 + port: 7018 diff --git a/blade-service/logpm-business/src/main/resources/application.yml b/blade-service/logpm-business/src/main/resources/application.yml new file mode 100644 index 000000000..70efb75b7 --- /dev/null +++ b/blade-service/logpm-business/src/main/resources/application.yml @@ -0,0 +1,24 @@ +#mybatis-plus配置 +mybatis-plus: + mapper-locations: classpath:com/logpm/**/mapper/*Mapper.xml + #实体扫描,多个package用逗号或者分号分隔 + typeAliasesPackage: com.logpm.**.entity + +#swagger扫描路径配置 +swagger: + base-packages: + - org.springblade + - com.logpm + + +logging: + config: classpath:logback.xml + + +spring: + main: + allow-circular-references: true + + + + diff --git a/blade-service/logpm-business/src/main/resources/logback.xml b/blade-service/logpm-business/src/main/resources/logback.xml new file mode 100644 index 000000000..3c54a2c7f --- /dev/null +++ b/blade-service/logpm-business/src/main/resources/logback.xml @@ -0,0 +1,40 @@ + + + + logback + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf8 + + + + + ${log.path} + + ${log.path}.%d{yyyy-MM-dd}.zip + + + %date %level [%thread] %logger{36} [%file : %line] %msg%n + + + + + + + + + + diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RabbitMqConfiguration.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RabbitMqConfiguration.java index 7d828539f..3975bc929 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RabbitMqConfiguration.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RabbitMqConfiguration.java @@ -188,4 +188,21 @@ public class RabbitMqConfiguration { + @Bean + public Queue businessInConversionQueue() { + return new Queue(RabbitConstant.BUSINESS_IN_CONVERSION_DATA_QUEUE, true); + } + @Bean + public CustomExchange businessInConversionExchange() { + Map args = Maps.newHashMap(); + args.put("x-delayed-type", "direct"); + return new CustomExchange(RabbitConstant.BUSINESS_IN_CONVERSION_DATA_EXCHANGE, "x-delayed-message", true, false, args); + } + @Bean + public Binding businessInConversionBinding(Queue businessInConversionQueue, CustomExchange businessInConversionExchange) { + return BindingBuilder.bind(businessInConversionQueue).to(businessInConversionExchange).with(RabbitConstant.BUSINESS_IN_CONVERSION_DATA_ROUTING).noargs(); + } + + + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RedissonConfig.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RedissonConfig.java index 394536540..197c8e04d 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RedissonConfig.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/config/RedissonConfig.java @@ -1,36 +1,36 @@ -package com.logpm.distribution.config; - -import org.redisson.Redisson; -import org.redisson.config.Config; -import org.springblade.core.redis.cache.BladeRedis; -import org.springblade.core.tool.utils.SpringUtil; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.stereotype.Component; - -@Configuration -public class RedissonConfig { - - @Bean - public Redisson redisson() { - // 单机模式 - Config config = new Config(); - - BladeRedis bean = SpringUtil.getBean(BladeRedis.class); - - RedisConnectionFactory connectionFactory = bean.getRedisTemplate().getConnectionFactory(); - - LettuceConnectionFactory factory = (LettuceConnectionFactory) connectionFactory; - - String hostName = factory.getHostName(); - int port = factory.getPort(); - String password = factory.getPassword(); - - config.useSingleServer().setAddress("redis://"+hostName+":"+port).setDatabase(1); - config.useSingleServer().setPassword(password); - return (Redisson) Redisson.create(config); - } - -} +//package com.logpm.distribution.config; +// +//import org.redisson.Redisson; +//import org.redisson.config.Config; +//import org.springblade.core.redis.cache.BladeRedis; +//import org.springblade.core.tool.utils.SpringUtil; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.data.redis.connection.RedisConnectionFactory; +//import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +//import org.springframework.stereotype.Component; +// +//@Configuration +//public class RedissonConfig { +// +// @Bean +// public Redisson redisson() { +// // 单机模式 +// Config config = new Config(); +// +// BladeRedis bean = SpringUtil.getBean(BladeRedis.class); +// +// RedisConnectionFactory connectionFactory = bean.getRedisTemplate().getConnectionFactory(); +// +// LettuceConnectionFactory factory = (LettuceConnectionFactory) connectionFactory; +// +// String hostName = factory.getHostName(); +// int port = factory.getPort(); +// String password = factory.getPassword(); +// +// config.useSingleServer().setAddress("redis://"+hostName+":"+port).setDatabase(1); +// config.useSingleServer().setPassword(password); +// return (Redisson) Redisson.create(config); +// } +// +//} diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionBusinessPreOrderController.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionBusinessPreOrderController.java index 3930d641a..d0fee3960 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionBusinessPreOrderController.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/controller/DistributionBusinessPreOrderController.java @@ -3,6 +3,7 @@ package com.logpm.distribution.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; import com.logpm.business.vo.DistributionBusinessPreOrderVO; import com.logpm.distribution.entity.DistributionDeliveryListEntity; import com.logpm.distribution.service.IDistributionBusinessPreOrderService; @@ -29,7 +30,7 @@ import java.util.Map; @AllArgsConstructor @Slf4j @RequestMapping("/businessPreOrder") -@Api(value = "配送增值服务明细", tags = "预入库信息控制器") +@Api(value = "预入库信息控制器", tags = "预入库信息控制器") public class DistributionBusinessPreOrderController extends BladeController { private final IDistributionBusinessPreOrderService distributionBusinessPreOrderService; @@ -40,12 +41,26 @@ public class DistributionBusinessPreOrderController extends BladeController { @GetMapping("/page") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入distributionDeliveryList") - public R> list(@ApiIgnore @RequestParam Map distributionBusinessPreOrderDTO, Query query) { + public R> page(@ApiIgnore @RequestParam Map distributionBusinessPreOrderDTO, Query query) { IPage page = Condition.getPage(query); IPage data= distributionBusinessPreOrderService.pacgeList(distributionBusinessPreOrderDTO,page); return R.data(data); } + /** + * 预入库信息--配送车次 + */ + @GetMapping("/pageByCarNum") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "分页", notes = "传入distributionDeliveryList") + public R> pageByCarNum(@ApiIgnore @RequestParam Map distributionBusinessPreOrderDTO, Query query) { + IPage page = Condition.getPage(query); + IPage data= distributionBusinessPreOrderService.pageByCarNum(distributionBusinessPreOrderDTO,page); + return R.data(data); + } + + + @GetMapping("/inOrder") @ApiOperationSupport(order = 2) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/feign/DistributionBusinessPreOrderClient.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/feign/DistributionBusinessPreOrderClient.java new file mode 100644 index 000000000..5e6f52596 --- /dev/null +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/feign/DistributionBusinessPreOrderClient.java @@ -0,0 +1,17 @@ +package com.logpm.distribution.feign; + +import com.logpm.distribution.service.IDistributionBusinessPreOrderService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.annotations.ApiIgnore; + +@ApiIgnore() +@RestController +@AllArgsConstructor +public class DistributionBusinessPreOrderClient implements IDistributionBusinessPreOrderClient { + private final IDistributionBusinessPreOrderService distributionBusinessPreOrderService; + @Override + public Integer inOrderByOrderPackageCode(String orderPackageCode, String carNum) { + return distributionBusinessPreOrderService.inOrderByOrderPackageCode(orderPackageCode,carNum); + } +} diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.java index 3c226cfd3..56957c258 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.java @@ -20,19 +20,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.logpm.business.dto.BusinessPreListDTO; import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; import com.logpm.business.vo.DistributionBusinessPreOrderVO; import com.logpm.distribution.dto.DistributionBusinessPreOrderDTO; -import com.logpm.distribution.dto.DistributionParcelListDTO; -import com.logpm.distribution.dto.app.StockupDTO; -import com.logpm.distribution.entity.DistributionParcelListEntity; -import com.logpm.distribution.excel.DistributionParcelListExcel; -import com.logpm.distribution.vo.*; import org.apache.ibatis.annotations.Param; -import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; /** * 商家预备导入数据信息 Mapper 接口 @@ -45,18 +39,25 @@ public interface DistributionBusinessPreOrderMapper extends BaseMapper pageList(IPage page, DistributionBusinessPreOrderDTO param); + IPage pageList(IPage page, @Param("param") DistributionBusinessPreOrderDTO param); /** * 删除商家端数据 + * * @param k * @param deletedPackageList * @return */ - Integer deleteBusinessPreOrder(String reservationCode, List deletedPackageList); + Integer deleteBusinessPreOrder(String reservationCode, List deletedPackageList); + List listByBusinessPreListDTO(@Param("queryrderDTO") BusinessPreListDTO queryrderDTO); + + Integer updateBusinessPreOrderByOrderPackageCode(@Param("orderPackageCode") String orderPackageCode); + + IPage pageByCarNum(IPage page, Map distributionBusinessPreOrderDTO); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.xml index 58c491085..0970ea61a 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionBusinessPreOrderMapper.xml @@ -1,6 +1,14 @@ + + + + update logpm_business_pre_order set in_warehouse=1 + + where order_package_code=#{orderPackageCode} and is_deleted=0 and in_warehouse=0 + + DELETE FROM logpm_business_pre_order WHERE reservation_code = #{reservationCode} AND order_package_code IN @@ -37,7 +45,6 @@ volume, driver_name, vehicle_name, - distr_car_number, in_warehouse FROM logpm_business_pre_order @@ -46,16 +53,9 @@ AND id = #{param.id} - - - - - - AND firsts like concat(#{param.id},'%') - AND `SECOND` like concat(#{param.second},'%') @@ -104,9 +104,11 @@ AND distr_car_number like concat(#{param.distrCarNumber},'%') - + AND in_warehouse = #{param.inWarehouse} + + @@ -153,5 +155,33 @@ + diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.java index d1d2757c3..ec7a703e1 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.java @@ -197,4 +197,6 @@ public interface DistributionStockArticleMapper extends BaseMapper> selectAdvance(@Param("orderCode")String orderCode); void updateCustomerAllByOrderCode(@Param("data") cn.hutool.json.JSONObject data); + + void updateDistributionStockArticleEntityById(@Param("t")DistributionStockArticleEntity t); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.xml index fe6ef1260..cfb56e86f 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockArticleMapper.xml @@ -1400,5 +1400,32 @@ and order_code = #{data.orderCode} + + + update logpm_distribution_stock_article + + + genre = #{t.genre}, + + + order_status = #{t.orderStatus}, + + + reservation_status = #{t.reservationStatus}, + + + hand_quantity = #{t.handQuantity}, + + + delivery_quantity = #{t.deliveryQuantity}, + + + signin_quantity = #{t.signinQuantity}, + + + where id=#{t.id} + + + diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockupMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockupMapper.xml index 99d95a924..4036796a8 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockupMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockupMapper.xml @@ -640,7 +640,7 @@ and ldrs.stock_list_status in (1, 3) ) inventoryNub from logpm_distribution_reservation ldr - LEFT JOIN logpm_distribution_stockup_info ldsi on ldsi.reservation_id = ldr.id + LEFT JOIN logpm_distribution_stockup_info ldsi on ldsi.reservation_id = ldr.id AND AND ldsi.stock_status != 4 LEFT JOIN logpm_distribution_stockup lds on lds.id = ldsi.stockup_id LEFT JOIN logpm_distribution_reservation_stockarticle ldrs on ldrs.reservation_id = ldr.id and ldrs.stock_article_status in (1, 3) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistrilbutionBillLadingMapper.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistrilbutionBillLadingMapper.java index 8af1642ff..f4bfcd04c 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistrilbutionBillLadingMapper.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistrilbutionBillLadingMapper.java @@ -86,7 +86,6 @@ public interface DistrilbutionBillLadingMapper extends BaseMapper ids); /** * 查询自提单关联包件 - * @param billLodingIds * @return */ List selectBillLadingPackage(@Param("ids")List ids); @@ -121,7 +118,6 @@ public interface DistrilbutionBillLadingMapper extends BaseMapper selectBillLadingZeroPackageList(@Param("bullLadingId")Long bullLadingId); /** * 推送老系统 - * @param billId * @return */ SignPushDataDTO getSignPushDataDTO(@Param("id")Long id); /** * 查询推送老系统自提客户信息 - * @param billId * @return */ List selectPushOldCustomer(@Param("id")Long id); /** * 查询自提签署包件推送老系统 - * @param billId * @return */ List selectPushOldPackageSigning(@Param("id")Long id); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/BusinessPreOrderDataQueueHandler.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/BusinessPreOrderDataQueueHandler.java index b9e8ca8c3..4f7cfb005 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/BusinessPreOrderDataQueueHandler.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/BusinessPreOrderDataQueueHandler.java @@ -1,32 +1,18 @@ package com.logpm.distribution.receiver; -import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.business.entity.DistributionBusinessPreOrderEntity; -import com.logpm.distribution.entity.*; +import com.logpm.distribution.entity.DistributionDeliveryListEntity; +import com.logpm.distribution.entity.DistributionParcelListEntity; +import com.logpm.distribution.entity.DistributionReservationEntity; +import com.logpm.distribution.entity.DistributionReservationPackageEntity; import com.logpm.distribution.service.*; -import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; -import com.logpm.trunkline.entity.TrunklineAdvanceEntity; -import com.logpm.trunkline.entity.TrunklineWaybillOrderEntity; -import com.logpm.trunkline.entity.TrunklineWaybillPackageEntity; -import com.logpm.trunkline.feign.ITrunklineAdvanceClient; -import com.logpm.trunkline.feign.ITrunklineAdvanceDetailClient; -import com.logpm.trunkline.feign.ITrunklineWaybillOrderClient; -import com.logpm.trunkline.feign.ITrunklineWaybillPackageClient; -import com.logpm.trunkline.vo.TrunklineAdvanceDetailVO; -import com.logpm.warehouse.entity.WarehouseWayBillDetail; -import com.logpm.warehouse.entity.WarehouseWaybillEntity; -import com.logpm.warehouse.feign.IWarehouseWaybillClient; -import com.logpm.warehouse.feign.IWarehouseWaybillDetailClient; import com.rabbitmq.client.Channel; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.annotations.ChangeAsync; import org.springblade.common.constant.RabbitConstant; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; -import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.entity.Tenant; @@ -39,10 +25,7 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.concurrent.CompletableFuture; -import java.util.function.Function; -import java.util.stream.Collectors; @Slf4j @RabbitListener(queues = RabbitConstant.BUSINESS_PRE_CONVERSION_DATA_QUEUE) @@ -54,20 +37,8 @@ public class BusinessPreOrderDataQueueHandler { private final IDistributionReservationService distributionReservationService; private final IDistributionReservationPackageService distributionReservationPackageService; private final IDistributionParcelListService distributionParcelListService; - private final IDistributionBusinessPreOrderService distributionBusinessPreOrderService; private final ISysClient sysClient; - private final IWarehouseWaybillClient warehouseWaybillClient; - - private final IWarehouseWaybillDetailClient warehouseWaybillDetailClient; - - private final ITrunklineWaybillOrderClient trunklineWaybillOrderClient; - - private final ITrunklineWaybillPackageClient trunklineWaybillPackageClient; - - private final ITrunklineAdvanceClient trunklineAdvanceClient; - - private final ITrunklineAdvanceDetailClient trunklineAdvanceDetailClient; private final IDistributionAsyncService distributionAsyncService; @@ -81,111 +52,18 @@ public class BusinessPreOrderDataQueueHandler { if(!ObjectUtil.isEmpty(tenant.getTenantType())){ if(2==tenant.getTenantType()){ String mallName = tenant.getTenantName(); - extracted(map, mallName); + // 插入暂存单 + // 插入预计表 + plantA(map,mallName); } } }); - } - - } - private void extracted(Map map, String mallName) { - // 查询推送包件 - List distributionParcelListEntities = allList(map, mallName); - if (ObjectUtil.isEmpty(distributionParcelListEntities)) { - return; - } - // 得到下面的包间 - // 假设 orderNumber 是 DistributionParcelListEntity 类中的一个属性 - List uniqueOrderNumbers = distributionParcelListEntities.stream() - .map(DistributionParcelListEntity::getWaybillNumber) // 将每个实体映射到其运单号 - .distinct() // 移除重复的运单号 - .collect(Collectors.toList()); // 收集到一个新的列表中 - - // 查询运单 - List waybillBilllByWaybillNos = warehouseWaybillClient.findWaybillBilllByWaybillNos(uniqueOrderNumbers); - - // 获取运单关联的暂存单信息 - List waybillIds = waybillBilllByWaybillNos.stream().map(WarehouseWaybillEntity::getId).distinct().collect(Collectors.toList()); - - List warehouseWayBillDetails = warehouseWaybillDetailClient.findByWaybillIds(waybillIds); - - List trunklineWaybillOrderEntities = trunklineWaybillOrderClient.findListByWaybillIds(waybillIds); - - List trunklineWaybillPackageEntities = trunklineWaybillPackageClient.findListByWaybillIds(waybillIds); - - // 暂存单ID集合 - List collect = trunklineWaybillOrderEntities.stream().map(TrunklineWaybillOrderEntity::getAdvanceId).distinct().collect(Collectors.toList()); - - List trunklineAdvanceEntities = trunklineAdvanceClient.findListByIds(collect); - - // 获取暂存单明细 - List trunklineAdvanceDetailEntities = trunklineAdvanceDetailClient.findListByAdvanceIds(collect); - Tenant tenant = changeDataBase(mallName); - -// saveOtherData(tenant.getTenantId(),waybillBilllByWaybillNos, trunklineAdvanceDetailEntities, trunklineAdvanceEntities, trunklineWaybillPackageEntities, trunklineWaybillOrderEntities, warehouseWayBillDetails, distributionParcelListEntities, mallName); - - CompletableFuture.supplyAsync(() -> { -// saveOtherData(tenant.getTenantId(),waybillBilllByWaybillNos, trunklineAdvanceDetailEntities, trunklineAdvanceEntities, trunklineWaybillPackageEntities, trunklineWaybillOrderEntities, warehouseWayBillDetails, distributionParcelListEntities, mallName); - distributionAsyncService.saveOtherData(tenant.getTenantId(),waybillBilllByWaybillNos, trunklineAdvanceDetailEntities, trunklineAdvanceEntities, trunklineWaybillPackageEntities, trunklineWaybillOrderEntities, warehouseWayBillDetails, distributionParcelListEntities, mallName); - return null; - }); - } - - private List allList(Map map, String mallName) { - - List tsss = new ArrayList<>(); - if (StringUtil.isBlank(mallName)) { - return tsss; - } - - Long t = (Long) map.get("messageData"); - if (ObjectUtil.isEmpty(t)) { - log.info(">>>>>>>>>>>>> BusinessPreOrderDataQueueHandler 配送ID为空"); - return tsss; - } - - DistributionDeliveryListEntity distributionDeliveryListEntity = distributionDeliveryListService.getById(t); - if (ObjectUtil.isEmpty(distributionDeliveryListEntity)) { - log.info(">>>>>>>>>>>>> BusinessPreOrderDataQueueHandler 配送对象为null"); - return tsss; - } - - List list = distributionReservationService.selectListByDeliveryId(distributionDeliveryListEntity.getId()); - - if (ObjectUtil.isEmpty(list)) { - log.info(">>>>>>>>>>>>> BusinessPreOrderDataQueueHandler 预约列表为空"); - return tsss; - } - - List dataResult = new ArrayList<>(); - for (DistributionReservationEntity distributionReservationEntity : list) { - // 判断需要进行推送商家名称 - log.info(">>>>> mallName TAG {}", mallName); - log.info(">>>>> distributionReservationEntity.getMallName() TAG {}", distributionReservationEntity.getMallName()); - if (mallName.equals(distributionReservationEntity.getMallName())) { - // 将当前的预约单加入到需要推送的列表 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(DistributionReservationPackageEntity::getReservationId, distributionReservationEntity.getId()); - queryWrapper.ne(DistributionReservationPackageEntity::getPacketBarStatus, 2); - List distributionReservationPackageEntityList = distributionReservationPackageService.list(queryWrapper); - - for (DistributionReservationPackageEntity distributionReservationPackageEntity : distributionReservationPackageEntityList) { - DistributionParcelListEntity byId = distributionParcelListService.getById(distributionReservationPackageEntity.getParceListId()); - tsss.add(byId); - } - } - } - return tsss; - } - - - private void plantA(Map map) { - String mallName = "仁寿欧派大家居"; + private void plantA(Map map,String mallName) { if (StringUtil.isBlank(mallName)) { return; @@ -243,18 +121,16 @@ public class BusinessPreOrderDataQueueHandler { } + Tenant tenant = changeDataBase(mallName); + CompletableFuture.supplyAsync(() -> { +// saveOtherData(tenant.getTenantId(),waybillBilllByWaybillNos, trunklineAdvanceDetailEntities, trunklineAdvanceEntities, trunklineWaybillPackageEntities, trunklineWaybillOrderEntities, warehouseWayBillDetails, distributionParcelListEntities, mallName); +// distributionAsyncService.saveOtherData(tenant.getTenantId(),waybillBilllByWaybillNos, trunklineAdvanceDetailEntities, trunklineAdvanceEntities, trunklineWaybillPackageEntities, trunklineWaybillOrderEntities, warehouseWayBillDetails, distributionParcelListEntities, mallName); + distributionAsyncService.saveOtherDataBaseNew(tenant.getTenantId() ,dataResult, mallName); + return null; + }); // 查询包间列表 - saveOtherDataBaseNew(dataResult, mallName); - // 查询配送单对应的司机 - - // 需要将查询出来的数据与 当前保存的数据进行比对 避免重复插入 - - // 通过商场名称找到租户中存在的商场名称 - - // 切换当前线程的数据源 插入到 租户对应的数据库中 - log.info("businessPreOrderDataHandler:{}", map); } @@ -271,130 +147,6 @@ public class BusinessPreOrderDataQueueHandler { return null; } - public void saveOtherDataBaseNew(List dataResult, String maillName) { - - // 查询保存的对象在商场端是否存在 && 没有入库的 都i需要删除 执行新的 - List orderIdList = dataResult.stream() - .map(DistributionBusinessPreOrderEntity::getStockArticleId) - .collect(Collectors.toList()); - R tenantByName = sysClient.getTenantByName(maillName); - if (tenantByName.isSuccess()) { - Tenant tenant = tenantByName.getData(); - if (ObjectUtil.isEmpty(tenant)) { - log.info(">>>>>>>>>>>>> saveOtherDataBaseNew 租户不存在"); - return; - } - if (dataResult.isEmpty()) { - log.info(" saveOtherDataBaseNew dataResult 参数错误"); - } - DynamicDataSourceContextHolder.push(tenant.getTenantId()); - - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(DistributionBusinessPreOrderEntity::getInWarehouse, 0); - lambdaQueryWrapper.in(DistributionBusinessPreOrderEntity::getStockArticleId, orderIdList); - List list = distributionBusinessPreOrderService.list(lambdaQueryWrapper); - - - // 找到已经推送的包件信息 并将其标记为删除状态 - List temsp = new ArrayList<>(); - for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) { - - for (DistributionBusinessPreOrderEntity businessPreOrderEntity : dataResult) { - businessPreOrderEntity.setTenantId(tenant.getTenantId()); - - - if (businessPreOrderEntity.getStockArticleId().equals(distributionBusinessPreOrderEntity.getStockArticleId())) { - // 找到订单 - - if (businessPreOrderEntity.getOrderPackageCode().equals(distributionBusinessPreOrderEntity.getOrderPackageCode())) { - //找到包件 并标记为删除状态 - temsp.add(distributionBusinessPreOrderEntity.getId()); - } - } - } - } - if (!temsp.isEmpty()) { - // 更新删除状态 - distributionBusinessPreOrderService.deleteLogic(temsp); - } - for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : dataResult) { - distributionBusinessPreOrderEntity.setTenantId(tenant.getTenantId()); - } - - // 执行保存操作 - distributionBusinessPreOrderService.saveBatch(dataResult); - DynamicDataSourceContextHolder.poll(); - } - - - } - - -// public void saveOtherDataBase(List dataResult, String maillName) { -// String method = "########################saveOtherDataBase"; -// R tenantByName = sysClient.getTenantByName(maillName); -// if (tenantByName.isSuccess()) { -// Tenant tenant = tenantByName.getData(); -// if (ObjectUtil.isEmpty(tenant)) { -// log.info(">>>>>>>>>>>>> BusinessPreOrderDataQueueHandler 租户不存在"); -// return; -// } -// if (dataResult.isEmpty()) { -// log.info(method + "dataResult 参数错误"); -// } -// DynamicDataSourceContextHolder.push(tenant.getTenantId()); -// Map> map = dataResult.stream().collect(Collectors.groupingBy(DistributionBusinessPreOrderEntity::getInWarehouse)); -// if (Func.isNotEmpty(map.get(1))) { -// //存在需要进行删除的数据 -// List deleteList = map.get(0); -// if (!deleteList.isEmpty()) { -// Map> deletedMap = deleteList.stream().collect(Collectors.groupingBy(DistributionBusinessPreOrderEntity::getReservationCode)); -// deletedMap.forEach((k, v) -> { -// List deletedPackageList = v.stream().map(DistributionBusinessPreOrderEntity::getOrderPackageCode).collect(Collectors.toList()); -// log.info("删除商家端数据>>>>reservationCode:{}", deletedPackageList); -// if (!deletedPackageList.isEmpty()) { -// //进行删除 -// Integer row = distributionBusinessPreOrderService.deleteBusinessPreOrder(k, deletedPackageList); -// log.info("删除商家端数据>>>>row:{}", row); -// } -// }); -// } -// } -// if (Func.isNotEmpty(map.get(0))) { -// //存在可能变更的数据 -// List mapList = map.get(0); -// Map> saveData = mapList.stream().collect(Collectors.groupingBy(DistributionBusinessPreOrderEntity::getReservationCode)); -// List existData = new ArrayList<>(); -// if (!saveData.isEmpty()) { -// //查询是否存在重复 -// saveData.forEach((k, v) -> { -// List list = distributionBusinessPreOrderService.list(Wrappers.query().lambda() -// .eq(DistributionBusinessPreOrderEntity::getReservationCode, k) -// .in(DistributionBusinessPreOrderEntity::getOrderPackageCode, v.stream().map(DistributionBusinessPreOrderEntity::getOrderPackageCode).collect(Collectors.toList())) -// ); -// if (!list.isEmpty()) { -// //已经存在数据 -// existData.addAll(list); -// } -// }); -// } -// if (!existData.isEmpty()) { -// //二者比较取差集 -// mapList = mapList.stream().filter(m -> !existData.stream().map(DistributionBusinessPreOrderEntity::getOrderPackageCode).collect(Collectors.toList()).contains(m.getOrderPackageCode())).collect(Collectors.toList()); -// } -// if (!mapList.isEmpty()) { -// for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : mapList) { -// distributionBusinessPreOrderEntity.setTenantId(tenant.getTenantId()); -// } -// distributionBusinessPreOrderService.saveBatch(mapList); -// } -// } -// DynamicDataSourceContextHolder.poll(); -// -// } -// -// -// } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionAsyncService.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionAsyncService.java index 0db27332d..104d66dd6 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionAsyncService.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionAsyncService.java @@ -1,6 +1,7 @@ package com.logpm.distribution.service; import com.logpm.basicdata.entity.BasicdataWarehouseEntity; +import com.logpm.business.entity.DistributionBusinessPreOrderEntity; import com.logpm.distribution.dto.DistributionStockArticleDTO; import com.logpm.distribution.dto.app.DistrilbutionloadingscanDTO; import com.logpm.distribution.dto.app.StockupDTO; @@ -332,5 +333,6 @@ public interface IDistributionAsyncService { DistributionStockArticleEntity findDistributionStockArticleEntityByIdForAsync(String tenantId, Long id); - void saveOtherData(String tenantId, List waybillBilllByWaybillNos, List trunklineAdvanceDetailEntities, List trunklineAdvanceEntities, List trunklineWaybillPackageEntities, List trunklineWaybillOrderEntities, List warehouseWayBillDetails, List distributionParcelListEntities, String mallName); + + void saveOtherDataBaseNew(String tenantId,List dataResult, String mallName); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionBusinessPreOrderService.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionBusinessPreOrderService.java index 4a895ff91..45cf3b8df 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionBusinessPreOrderService.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionBusinessPreOrderService.java @@ -3,6 +3,7 @@ package com.logpm.distribution.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.logpm.business.dto.BusinessPreListDTO; import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; import com.logpm.business.vo.DistributionBusinessPreOrderListVO; import com.logpm.business.vo.DistributionBusinessPreOrderVO; import com.logpm.distribution.bean.Resp; @@ -25,6 +26,14 @@ public interface IDistributionBusinessPreOrderService extends BaseService pageByCarNum(Map distributionBusinessPreOrderDTO, IPage page); + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java index 1e80737a2..2232a79f1 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java @@ -6,12 +6,14 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.basicdata.entity.BasicdataWarehouseEntity; import com.logpm.basicdata.feign.IBasicdataWarehouseClient; +import com.logpm.business.entity.DistributionBusinessPreOrderEntity; import com.logpm.distribution.dto.DistributionLoadingNumDTO; import com.logpm.distribution.dto.DistributionParcelNumberDTO; import com.logpm.distribution.dto.DistributionStockArticleDTO; @@ -56,16 +58,7 @@ import com.logpm.distribution.mapper.DistributionStockMapper; import com.logpm.distribution.mapper.DistributionStockupInfoMapper; import com.logpm.distribution.mapper.DistributionStockupMapper; import com.logpm.distribution.mapper.DistrilbutionBillLadingMapper; -import com.logpm.distribution.service.IDisStockListDetailService; -import com.logpm.distribution.service.IDistributionAsyncService; -import com.logpm.distribution.service.IDistributionDeliveryDetailsService; -import com.logpm.distribution.service.IDistributionParcelNumberService; -import com.logpm.distribution.service.IDistributionReservationStockarticleService; -import com.logpm.distribution.service.IDistributionReservationStocklistService; -import com.logpm.distribution.service.IDistributionReservationZeroPackageService; -import com.logpm.distribution.service.IDistributionStockArticleService; -import com.logpm.distribution.service.IDistrilbutionBillPackageService; -import com.logpm.distribution.service.IDistrilbutionBillStockService; +import com.logpm.distribution.service.*; import com.logpm.distribution.vo.DistributionParcelNumberVO; import com.logpm.distribution.vo.DistributionSignPrintVO; import com.logpm.distribution.vo.DistributionStockPackageVO; @@ -214,8 +207,11 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { private final IWarehouseWaybillClient warehouseWaybillClient; private final IWarehouseWaybillDetailClient warehouseWaybillDetailClient; + private final IDistributionBusinessPreOrderService distributionBusinessPreOrderService; + + private final ISysClient sysClient; - private final BladeRedis bladeRedis; + // private final @@ -2920,228 +2916,59 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } return null; } - @ChangeAsync() @Override - public void saveOtherData(String tenantId, List waybillBilllByWaybillNos, List trunklineAdvanceDetailEntities, List trunklineAdvanceEntities, List trunklineWaybillPackageEntities, List trunklineWaybillOrderEntities, List warehouseWayBillDetails, List distributionParcelListEntities, String mallName) { - // 保存暂存单 - Tenant tenant = changeDataBase(mallName); - for (TrunklineAdvanceEntity trunklineAdvanceEntity : trunklineAdvanceEntities) { - - TrunklineAdvanceEntity finalTrunklineAdvanceEntity = trunklineAdvanceEntity; - List t = trunklineAdvanceDetailEntities.stream().filter(trunklineAdvanceDetailEntity -> trunklineAdvanceDetailEntity.getAdvanceId().equals(finalTrunklineAdvanceEntity.getId())).collect(Collectors.toList()); - - saveTrunklineAdvanceEntity(trunklineAdvanceEntity, mallName); - - // 保存暂存子表 - saveTrunklineAdvanceDetailEntity(t, trunklineAdvanceEntity, mallName); - } - List collect = trunklineAdvanceEntities.stream().map(TrunklineAdvanceEntity::getId).distinct().collect(Collectors.toList()); - - // 重新查询trunklineAdvanceDetail - List listByAdvanceIds = trunklineAdvanceDetailClient.findListByAdvanceIds(collect); - - // 保存运单 - BasicdataWarehouseEntity basicdataWarehouseEntity = getBasicdataWarehouseEntity(mallName); - for (WarehouseWaybillEntity waybillBilllByWaybillNo : waybillBilllByWaybillNos) { - List collect1 = trunklineWaybillOrderEntities.stream().filter(trunklineWaybillOrderEntity -> trunklineWaybillOrderEntity.getWaybillId().equals(waybillBilllByWaybillNo.getId())).collect(Collectors.toList()); - List t = warehouseWayBillDetails.stream().filter(warehouseWayBillDetail -> warehouseWayBillDetail.getWaybillId().equals(waybillBilllByWaybillNo.getId())).collect(Collectors.toList()); - - - // 修改运单的起始仓库 和末端仓 - waybillBilllByWaybillNo.setDepartureWarehouseName(waybillBilllByWaybillNo.getDestinationWarehouseName()); - waybillBilllByWaybillNo.setDepartureWarehouseId(null); + public void saveOtherDataBaseNew(String tenantId,List dataResult, String mallName) { - // 目的仓 - if (basicdataWarehouseEntity != null) { - waybillBilllByWaybillNo.setDestinationWarehouseId(basicdataWarehouseEntity.getId()); - waybillBilllByWaybillNo.setDestinationWarehouseName(basicdataWarehouseEntity.getName()); + List orderIdList = dataResult.stream() + .map(DistributionBusinessPreOrderEntity::getStockArticleId) + .collect(Collectors.toList()); + R tenantByName = sysClient.getTenantByName(mallName); + if (tenantByName.isSuccess()) { + Tenant tenant = tenantByName.getData(); + if (ObjectUtil.isEmpty(tenant)) { + log.info(">>>>>>>>>>>>> saveOtherDataBaseNew 租户不存在"); + return; } - - - waybillBilllByWaybillNo.setTenantId(tenant.getTenantId()); - - WarehouseWaybillEntity byWaybillNo = warehouseWaybillClient.findByWaybillNo(waybillBilllByWaybillNo.getWaybillNo()); - if (byWaybillNo == null) { - Long l = warehouseWaybillClient.addEnntity(waybillBilllByWaybillNo); - waybillBilllByWaybillNo.setId(l); - } else { - waybillBilllByWaybillNo.setId(byWaybillNo.getId()); + if (dataResult.isEmpty()) { + log.info(" saveOtherDataBaseNew dataResult 参数错误"); } + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DistributionBusinessPreOrderEntity::getInWarehouse, 0); + lambdaQueryWrapper.in(DistributionBusinessPreOrderEntity::getStockArticleId, orderIdList); + List list = distributionBusinessPreOrderService.list(lambdaQueryWrapper); - List byWaybillId = warehouseWaybillDetailClient.findByWaybillId(waybillBilllByWaybillNo.getId()); - for (WarehouseWayBillDetail warehouseWayBillDetail : t) { - warehouseWayBillDetail.setId(null); - for (WarehouseWayBillDetail wayBillDetail : byWaybillId) { + // 找到已经推送的包件信息 并将其标记为删除状态 + List temsp = new ArrayList<>(); + for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) { - if (wayBillDetail.getProductName().equals(warehouseWayBillDetail.getProductName())) { - // 不执行 - warehouseWayBillDetail.setId(wayBillDetail.getId()); - break; - } - } + for (DistributionBusinessPreOrderEntity businessPreOrderEntity : dataResult) { + businessPreOrderEntity.setTenantId(tenant.getTenantId()); - if (warehouseWayBillDetail.getId() == null) { - warehouseWayBillDetail.setWaybillId(waybillBilllByWaybillNo.getId()); - warehouseWaybillDetailClient.addEntity(warehouseWayBillDetail); - } - - - } - - - List listByWaybillNo = trunklineWaybillOrderClient.findListByWaybillNo(waybillBilllByWaybillNo.getWaybillNo()); - - - for (TrunklineWaybillOrderEntity trunklineWaybillOrderEntity : collect1) { - - trunklineWaybillOrderEntity.setId(null); - List collect3 = trunklineWaybillPackageEntities.stream().filter(ts -> { - return ts.getWaybillNo().equals(trunklineWaybillOrderEntity.getWaybillNo()) && ts.getAdvanceId().equals(trunklineWaybillOrderEntity.getAdvanceId()); - }).collect(Collectors.toList()); - - trunklineWaybillOrderEntity.setWaybillId(waybillBilllByWaybillNo.getId()); - trunklineWaybillOrderEntity.setTenantId(tenant.getTenantId()); - - Optional entityWithOrderNumber1123 = trunklineAdvanceEntities.stream() - .filter(entity -> trunklineWaybillOrderEntity.getOrderCode().equals(entity.getOrderCode())) // 过滤出订单号为"1123"的实体 - .findFirst(); // 获取第一个匹配的实体 - if (entityWithOrderNumber1123.isPresent()) { - TrunklineAdvanceEntity foundEntity = entityWithOrderNumber1123.get(); - // 使用找到的实体 - trunklineWaybillOrderEntity.setAdvanceId(foundEntity.getId()); - - } - - - for (TrunklineWaybillOrderEntity waybillOrderEntity : listByWaybillNo) { - - if (waybillOrderEntity.getOrderCode().equals(trunklineWaybillOrderEntity.getOrderCode())) { - trunklineWaybillOrderEntity.setId(waybillOrderEntity.getId()); - } - - } - if (trunklineWaybillOrderEntity.getId() == null) { - - Long l1 = trunklineWaybillOrderClient.addEntityReturnId(trunklineWaybillOrderEntity); - - trunklineWaybillOrderEntity.setId(l1); - } + if (businessPreOrderEntity.getStockArticleId().equals(distributionBusinessPreOrderEntity.getStockArticleId())) { + // 找到订单 - - List ids = Arrays.asList(waybillBilllByWaybillNo.getId()); - List listByWaybillIds = trunklineWaybillPackageClient.findListByWaybillIds(ids); - - for (TrunklineWaybillPackageEntity trunklineWaybillPackageEntity : collect3) { - trunklineWaybillPackageEntity.setId(null); - trunklineWaybillPackageEntity.setWaybillId(waybillBilllByWaybillNo.getId()); - trunklineWaybillPackageEntity.setTenantId(tenant.getTenantId()); - - trunklineWaybillPackageEntity.setAdvanceId(trunklineWaybillOrderEntity.getAdvanceId()); - - for (TrunklineAdvanceDetailVO listByAdvanceId : listByAdvanceIds) { - if (listByAdvanceId.getAdvanceId().equals(trunklineWaybillOrderEntity.getAdvanceId())) { - - if (listByAdvanceId.getOrderPackageCode().equals(trunklineWaybillPackageEntity.getOrderPackageCode())) { - trunklineWaybillPackageEntity.setAdvanceDetailId(listByAdvanceId.getId()); - - } - } - } - - for (TrunklineWaybillPackageEntity listByWaybillId : listByWaybillIds) { - - if (listByWaybillId.getWaybillId().equals(trunklineWaybillPackageEntity.getWaybillId())) { - if (listByWaybillId.getOrderPackageCode().equals(trunklineWaybillPackageEntity.getOrderPackageCode())) { - trunklineWaybillPackageEntity.setId(listByWaybillId.getId()); - break; - } + if (businessPreOrderEntity.getOrderPackageCode().equals(distributionBusinessPreOrderEntity.getOrderPackageCode())) { + //找到包件 并标记为删除状态 + temsp.add(distributionBusinessPreOrderEntity.getId()); } - - } - if (trunklineWaybillPackageEntity.getId() == null) { - trunklineWaybillPackageClient.addEntity(trunklineWaybillPackageEntity); } - - } - } - } - } - - private BasicdataWarehouseEntity getBasicdataWarehouseEntity(String mallName) { - String cacheName = mallName + "仓"; - BasicdataWarehouseEntity basicdataWarehouseEntity = bladeRedis.get(cacheName); - if (basicdataWarehouseEntity == null) { - basicdataWarehouseEntity = warehouseClient.findByName(mallName + "仓"); - bladeRedis.setEx(cacheName, basicdataWarehouseEntity, 60 * 60 * 24L); - } - return basicdataWarehouseEntity; - } - - private void saveTrunklineAdvanceDetailEntity(List t, TrunklineAdvanceEntity trunklineAdvanceEntity, String mallName) { - Tenant tenant = changeDataBase(mallName); - - - List ids = Arrays.asList(trunklineAdvanceEntity.getId()); - - List listByAdvanceIds = trunklineAdvanceDetailClient.findListByAdvanceIds(ids); - - - for (TrunklineAdvanceDetailEntity trunklineAdvanceDetailEntity : t) { - - - // 检测 保存的对象是否已经存在 - for (TrunklineAdvanceDetailVO listByAdvanceId : listByAdvanceIds) { - if (listByAdvanceId.getOrderPackageCode().equals(trunklineAdvanceDetailEntity.getOrderPackageCode())) { - trunklineAdvanceDetailEntity.setId(listByAdvanceId.getId()); - break; - } - + if (!temsp.isEmpty()) { + // 更新删除状态 + distributionBusinessPreOrderService.deleteLogic(temsp); } - - trunklineAdvanceDetailEntity.setPackageStatus("0"); - trunklineAdvanceDetailEntity.setAdvanceId(trunklineAdvanceEntity.getId()); - trunklineAdvanceDetailEntity.setTenantId(tenant.getTenantId()); - trunklineAdvanceDetailEntity.setIncomingWarehouseId(null); - trunklineAdvanceDetailEntity.setIncomingWarehouseName(null); - BasicdataWarehouseEntity basicdataWarehouseEntity = getBasicdataWarehouseEntity(mallName); - if (basicdataWarehouseEntity != null) { - trunklineAdvanceDetailEntity.setWarehouseId(basicdataWarehouseEntity.getId()); - trunklineAdvanceDetailEntity.setWarehouseName(basicdataWarehouseEntity.getName()); + for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : dataResult) { + distributionBusinessPreOrderEntity.setTenantId(tenant.getTenantId()); } - } - trunklineAdvanceDetailClient.addAdvanceBatch(t); - - } - - - private TrunklineAdvanceEntity saveTrunklineAdvanceEntity(TrunklineAdvanceEntity trunklineAdvanceEntity, String mallName) { - Tenant tenant = changeDataBase(mallName); - // 查找商户的暂存单是否存在改制 - TrunklineAdvanceEntity trunklineAdvanceEntity1 = trunklineAdvanceClient.findAdvanceLimitOneByOrderCode(trunklineAdvanceEntity.getOrderCode()); - BasicdataWarehouseEntity basicdataWarehouseEntity = getBasicdataWarehouseEntity(mallName); - if (ObjectUtil.isEmpty(trunklineAdvanceEntity1)) { + // 执行保存操作 + distributionBusinessPreOrderService.saveBatch(dataResult); - // 保存对象 - if (basicdataWarehouseEntity != null) { - trunklineAdvanceEntity.setWarehouseId(basicdataWarehouseEntity.getId()); - trunklineAdvanceEntity.setWarehouseName(basicdataWarehouseEntity.getName()); - } - trunklineAdvanceEntity.setTenantId(tenant.getTenantId()); - Long l = trunklineAdvanceClient.addAdvanceReturnId(trunklineAdvanceEntity); - trunklineAdvanceEntity.setId(l); - - return trunklineAdvanceEntity; - } else { - return trunklineAdvanceEntity1; } - } - } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java index 1554d7177..f900ac3a6 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java @@ -49,11 +49,11 @@ import com.logpm.distribution.vo.app.DistributionAppParcelListVO; import com.logpm.distribution.vo.app.DistributionAppReservationVO; import com.logpm.distribution.vo.print.PrintPreviewVO; import com.logpm.distribution.wrapper.*; -import com.logpm.trunkline.feign.ITrunklinePackageTrackLogClient; import com.logpm.factorydata.enums.BrandEnums; import com.logpm.factorydata.util.FactoryDataMessageSender; import com.logpm.factorydata.vo.NodePushMsg; import com.logpm.factorydata.vo.PushData; +import com.logpm.trunkline.feign.ITrunklinePackageTrackLogClient; import com.logpm.warehouse.entity.WarehouseTrayGoodsEntity; import com.logpm.warehouse.entity.WarehouseWaybillEntity; import com.logpm.warehouse.feign.*; @@ -85,7 +85,6 @@ import org.springblade.common.constant.stockup.StockAssignStatusConstant; import org.springblade.common.constant.stockup.StockupStatusConstant; import org.springblade.common.exception.CustomerException; import org.springblade.common.serviceConstant.ServiceConstant; -import org.springblade.common.utils.CommonUtil; import org.springblade.common.utils.QRCodeUtil; import org.springblade.common.utils.StringSplitUtil; import org.springblade.common.utils.TemplateUtil; @@ -714,6 +713,8 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl>>>>>>>>>>>>>>>>>data:{}",trunklinePackageTrackLog); + } aaa.add(trunklinePackageTrackLog); orderPackageCodes.add(loadscanEntity.getOrderPackageCode()); @@ -798,7 +803,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImplquery().lambda().eq(DistributionParcelListEntity::getOrderPackageCode, distrilbutionloadingscanDTO.getBarcode())); + DistributionParcelListEntity parcelListEntity = distributionParcelListService.getOne(Wrappers.query().lambda().eq(DistributionParcelListEntity::getOrderPackageCode, distrilbutionloadingscanDTO.getBarcode()).eq(DistributionParcelListEntity::getWarehouseId, myCurrentWarehouse.getId())); List reservationEntityList = distributionDeliveryListMapper.selectReservationByDeliveryListId(distrilbutionloadingscanDTO.getDeliveryId()); boolean shangpeiFlag = reservationEntityList.stream().allMatch(r -> r.getDeliveryType().equals(DistributionTypeConstant.shipie.getValue())); if (Func.isEmpty(parcelListEntity)) { @@ -1048,7 +1053,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl>>>>>>>>>>>>>>>>>>装车修改库存品包件>装车包件码:{},",disStockListDetailEntity.getStockPackageCode()); - DistributionLoadscaninvnEntity distributionLoadscaninvnEntity = getDistributionLoadscaninvnEntity(distrilbutionloadingscanDTO, distributionDeliverySelfEntity, disStockListDetailEntities); + DistributionLoadscaninvnEntity distributionLoadscaninvnEntity = getDistributionLoadscaninvnEntity(distrilbutionloadingscanDTO, distributionDeliverySelfEntity, disStockListDetailEntities,myCurrentWarehouse); packageLockIds.add(distributionLoadscaninvnEntity.getInventoryPackageId()); distributionLoadscaninvnService.save(distributionLoadscaninvnEntity); //查询本车次是否第一次扫码,没有则更新上车时间 @@ -2244,7 +2249,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl disStockListDetailEntities) { + private static DistributionLoadscaninvnEntity getDistributionLoadscaninvnEntity(DistrilbutionloadingscanDTO distrilbutionloadingscanDTO, DistributionDeliverySelfEntity distributionDeliverySelfEntity, List disStockListDetailEntities,BasicdataWarehouseEntity warehouseEntity) { DistributionLoadscaninvnEntity distributionLoadscaninvnEntity = new DistributionLoadscaninvnEntity(); BladeUser user = AuthUtil.getUser(); String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); @@ -2272,6 +2277,8 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl>>>>>>>>>>>>>>>>>>data:{}",trunklinePackageTrackLog); + } aaa.add(trunklinePackageTrackLog); orderPackageCodes.add(loadscanEntity.getOrderPackageCode()); @@ -5575,7 +5588,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl distributionReservationStockarticleEntities = distributionReservationStockarticleService.getBaseMapper().selectList(Wrappers.query().lambda().eq(DistributionReservationStockarticleEntity::getReservationId, id).ne(DistributionReservationStockarticleEntity::getStockArticleStatus, ReservationOrderStatusConstant.quxiao.getValue())); Map> oldStockArticle = distributionReservationStockarticleEntities.stream().collect(Collectors.groupingBy(DistributionReservationStockarticleEntity::getStockArticleId)); @@ -1519,6 +1523,10 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl mallId = new ArrayList<>(); HashSet storeName = new HashSet<>(); HashSet receivingUnit = new HashSet<>(); + List addOrderPackageCodes = new ArrayList<>(); + List cancelOrderPackageCodes = new ArrayList<>(); + List addPackageLog = new ArrayList<>(); + List cancelPackageLog = new ArrayList<>(); newStockArticle.forEach((k, v) -> { List packageLockIds = new ArrayList<>(); if (Func.isEmpty(oldStockArticle.get(k))) { @@ -1542,6 +1550,25 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl ids = bladeRedis.get("warehouseId:" + myCurrentWarehouse.getId() + "orderCode:" + parcelListEntity.getOrderCode()); @@ -1838,6 +1905,10 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl { //这里就是需要进行取消的订单信息 @@ -1850,6 +1921,24 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl { p.setPacketBarStatus(ReservationPackageStatusConstant.quxiao.getValue()); distributionReservationPackageService.updateById(p); + String content = "包件在"+myCurrentWarehouse.getName()+"由"+AuthUtil.getUser().getNickName()+"取消计划配送,操作方式:取消订单,预约任务号:"+reservationEntity.getReservationCode(); + JSONObject trunklinePackageTrackLog= new JSONObject(); + trunklinePackageTrackLog.put("tenantId",reservationEntity.getTenantId()); + trunklinePackageTrackLog.put("createTime",reservationEntity.getCreateTime()); + trunklinePackageTrackLog.put("createUser",reservationEntity.getCreateUser()); + trunklinePackageTrackLog.put("updateUser",reservationEntity.getUpdateUser()); + trunklinePackageTrackLog.put("updateTime",reservationEntity.getUpdateTime()); + trunklinePackageTrackLog.put("isDeleted",reservationEntity.getIsDeleted()); + trunklinePackageTrackLog.put("status",reservationEntity.getStatus()); + trunklinePackageTrackLog.put("createDept",reservationEntity.getCreateDept()); + trunklinePackageTrackLog.put("orderPackageCode",p.getPacketBarCode()); + trunklinePackageTrackLog.put("warehouseId",reservationEntity.getWarehouseId()); + trunklinePackageTrackLog.put("warehouseName",reservationEntity.getWarehouseName()); + trunklinePackageTrackLog.put("workNode",WorkNodeEnums.CANCEL_DELIVERY.getCode()); + trunklinePackageTrackLog.put("content",content); + trunklinePackageTrackLog.put("operator",AuthUtil.getUser().getNickName()); + cancelPackageLog.add(trunklinePackageTrackLog); + cancelOrderPackageCodes.add(p.getPacketBarCode()); reduceTotal.getAndAdd(distributionParcelListService.getById(p.getParceListId()).getQuantity()); DistributionParcelListEntity parcelListEntity = distributionParcelListService.getById(p.getParceListId()); parcelListEntity.setOrderPackageReservationStatus(OrderPackageReservationStatusConstant.daiyuyue.getValue()); @@ -1894,6 +1983,9 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl reservationStocklistEntities = distributionReservationStocklistService.getBaseMapper().selectList(Wrappers.query().lambda() @@ -2030,7 +2122,8 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl l.setStockPackageStatus(InventoryPackageStatusConstant.quxiao.getValue())); disStockListDetailService.updateBatchById(list); }); - DistributionReservationEntity reservationEntity = this.getById(id); + //推送日志 + Integer reservationNum = reservationEntity.getReservationNum(); reservationEntity.setOtherFee(distributionReservationDTO.getOtherFee()); reservationEntity.setConsignee(distributionReservationDTO.getConsignee()); @@ -2593,6 +2686,8 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl 0) { + List orderPackageCodes = new ArrayList<>(); + List aaa = new ArrayList<>(); reservationStockarticleEntityList.forEach(rs -> { rs.setStockArticleStatus(ReservationOrderStatusConstant.quxiao.getValue()); // distributionReservationStockarticleService.updateById(rs); @@ -2613,10 +2708,33 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl packageList = s.getPackageListInfo(); + List orderPackageCodes = new ArrayList<>(); + List aaa = new ArrayList<>(); if (Func.isEmpty(packageList)) { //添加订单下的所有在库订单的包件 List distributionParcelListEntities = distributionParcelListService.list(Wrappers.query().lambda().eq(DistributionParcelListEntity::getStockArticleId, s.getId()) @@ -3140,19 +3260,28 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl packageIds = packageList.stream().map(DistributionParcelListEntity::getId).collect(Collectors.toList()); @@ -3168,30 +3297,33 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl qw = new QueryWrapper().lambda().eq(DistributionParcelListEntity::getStockArticleId, s.getId()); -// List parcelListEntities = distributionParcelListService.getBaseMapper().selectList(qw); -// if (packageList.size() == parcelListEntities.size()) { -// //这里就是表示进行了包件选取的操作,但是选取的包件数量为全部 -// s.setReservationStatus(OrderReservationStatusConstant.yiyueyue.getValue()); -// } else { -// s.setReservationStatus(OrderReservationStatusConstant.bufenyuyue.getValue()); -// } } distributionReservationStockarticleEntity.setReservationNum(packageNum.get()); + //日志记录 + trunklinePackageTrackLogClient.addPackageTrackLog(aaa); //维护对应订单的配送件数 -// Integer i = distributionStockArticleMapper.augmentDeliveryQuantity(distributionReservationStockarticleEntity.getStockArticleId(),distributionReservationStockarticleEntity.getReservationNum()); -// distributionStockArticleService.maintenanceOrderInfo(s.getOrderCode(),myCurrentWarehouse.getId()); } else if ("1".equals(s.getIsZero())) { //零担订单处理 if (Func.isNotBlank(s.getServiceNumber())) { diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java index 340fd992c..6d395ac60 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java @@ -785,6 +785,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl list = Func.toLongList(zeroPackageIds); @@ -1074,6 +1077,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl>>>> 签收异常报错", e); @@ -2854,6 +2861,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl>>>>>>>>>>>>>>>data:{}",trunklinePackageTrackLog); + throw new RuntimeException("该包件正在被操作,请稍后再试!!!"); + } aaa.add(trunklinePackageTrackLog); orderPackageCodes.add(loadscanEntity.getOrderPackageCode()); @@ -3431,7 +3452,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl 0) { - stockArticleEntity.setGenre(1); + t.setGenre(1); } - this.updateById(stockArticleEntity); + + // 这里在和原始对象进行比较 + + check2ObjSome(t, stockArticleEntity); + + + + // 根据跳进进行更新 + baseMapper.updateDistributionStockArticleEntityById(t); + + + +// this.updateById(stockArticleEntity);// } } else if (IsOrNoConstant.yes.getValue().equals(stockArticleEntity.getIsZero())) { //零担订单维护 @@ -2061,6 +2075,32 @@ public class DistributionStockArticleServiceImpl extends BaseServiceImpl ids) { diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/IDistributionBusinessPreOrderServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/IDistributionBusinessPreOrderServiceImpl.java index 931ce53bc..e3068030b 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/IDistributionBusinessPreOrderServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/IDistributionBusinessPreOrderServiceImpl.java @@ -1,45 +1,40 @@ package com.logpm.distribution.service.impl; import com.alibaba.fastjson.JSONObject; -import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.logpm.basicdata.entity.BasicdataWarehouseEntity; -import com.logpm.basicdata.feign.IBasicdataClientClient; import com.logpm.basicdata.feign.IBasicdataWarehouseClient; import com.logpm.business.dto.BusinessPreListDTO; import com.logpm.business.entity.DistributionBusinessPreOrderEntity; +import com.logpm.business.vo.DistributionBusinessPreCarNumberVO; import com.logpm.business.vo.DistributionBusinessPreOrderListVO; import com.logpm.business.vo.DistributionBusinessPreOrderVO; import com.logpm.distribution.bean.Resp; import com.logpm.distribution.dto.DistributionBusinessPreOrderDTO; -import com.logpm.distribution.dto.DistributionStockArticleOweDTO; import com.logpm.distribution.entity.DistributionParcelListEntity; import com.logpm.distribution.entity.DistributionStockArticleEntity; import com.logpm.distribution.mapper.DistributionBusinessPreOrderMapper; -import com.logpm.distribution.service.IDistributionAsyncService; import com.logpm.distribution.service.IDistributionBusinessPreOrderService; import com.logpm.distribution.service.IDistributionParcelListService; import com.logpm.distribution.service.IDistributionStockArticleService; +import com.logpm.trunkline.dto.InComingDTO; +import com.logpm.trunkline.feign.IInComingClient; import lombok.AllArgsConstructor; import org.springblade.common.annotations.ChangeAsync; -import org.springblade.common.annotations.LogpmAsync; -import org.springblade.common.exception.CustomerException; +import org.springblade.common.constant.IncomingTypeEnum; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; -import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @Service @@ -50,7 +45,9 @@ public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl idArray = Arrays.asList(ids.split(",")); QueryWrapper wrapper = new QueryWrapper(); wrapper.in("id", idArray); + + InComingDTO inComingDTO = new InComingDTO(); + StringBuffer sb = new StringBuffer(); List list = baseMapper.selectList(wrapper); + + List data = new ArrayList<>(); for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) { if (distributionBusinessPreOrderEntity.getInWarehouse() == 1) { throw new ServiceException("存在已入库的包件"); } - //调用方法 执行批量入库 - DistributionStockArticleEntity stockArticleEntity = buildDistributionStockArticleEntity(distributionBusinessPreOrderEntity); - if (stockArticleEntity == null) { - throw new ServiceException("订单信息错误,请联系管理员!"); + if(!sb.toString().isEmpty()){ + sb.append(","); } - // 保存包件 - distributionBusinessPreOrderEntity.setWarehouseId(stockArticleEntity.getWarehouseId()); - distributionBusinessPreOrderEntity.setWarehouse(stockArticleEntity.getWarehouse()); - distributionBusinessPreOrderEntity.setStockArticleId(stockArticleEntity.getId()); - buildDistributionParcelListEntity(distributionBusinessPreOrderEntity); + sb.append(distributionBusinessPreOrderEntity.getOrderPackageCode()); + data.add(distributionBusinessPreOrderEntity); + } - // 调用入库方法 - distributionBusinessPreOrderEntity.setInWarehouse(1); - baseMapper.updateById(distributionBusinessPreOrderEntity); + BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); + inComingDTO.setOrderPackageCode(sb.toString()); + inComingDTO.setIncomingType(IncomingTypeEnum.LINE_INCOMING.getCode()); + inComingDTO.setWarehouseId(myCurrentWarehouse.getId()); + inComingDTO.setWarehouseName(myCurrentWarehouse.getName()); + R r = inComingClient.incomingPackage(inComingDTO); + if(r.isSuccess()){ + // 更新成功 + + // 更新入库状态 + for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : data) { + + distributionBusinessPreOrderEntity.setInWarehouse(1); + baseMapper.updateById(distributionBusinessPreOrderEntity); + } } + + return true; } + + + @Override + public Integer inOrderByOrderPackageCode(String orderPackageCode,String carNum) { + + +// int a =baseMapper.updateBusinessPreOrderByOrderPackageCode(orderPackageCode); +// +// return a; + + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("order_package_code", orderPackageCode); +// wrapper.eq("in_warehouse",0); + wrapper.eq("is_deleted","0"); + List list = baseMapper.selectList(wrapper); + if(!list.isEmpty()){ + DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity = list.get(0); + + distributionBusinessPreOrderEntity.setInWarehouse(1); + return baseMapper.updateById(distributionBusinessPreOrderEntity); + } + return 0; + + + } + + @Override public IPage pacgeList(Map distributionBusinessPreOrderDTO, IPage page) { DistributionBusinessPreOrderDTO param = JSONObject.parseObject(JSONObject.toJSONString(distributionBusinessPreOrderDTO), DistributionBusinessPreOrderDTO.class); @@ -137,80 +176,86 @@ public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(DistributionBusinessPreOrderEntity::getReservationCode, reservationCode); - List list = baseMapper.selectList(queryWrapper); - - // 寻找 当前匹配的包条 - DistributionBusinessPreOrderEntity t = null; - DistributionBusinessPreOrderEntity t1 = null; - for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) { - if (distributionBusinessPreOrderEntity.getOrderPackageCode().equals(orderPackageCode)) { - // 找到匹配的包条码 - if (distributionBusinessPreOrderEntity.getInWarehouse() == 1) { - return Resp.scanSuccess("扫描成功", "包件已入库"); - } else { - t = distributionBusinessPreOrderEntity; - } - } - if (t1 == null) { - t1 = distributionBusinessPreOrderEntity; - } - } - if (t == null) { - try { - DistributionBusinessPreOrderEntity finalT = t1; - CompletableFuture distributionParcelListEntityCompletableFuture = CompletableFuture.supplyAsync(() -> this.selectByOrderPackageCode(orderPackageCode, finalT.getAcceptWarehouseId())); - - DistributionParcelListEntity distributionParcelListEntity = distributionParcelListEntityCompletableFuture.get(); - - // 如找到了 保存在当前的这个配送计划任务中 - if (distributionParcelListEntity != null) { - // 保存包件 - t = BeanUtil.copy(distributionParcelListEntity, DistributionBusinessPreOrderEntity.class); - t.setDriverName(finalT.getDriverName()); - t.setVehicleName(finalT.getVehicleName()); - t.setDistrCarNumber(finalT.getTrainNumber()); - t.setOperationStatus(1); - t.setInWarehouse(0); - this.save(t); - list.add(t); - - } - } catch (InterruptedException | ExecutionException e) { - log.error("inOrderWarehourse:", e); - throw new ServiceException("包件信息不存在!"); - } - - - } - - // 保存订单 - DistributionStockArticleEntity stockArticleEntity = buildDistributionStockArticleEntity(t); - if (stockArticleEntity == null) { - return Resp.scanFail("操作失败", "包件数据不存在"); - } - // 保存包件 - t.setWarehouseId(stockArticleEntity.getWarehouseId()); - t.setWarehouse(stockArticleEntity.getWarehouse()); - t.setStockArticleId(stockArticleEntity.getId()); - buildDistributionParcelListEntity(t); - - // 调用入库方法 - t.setInWarehouse(1); - baseMapper.updateById(t); - - queryWrapper.eq(DistributionBusinessPreOrderEntity::getInWarehouse, 1); - Long l = baseMapper.selectCount(queryWrapper); - +// // 查询当前预约单所有的包件 +// +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.eq(DistributionBusinessPreOrderEntity::getReservationCode, reservationCode); +// List list = baseMapper.selectList(queryWrapper); +// +// // 寻找 当前匹配的包条 +// DistributionBusinessPreOrderEntity t = null; +// DistributionBusinessPreOrderEntity t1 = null; +// for (DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity : list) { +// if (distributionBusinessPreOrderEntity.getOrderPackageCode().equals(orderPackageCode)) { +// // 找到匹配的包条码 +// if (distributionBusinessPreOrderEntity.getInWarehouse() == 1) { +// return Resp.scanSuccess("扫描成功", "包件已入库"); +// } else { +// t = distributionBusinessPreOrderEntity; +// } +// } +// if (t1 == null) { +// t1 = distributionBusinessPreOrderEntity; +// } +// } +// if (t == null) { +// try { +// DistributionBusinessPreOrderEntity finalT = t1; +// CompletableFuture distributionParcelListEntityCompletableFuture = CompletableFuture.supplyAsync(() -> this.selectByOrderPackageCode(orderPackageCode, finalT.getAcceptWarehouseId())); +// +// DistributionParcelListEntity distributionParcelListEntity = distributionParcelListEntityCompletableFuture.get(); +// +// // 如找到了 保存在当前的这个配送计划任务中 +// if (distributionParcelListEntity != null) { +// // 保存包件 +// t = BeanUtil.copy(distributionParcelListEntity, DistributionBusinessPreOrderEntity.class); +// t.setDriverName(finalT.getDriverName()); +// t.setVehicleName(finalT.getVehicleName()); +// t.setDistrCarNumber(finalT.getTrainNumber()); +// t.setOperationStatus(1); +// t.setInWarehouse(0); +// this.save(t); +// list.add(t); +// +// } +// } catch (InterruptedException | ExecutionException e) { +// log.error("inOrderWarehourse:", e); +// throw new ServiceException("包件信息不存在!"); +// } +// +// +// } +// +// // 保存订单 +// DistributionStockArticleEntity stockArticleEntity = buildDistributionStockArticleEntity(t); +// if (stockArticleEntity == null) { +// return Resp.scanFail("操作失败", "包件数据不存在"); +// } +// // 保存包件 +// t.setWarehouseId(stockArticleEntity.getWarehouseId()); +// t.setWarehouse(stockArticleEntity.getWarehouse()); +// t.setStockArticleId(stockArticleEntity.getId()); +// buildDistributionParcelListEntity(t); +// +// // 调用入库方法 +// t.setInWarehouse(1); +// baseMapper.updateById(t); +// +// queryWrapper.eq(DistributionBusinessPreOrderEntity::getInWarehouse, 1); +// Long l = baseMapper.selectCount(queryWrapper); + + + return Resp.scanSuccess("扫描成功", "请前往码板打托进行入库!"); + } + @Override + public IPage pageByCarNum(Map distributionBusinessPreOrderDTO, IPage page) { + IPage pageByCarNum =baseMapper.pageByCarNum(page, distributionBusinessPreOrderDTO); + return pageByCarNum; - return Resp.scanSuccess("扫描成功", l + "件"); } private void buildDistributionParcelListEntity(DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity) { @@ -238,33 +283,33 @@ public class IDistributionBusinessPreOrderServiceImpl extends BaseServiceImpl distributionStockArticleEntityCompletableFuture = CompletableFuture.supplyAsync(() -> distributionAsyncService.findDistributionStockArticleEntityByIdForAsync(distributionBusinessPreOrderEntity.getFromTenantId(), distributionBusinessPreOrderEntity.getStockArticleId())); - stockArticleEntity = distributionStockArticleEntityCompletableFuture.get(); - if (stockArticleEntity == null) { - return null; - } - // 获取当前登录人的仓库信息 - stockArticleEntity.setId(null); - stockArticleEntity.setTenantId(null); - stockArticleEntity.setWarehouseId(myCurrentWarehouse.getId()); - stockArticleEntity.setWarehouse(myCurrentWarehouse.getName()); - stockArticleEntity.setHandQuantity(0); - distributionStockArticleService.save(stockArticleEntity); - } - } catch (InterruptedException | ExecutionException e) { - log.error("buildDistributionStockArticleEntity :", e); - throw new CustomerException("系统异常,请联系管理员"); - } - return stockArticleEntity; - } +// private DistributionStockArticleEntity buildDistributionStockArticleEntity(DistributionBusinessPreOrderEntity distributionBusinessPreOrderEntity) { +// DistributionStockArticleEntity stockArticleEntity = null; +// try { +// BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); +// stockArticleEntity = distributionStockArticleService.findStockArticleByOrderCodeAndWarehouseId(distributionBusinessPreOrderEntity.getOrderCode(), +// myCurrentWarehouse.getId()); +// if (stockArticleEntity == null) { +// // 需要保存这个对象 +// CompletableFuture distributionStockArticleEntityCompletableFuture = CompletableFuture.supplyAsync(() -> distributionAsyncService.findDistributionStockArticleEntityByIdForAsync(distributionBusinessPreOrderEntity.getFromTenantId(), distributionBusinessPreOrderEntity.getStockArticleId())); +// stockArticleEntity = distributionStockArticleEntityCompletableFuture.get(); +// if (stockArticleEntity == null) { +// return null; +// } +// // 获取当前登录人的仓库信息 +// stockArticleEntity.setId(null); +// stockArticleEntity.setTenantId(null); +// stockArticleEntity.setWarehouseId(myCurrentWarehouse.getId()); +// stockArticleEntity.setWarehouse(myCurrentWarehouse.getName()); +// stockArticleEntity.setHandQuantity(0); +// distributionStockArticleService.save(stockArticleEntity); +// } +// } catch (InterruptedException | ExecutionException e) { +// log.error("buildDistributionStockArticleEntity :", e); +// throw new CustomerException("系统异常,请联系管理员"); +// } +// return stockArticleEntity; +// } @ChangeAsync() public DistributionParcelListEntity selectByOrderPackageCode(String orderPackageCode, Long warehouseId) { diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/receiver/HwyOrderStatusHandler.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/receiver/HwyOrderStatusHandler.java index 118d11573..d36c04c84 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/receiver/HwyOrderStatusHandler.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/receiver/HwyOrderStatusHandler.java @@ -22,7 +22,10 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.common.constant.RabbitConstant; import org.springblade.common.exception.CustomerException; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.StringUtil; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; @@ -54,8 +57,7 @@ public class HwyOrderStatusHandler { @RabbitHandler public void hwyOrderStatusHandler(Map map, Message message, Channel channel) throws IOException, NoSuchAlgorithmException { // 如果手动ACK,消息会被监听消费,但是消息在队列中依旧存在,如果 未配置 acknowledge-mode 默认是会在消费完毕后自动ACK掉 - final long deliveryTag = message.getMessageProperties().getDeliveryTag(); - String msg = new String(message.getBody()); + log.info("##################hwyOrderStatusHandler: 处理扫码作业数据"); OrderStatusDTO orderStatusDTO = JSONUtil.toBean((String) map.get("messageData"), OrderStatusDTO.class); String orderSelfNum = orderStatusDTO.getOrderNo();//订单自编号 diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/ChangeAsyncAnnotationAspect.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/ChangeAsyncAnnotationAspect.java new file mode 100644 index 000000000..e9f0b4091 --- /dev/null +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/ChangeAsyncAnnotationAspect.java @@ -0,0 +1,120 @@ +package com.logpm.trunkline.aspect; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.ChangeAsync; +import org.springblade.common.cache.CacheNames; +import org.springblade.common.component.MockLoginService; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.core.tool.utils.ThreadLocalUtil; +import org.springframework.core.annotation.Order; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.lang.reflect.Method; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +@Aspect +@Component +@Slf4j +@Order(-1) +@AllArgsConstructor +public class ChangeAsyncAnnotationAspect { + + private final MockLoginService mockLoginService; + + private final BladeRedis bladeRedis; + private final Environment environment; + private final RedisLockClient redisLockClient; + private final String account = "shujutongbu"; + + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ + @Around("@annotation(org.springblade.common.annotations.ChangeAsync)") + public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + ChangeAsync myAsync = method.getAnnotation(ChangeAsync.class); + String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> ChangeAsync={}", annotationValue); + + // 获取当前拦截方法的入参参数 + Object[] args = joinPoint.getArgs(); + // 获取入参名称 + String[] parameterNames = signature.getParameterNames(); + String tenantId = null; + // 获取参数名称 为tenantId 的值 + for (int i = 0; i < parameterNames.length; i++) { + if ("tenantId".equals(parameterNames[i])) { + tenantId = (String) args[i]; + log.info(">> tenandId {} ", tenantId); + break; + } + } + // 执行模拟登录 + if (StringUtil.isNotBlank(tenantId)) { + JSONObject data = bladeRedis.get(CacheNames.LOCAL_SERVER_USER + tenantId + ":" + account); + if (Objects.isNull(data)) { + boolean flag = redisLockClient.tryLock("local_server_user" + tenantId, LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if (flag) { + data = bladeRedis.get(CacheNames.LOCAL_SERVER_USER + tenantId + ":" + account); + if (Objects.isNull(data)) { + data = mockLoginService.mockToken(tenantId, account); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER + tenantId + ":" + account, data, 3200L); + redisLockClient.unLock("local_server_user" + tenantId, LockType.FAIR); + } + } + } + + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Blade-Auth", "bearer "+data.get("access_token")); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Blade-Auth","bearer "+data.get("access_token") ); + httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + ThreadLocalUtil.put("bladeContext", httpHeaders); + + DynamicDataSourceContextHolder.push(data.getString("tenant_id")); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + }else{ + return joinPoint.proceed(); + } + + +// // 在方法执行前的操作 +// String tenantId = AuthUtil.getTenantId(); +// log.info(">> tenandId {} ",tenantId); +// DynamicDataSourceContextHolder.push("627683"); +// +// // 执行原方法 +// Object result = joinPoint.proceed(); +// +// // 在方法执行后的操作 +// DynamicDataSourceContextHolder.poll(); +// return result; + } + +} diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/config/RabbitMqConfiguration.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/config/RabbitMqConfiguration.java index 886cbcfd9..a5b203311 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/config/RabbitMqConfiguration.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/config/RabbitMqConfiguration.java @@ -104,6 +104,37 @@ public class RabbitMqConfiguration { return BindingBuilder.bind(hwyOpenOrderLoadScanQueue).to(hwyOpenOrderLoadScanExchange).with(RabbitConstant.HWY_ORDER_STATUS_ROUTING).noargs(); } + @Bean + public Queue openWaybillToBusinessQueue() { + return new Queue(RabbitConstant.OPEN_WAYBILL_TO_BUSINESS_DATA_QUEUE, true); + } + @Bean + public CustomExchange openWaybillToBusinessExchange() { + Map args = Maps.newHashMap(); + args.put("x-delayed-type", "direct"); + return new CustomExchange(RabbitConstant.OPEN_WAYBILL_TO_BUSINESS_DATA_EXCHANGE, "x-delayed-message", true, false, args); + } + @Bean + public Binding openWaybillToBusinessBinding(Queue openWaybillToBusinessQueue, CustomExchange openWaybillToBusinessExchange) { + return BindingBuilder.bind(openWaybillToBusinessQueue).to(openWaybillToBusinessExchange).with(RabbitConstant.OPEN_WAYBILL_TO_BUSINESS_DATA_ROUTING).noargs(); + } + + @Bean + public Queue inWarehouseToBusinessQueue() { + return new Queue(RabbitConstant.IN_WAREHOUSE_TO_BUSINESS_DATA_QUEUE, true); + } + @Bean + public CustomExchange inWarehouseToBusinessExchange() { + Map args = Maps.newHashMap(); + args.put("x-delayed-type", "direct"); + return new CustomExchange(RabbitConstant.IN_WAREHOUSE_TO_BUSINESS_DATA_EXCHANGE, "x-delayed-message", true, false, args); + } + @Bean + public Binding inWarehouseToBusinessBinding(Queue inWarehouseToBusinessQueue, CustomExchange inWarehouseToBusinessExchange) { + return BindingBuilder.bind(inWarehouseToBusinessQueue).to(inWarehouseToBusinessExchange).with(RabbitConstant.IN_WAREHOUSE_TO_BUSINESS_DATA_ROUTING).noargs(); + } + + diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/InComingClient.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/InComingClient.java new file mode 100644 index 000000000..901f1822a --- /dev/null +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/InComingClient.java @@ -0,0 +1,22 @@ +package com.logpm.trunkline.feign; + +import com.logpm.trunkline.dto.InComingDTO; +import com.logpm.trunkline.service.IInComingService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.tool.api.R; +import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.annotations.ApiIgnore; + +@Slf4j +@ApiIgnore() +@RestController +@AllArgsConstructor +public class InComingClient implements IInComingClient{ + private final IInComingService inComingService; + @Override + public R incomingPackage(InComingDTO inComingDTO) { + + return inComingService.incomingPackage(inComingDTO); + } +} diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklinePackageTrackLogClient.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklinePackageTrackLogClient.java index 2d6c0ae0f..2e0433f47 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklinePackageTrackLogClient.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklinePackageTrackLogClient.java @@ -10,6 +10,7 @@ import springfox.documentation.annotations.ApiIgnore; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Slf4j @ApiIgnore() @@ -20,14 +21,21 @@ public class TrunklinePackageTrackLogClient implements ITrunklinePackageTrackLog private final IPackageTrackLogAsyncService packageTrackLogAsyncService; @Override - public void addPackageTrackLog(List addPackageTrackLogList, List orderPackageCodes, Integer workNode) { + public void addPackageTrackLog(List addPackageTrackLogList) { List ls = new ArrayList<>(); + List orderPackageCodes = new ArrayList<>(); + final Integer[] workNode = {null}; + addPackageTrackLogList.forEach(jsonObject -> { WarehousePackageTrackLogEntity warehousePackageTrackLogEntity = jsonObject.toJavaObject(WarehousePackageTrackLogEntity.class); + orderPackageCodes.add(warehousePackageTrackLogEntity.getOrderPackageCode()); + if (Objects.isNull(workNode[0])){ + workNode[0] = warehousePackageTrackLogEntity.getWorkNode(); + } ls.add(warehousePackageTrackLogEntity); }); - packageTrackLogAsyncService.addBatchPackageTrackLog(ls, orderPackageCodes, workNode); + packageTrackLogAsyncService.addBatchPackageTrackLog(ls, orderPackageCodes, workNode[0]); } } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklineWaybillPackageClient.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklineWaybillPackageClient.java index b4ccab6d0..0b76b097f 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklineWaybillPackageClient.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/feign/TrunklineWaybillPackageClient.java @@ -20,7 +20,6 @@ public class TrunklineWaybillPackageClient implements ITrunklineWaybillPackageCl LambdaQueryWrapper lambdaQueryWrapper =new LambdaQueryWrapper<>(); lambdaQueryWrapper.in(TrunklineWaybillPackageEntity::getWaybillId,waybillIds); - trunklineWaybillPackageService.list(lambdaQueryWrapper); return trunklineWaybillPackageService.list(lambdaQueryWrapper); } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mapper/TrunklineBillladingMapper.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mapper/TrunklineBillladingMapper.java index d0a5c8d79..b1ba3672d 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mapper/TrunklineBillladingMapper.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mapper/TrunklineBillladingMapper.java @@ -25,7 +25,7 @@ public interface TrunklineBillladingMapper extends BaseMapper findWaybillListNotBillladingId(IPage page,@Param("param") BillladingDTO billladingDTO); - IPage billladingList(IPage page, @Param("warehouseId") Long warehouseId, @Param("startByDateStr") Date startByDateStr, @Param("endByDateStr") Date endByDateStr); + IPage billladingList(IPage page, @Param("warehouseId") Long warehouseId, @Param("startByDateStr") Date startByDateStr, @Param("endByDateStr") Date endByDateStr,@Param("customerTrain") String customerTrain); List findAdvanceDetailList(@Param("orderCode") String orderCode); diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/InWarehourseToBusinessListener.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/InWarehourseToBusinessListener.java new file mode 100644 index 000000000..6f02cae40 --- /dev/null +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/InWarehourseToBusinessListener.java @@ -0,0 +1,53 @@ +package com.logpm.trunkline.mq; + +import com.alibaba.fastjson.JSONObject; +import com.logpm.distribution.feign.IDistributionBusinessPreOrderClient; +import com.rabbitmq.client.Channel; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.RabbitConstant; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 码半 + * 入库扫描 + * 触发商家的入库数据 + */ + +@Slf4j +@AllArgsConstructor +@Component +@RabbitListener(queues = RabbitConstant.IN_WAREHOUSE_TO_BUSINESS_DATA_QUEUE) +public class InWarehourseToBusinessListener { + + private final IDistributionBusinessPreOrderClient distributionBusinessPreOrderClient; + @RabbitHandler + public void inWarehourseToBusinessDataHandler(Map map, Message message, Channel channel) { + + extracted(map); + + + } + + private void extracted(Map map) { + log.info("入库扫描-触发商家的入库数据-入参:{}", map); + + JSONObject o = (JSONObject) map.get("messageData"); + + String orderPackageCode = o.getString("orderPackageCode"); + String carNum = o.getString("carNum"); + if(carNum==null){ + carNum=""; + } + + Integer i = distributionBusinessPreOrderClient.inOrderByOrderPackageCode(orderPackageCode, carNum); + log.info(">>>>>>>>>>>>>>>>>> 入库操作 执行 {}",i); + + } + +} diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/OpenWaybillToBusinessListener.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/OpenWaybillToBusinessListener.java new file mode 100644 index 000000000..80c0df1cf --- /dev/null +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/OpenWaybillToBusinessListener.java @@ -0,0 +1,148 @@ +package com.logpm.trunkline.mq; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.logpm.distribution.entity.DistributionParcelListEntity; +import com.logpm.trunkline.entity.TrunklineAdvanceEntity; +import com.logpm.trunkline.entity.TrunklineWaybillOrderEntity; +import com.logpm.trunkline.entity.TrunklineWaybillPackageEntity; +import com.logpm.trunkline.entity.TrunklineWaybillTrackEntity; +import com.logpm.trunkline.feign.ITrunklineAdvanceClient; +import com.logpm.trunkline.feign.ITrunklineAdvanceDetailClient; +import com.logpm.trunkline.feign.ITrunklineWaybillOrderClient; +import com.logpm.trunkline.feign.ITrunklineWaybillPackageClient; +import com.logpm.trunkline.service.IAsyncService; +import com.logpm.trunkline.service.ITrunklineWaybillTrackService; +import com.logpm.trunkline.vo.TrunklineAdvanceDetailVO; +import com.logpm.warehouse.entity.WarehouseWayBillDetail; +import com.logpm.warehouse.entity.WarehouseWaybillEntity; +import com.logpm.warehouse.feign.IWarehouseWaybillClient; +import com.logpm.warehouse.feign.IWarehouseWaybillDetailClient; +import com.rabbitmq.client.Channel; +import jodd.util.ArraysUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.RabbitConstant; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.ObjectUtil; +import org.springblade.system.entity.Tenant; +import org.springblade.system.feign.ISysClient; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +/** + * 运单开单数据推送商场 + *
+ *
  • 站存单
  • + *
  • 站存单明细
  • + *
  • 运单
  • + *
  • 运单关联信息
  • + *
  • 运单关联暂存单
  • + *
  • 运单关联站存单明细
  • + */ +@Slf4j +@AllArgsConstructor +@Component +@RabbitListener(queues = RabbitConstant.OPEN_WAYBILL_TO_BUSINESS_DATA_QUEUE) +public class +OpenWaybillToBusinessListener { + + + private final IWarehouseWaybillClient warehouseWaybillClient; + + private final IWarehouseWaybillDetailClient warehouseWaybillDetailClient; + + private final ITrunklineWaybillOrderClient trunklineWaybillOrderClient; + + private final ITrunklineWaybillPackageClient trunklineWaybillPackageClient; + + private final ITrunklineAdvanceClient trunklineAdvanceClient; + + private final ITrunklineAdvanceDetailClient trunklineAdvanceDetailClient; + private final ISysClient sysClient; + + private final IAsyncService asyncService; + + private ITrunklineWaybillTrackService trunklineWaybillTrackService; + + @RabbitHandler + public void openWaybillToBusinessDataHandler(Map map, Message message, Channel channel) { + + extracted(map); + + + } + + private void extracted(Map map) { + + + Long waybillId = (Long) map.get("messageData"); + if (ObjectUtil.isEmpty(waybillId)) { + log.warn("运单ID为null"); + return; + } + + // 获取运单关联的暂存单信息 + + WarehouseWaybillEntity byWaybillId = warehouseWaybillClient.findByWaybillId(waybillId); + + R> tenantList = sysClient.getTenantList(); + Tenant tenant = null; + if (tenantList.isSuccess()) { + List data = tenantList.getData(); + for (Tenant datum : data) { + if (datum.getTenantType() == 2 && datum.getTenantName().equals(byWaybillId.getConsignee().trim())) { + tenant = datum; + break; + } + } + } + + if (ObjectUtil.isEmpty(tenant)) { + log.warn(">>>>> 租户不存在"); + return; + } + List waybillBilllByWaybillNos = new ArrayList<>(); + waybillBilllByWaybillNos.add(byWaybillId); + + + + List waybillIds = new ArrayList<>(); + waybillIds.add(waybillId); + + List warehouseWayBillDetails = warehouseWaybillDetailClient.findByWaybillId(waybillId); + + List trunklineWaybillOrderEntities = trunklineWaybillOrderClient.findListByWaybillIds(waybillIds); + + List trunklineWaybillPackageEntities = trunklineWaybillPackageClient.findListByWaybillIds(waybillIds); + + // 暂存单ID集合 + List collect = trunklineWaybillOrderEntities.stream().map(TrunklineWaybillOrderEntity::getAdvanceId).distinct().collect(Collectors.toList()); + + List trunklineAdvanceEntities = trunklineAdvanceClient.findListByIds(collect); + + // 获取暂存单明细 + List trunklineAdvanceDetailEntities = trunklineAdvanceDetailClient.findListByAdvanceIds(collect); + + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TrunklineWaybillTrackEntity::getWaybillId, waybillId); + queryWrapper.eq(TrunklineWaybillTrackEntity::getTrackType, "10"); + List list = trunklineWaybillTrackService.list(queryWrapper); + TrunklineWaybillTrackEntity trunklineWaybillTrackEntity = list.get(0); + Tenant finalTenant = tenant; + CompletableFuture.supplyAsync(() -> { + asyncService.saveOtherData(finalTenant.getTenantId(), waybillBilllByWaybillNos, trunklineAdvanceDetailEntities, trunklineAdvanceEntities, trunklineWaybillPackageEntities, trunklineWaybillOrderEntities, warehouseWayBillDetails,trunklineWaybillTrackEntity); + return null; + }); + } + + +} diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/IAsyncService.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/IAsyncService.java index 00f01fade..1609f4454 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/IAsyncService.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/IAsyncService.java @@ -1,7 +1,11 @@ package com.logpm.trunkline.service; -import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; -import com.logpm.trunkline.entity.TrunklineAdvanceEntity; +import com.logpm.distribution.entity.DistributionParcelListEntity; +import com.logpm.trunkline.entity.*; +import com.logpm.trunkline.vo.TrunklineAdvanceDetailVO; +import com.logpm.warehouse.entity.WarehouseWayBillDetail; +import com.logpm.warehouse.entity.WarehouseWaybillEntity; +import org.springblade.common.annotations.ChangeAsync; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -13,4 +17,7 @@ public interface IAsyncService { CompletableFuture saveAdvanceEntity(List list, int queryType); CompletableFuture updateAdvanceEntity(List list, int queryType); + + + void saveOtherData(String tenantId, List waybillBilllByWaybillNos, List trunklineAdvanceDetailEntities, List trunklineAdvanceEntities, List trunklineWaybillPackageEntities, List trunklineWaybillOrderEntities, List warehouseWayBillDetails, TrunklineWaybillTrackEntity trunklineWaybillTrackEntity ); } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java index a88f53a8f..307dbc42f 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java @@ -1,24 +1,63 @@ package com.logpm.trunkline.service.impl; -import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; -import com.logpm.trunkline.entity.TrunklineAdvanceEntity; -import com.logpm.trunkline.service.IAsyncService; -import com.logpm.trunkline.service.ITrunklineAdvanceDetailService; -import com.logpm.trunkline.service.ITrunklineAdvanceService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.logpm.basicdata.entity.BasicdataWarehouseEntity; +import com.logpm.basicdata.feign.IBasicdataWarehouseClient; +import com.logpm.distribution.entity.DistributionParcelListEntity; +import com.logpm.trunkline.entity.*; +import com.logpm.trunkline.service.*; +import com.logpm.trunkline.vo.TrunklineAdvanceDetailVO; +import com.logpm.warehouse.entity.WarehouseWayBillDetail; +import com.logpm.warehouse.entity.WarehouseWaybillEntity; +import com.logpm.warehouse.feign.IWarehouseWaybillClient; +import com.logpm.warehouse.feign.IWarehouseWaybillDetailClient; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.ChangeAsync; import org.springblade.common.annotations.LogpmAsync; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.ObjectUtil; +import org.springblade.system.entity.Tenant; +import org.springblade.system.feign.ISysClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; @Service +@Slf4j public class AsyncServiceImpl implements IAsyncService { @Autowired private ITrunklineAdvanceService advanceService; @Autowired private ITrunklineAdvanceDetailService advanceDetailService; + @Autowired + private IWarehouseWaybillClient warehouseWaybillClient; + @Autowired + private IWarehouseWaybillDetailClient warehouseWaybillDetailClient; + @Autowired + private ISysClient sysClient; + @Autowired + private BladeRedis bladeRedis; + @Autowired + private ITrunklineWaybillOrderService waybillOrderService; + @Autowired + private ITrunklineWaybillPackageService trunklineWaybillPackageService; + + @Autowired + private IWarehouseWaybillClient waybillClient; + @Autowired + private IBasicdataWarehouseClient warehouseClient; + + @Autowired + private ITrunklineWaybillTrackService trunklineWaybillTrackService; @LogpmAsync("asyncExecutor") @Override @@ -47,4 +86,272 @@ public class AsyncServiceImpl implements IAsyncService { ); } + @ChangeAsync() + @Override + public void saveOtherData(String tenantId, List waybillBilllByWaybillNos, List trunklineAdvanceDetailEntities, List trunklineAdvanceEntities, List trunklineWaybillPackageEntities, List trunklineWaybillOrderEntities, List warehouseWayBillDetails, TrunklineWaybillTrackEntity trunklineWaybillTrackEntity) { + // 保存暂存单 + Tenant tenant = null; + R tenantFeign = sysClient.getTenant(tenantId); + + if (tenantFeign.isSuccess()) { + tenant = tenantFeign.getData(); + } + String mallName = tenant.getTenantName(); + for (TrunklineAdvanceEntity trunklineAdvanceEntity : trunklineAdvanceEntities) { + + TrunklineAdvanceEntity finalTrunklineAdvanceEntity = trunklineAdvanceEntity; + List t = trunklineAdvanceDetailEntities.stream().filter(trunklineAdvanceDetailEntity -> trunklineAdvanceDetailEntity.getAdvanceId().equals(finalTrunklineAdvanceEntity.getId())).collect(Collectors.toList()); + + saveTrunklineAdvanceEntity(trunklineAdvanceEntity, mallName); + + // 保存暂存子表 + saveTrunklineAdvanceDetailEntity(t, trunklineAdvanceEntity, mallName); + } + List collect = trunklineAdvanceEntities.stream().map(TrunklineAdvanceEntity::getId).distinct().collect(Collectors.toList()); + + // 重新查询trunklineAdvanceDetail + List listByAdvanceIds = advanceDetailService.findAdvanceDetailVoByAdvanceIds(collect); + + // 保存运单 + BasicdataWarehouseEntity basicdataWarehouseEntity = getBasicdataWarehouseEntity(mallName); + for (WarehouseWaybillEntity waybillBilllByWaybillNo : waybillBilllByWaybillNos) { + List collect1 = trunklineWaybillOrderEntities.stream().filter(trunklineWaybillOrderEntity -> trunklineWaybillOrderEntity.getWaybillId().equals(waybillBilllByWaybillNo.getId())).collect(Collectors.toList()); + List t = warehouseWayBillDetails.stream().filter(warehouseWayBillDetail -> warehouseWayBillDetail.getWaybillId().equals(waybillBilllByWaybillNo.getId())).collect(Collectors.toList()); + + + // 修改运单的起始仓库 和末端仓 + waybillBilllByWaybillNo.setDepartureWarehouseName(waybillBilllByWaybillNo.getDestinationWarehouseName()); + waybillBilllByWaybillNo.setDepartureWarehouseId(null); + + // 目的仓 + if (basicdataWarehouseEntity != null) { + waybillBilllByWaybillNo.setDestinationWarehouseId(basicdataWarehouseEntity.getId()); + waybillBilllByWaybillNo.setDestinationWarehouseName(basicdataWarehouseEntity.getName()); + } + + + waybillBilllByWaybillNo.setTenantId(tenant.getTenantId()); + + WarehouseWaybillEntity byWaybillNo = warehouseWaybillClient.findByWaybillNo(waybillBilllByWaybillNo.getWaybillNo()); + if (byWaybillNo == null) { + Long l = warehouseWaybillClient.addEnntity(waybillBilllByWaybillNo); + waybillBilllByWaybillNo.setId(l); + } else { + waybillBilllByWaybillNo.setId(byWaybillNo.getId()); + } + + + List byWaybillId = warehouseWaybillDetailClient.findByWaybillId(waybillBilllByWaybillNo.getId()); + + for (WarehouseWayBillDetail warehouseWayBillDetail : t) { + warehouseWayBillDetail.setId(null); + for (WarehouseWayBillDetail wayBillDetail : byWaybillId) { + + if (wayBillDetail.getProductName().equals(warehouseWayBillDetail.getProductName())) { + // 不执行 + warehouseWayBillDetail.setId(wayBillDetail.getId()); + break; + } + } + + if (warehouseWayBillDetail.getId() == null) { + warehouseWayBillDetail.setWaybillId(waybillBilllByWaybillNo.getId()); + warehouseWaybillDetailClient.addEntity(warehouseWayBillDetail); + } + + + } + + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("waybill_no", waybillBilllByWaybillNo.getWaybillNo()); + List listByWaybillNo = waybillOrderService.list(queryWrapper); + + for (TrunklineWaybillOrderEntity trunklineWaybillOrderEntity : collect1) { + + trunklineWaybillOrderEntity.setId(null); + List collect3 = trunklineWaybillPackageEntities.stream().filter(ts -> { + return ts.getWaybillNo().equals(trunklineWaybillOrderEntity.getWaybillNo()) && ts.getAdvanceId().equals(trunklineWaybillOrderEntity.getAdvanceId()); + }).collect(Collectors.toList()); + + trunklineWaybillOrderEntity.setWaybillId(waybillBilllByWaybillNo.getId()); + trunklineWaybillOrderEntity.setTenantId(tenant.getTenantId()); + + Optional entityWithOrderNumber1123 = trunklineAdvanceEntities.stream() + .filter(entity -> trunklineWaybillOrderEntity.getOrderCode().equals(entity.getOrderCode())) // 过滤出订单号为"1123"的实体 + .findFirst(); // 获取第一个匹配的实体 + + if (entityWithOrderNumber1123.isPresent()) { + TrunklineAdvanceEntity foundEntity = entityWithOrderNumber1123.get(); + // 使用找到的实体 + trunklineWaybillOrderEntity.setAdvanceId(foundEntity.getId()); + + } + + + for (TrunklineWaybillOrderEntity waybillOrderEntity : listByWaybillNo) { + + if (waybillOrderEntity.getOrderCode().equals(trunklineWaybillOrderEntity.getOrderCode())) { + trunklineWaybillOrderEntity.setId(waybillOrderEntity.getId()); + } + + } + if (trunklineWaybillOrderEntity.getId() == null) { + + waybillOrderService.save(trunklineWaybillOrderEntity); + + } + + + List ids = Arrays.asList(waybillBilllByWaybillNo.getId()); + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(TrunklineWaybillPackageEntity::getWaybillId, ids); + List listByWaybillIds = trunklineWaybillPackageService.list(lambdaQueryWrapper); + + for (TrunklineWaybillPackageEntity trunklineWaybillPackageEntity : collect3) { + trunklineWaybillPackageEntity.setId(null); + trunklineWaybillPackageEntity.setWaybillId(waybillBilllByWaybillNo.getId()); + trunklineWaybillPackageEntity.setTenantId(tenant.getTenantId()); + + trunklineWaybillPackageEntity.setAdvanceId(trunklineWaybillOrderEntity.getAdvanceId()); + + for (TrunklineAdvanceDetailVO listByAdvanceId : listByAdvanceIds) { + if (listByAdvanceId.getAdvanceId().equals(trunklineWaybillOrderEntity.getAdvanceId())) { + + if (listByAdvanceId.getOrderPackageCode().equals(trunklineWaybillPackageEntity.getOrderPackageCode())) { + trunklineWaybillPackageEntity.setAdvanceDetailId(listByAdvanceId.getId()); + + } + } + } + + for (TrunklineWaybillPackageEntity listByWaybillId : listByWaybillIds) { + + if (listByWaybillId.getWaybillId().equals(trunklineWaybillPackageEntity.getWaybillId())) { + if (listByWaybillId.getOrderPackageCode().equals(trunklineWaybillPackageEntity.getOrderPackageCode())) { + trunklineWaybillPackageEntity.setId(listByWaybillId.getId()); + break; + } + } + + } + if (trunklineWaybillPackageEntity.getId() == null) { + trunklineWaybillPackageService.save(trunklineWaybillPackageEntity); + } + + + } + + } + + + // 查询运单作业节点数据 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(TrunklineWaybillTrackEntity::getWaybillNo, waybillBilllByWaybillNo.getWaybillNo()); + lambdaQueryWrapper.eq(TrunklineWaybillTrackEntity::getTrackType, "10"); + List list = trunklineWaybillTrackService.list(lambdaQueryWrapper); + if (list.isEmpty()) { + + trunklineWaybillTrackEntity.setWaybillId(waybillBilllByWaybillNo.getId()); + trunklineWaybillTrackEntity.setTenantId(tenant.getTenantId()); + BasicdataWarehouseEntity basicdataWarehouseEntity1 = getBasicdataWarehouseEntity(mallName); + trunklineWaybillTrackEntity.setWarehouseId(basicdataWarehouseEntity1.getId()); + trunklineWaybillTrackEntity.setWarehouseName(basicdataWarehouseEntity1.getName()); + trunklineWaybillTrackService.save(trunklineWaybillTrackEntity); + } + + } + } + + private BasicdataWarehouseEntity getBasicdataWarehouseEntity(String mallName) { + String cacheName = mallName + "仓"; + BasicdataWarehouseEntity basicdataWarehouseEntity = bladeRedis.get(cacheName); + if (basicdataWarehouseEntity == null) { + basicdataWarehouseEntity = warehouseClient.findByName(mallName + "仓"); + bladeRedis.setEx(cacheName, basicdataWarehouseEntity, 60 * 60 * 24L); + } + return basicdataWarehouseEntity; + } + + private void saveTrunklineAdvanceDetailEntity(List t, TrunklineAdvanceEntity trunklineAdvanceEntity, String mallName) { + Tenant tenant = changeDataBase(mallName); + + + List ids = Arrays.asList(trunklineAdvanceEntity.getId()); + + List listByAdvanceIds = advanceDetailService.findAdvanceDetailVoByAdvanceIds(ids); + + + List saveObjs = new ArrayList<>(); + + for (TrunklineAdvanceDetailEntity trunklineAdvanceDetailEntity : t) { + + trunklineAdvanceDetailEntity.setId(null); + // 检测 保存的对象是否已经存在 + for (TrunklineAdvanceDetailVO listByAdvanceId : listByAdvanceIds) { + if (listByAdvanceId.getOrderPackageCode().equals(trunklineAdvanceDetailEntity.getOrderPackageCode())) { + trunklineAdvanceDetailEntity.setId(listByAdvanceId.getId()); + break; + } + } + + if (trunklineAdvanceDetailEntity.getId() == null) { + trunklineAdvanceDetailEntity.setPackageStatus("0"); + trunklineAdvanceDetailEntity.setAdvanceId(trunklineAdvanceEntity.getId()); + trunklineAdvanceDetailEntity.setTenantId(tenant.getTenantId()); + trunklineAdvanceDetailEntity.setIncomingWarehouseId(null); + trunklineAdvanceDetailEntity.setIncomingWarehouseName(null); + BasicdataWarehouseEntity basicdataWarehouseEntity = getBasicdataWarehouseEntity(mallName); + if (basicdataWarehouseEntity != null) { + trunklineAdvanceDetailEntity.setWarehouseId(basicdataWarehouseEntity.getId()); + trunklineAdvanceDetailEntity.setWarehouseName(basicdataWarehouseEntity.getName()); + } + saveObjs.add(trunklineAdvanceDetailEntity); + + } + } + advanceDetailService.saveBatch(saveObjs); + } + + + private TrunklineAdvanceEntity saveTrunklineAdvanceEntity(TrunklineAdvanceEntity trunklineAdvanceEntity, String mallName) { + Tenant tenant = changeDataBase(mallName); + // 查找商户的暂存单是否存在改制 + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_code", trunklineAdvanceEntity.getOrderCode()) + .last("limit 1"); + TrunklineAdvanceEntity trunklineAdvanceEntity1 = advanceService.getOne(queryWrapper); + BasicdataWarehouseEntity basicdataWarehouseEntity = getBasicdataWarehouseEntity(mallName); + if (ObjectUtil.isEmpty(trunklineAdvanceEntity1)) { + + // 保存对象 + if (basicdataWarehouseEntity != null) { + trunklineAdvanceEntity.setWarehouseId(basicdataWarehouseEntity.getId()); + trunklineAdvanceEntity.setWarehouseName(basicdataWarehouseEntity.getName()); + } + trunklineAdvanceEntity.setTenantId(tenant.getTenantId()); + advanceService.save(trunklineAdvanceEntity); + + return trunklineAdvanceEntity; + } else { + return trunklineAdvanceEntity1; + } + + } + + private Tenant changeDataBase(String maillName) { + R tenantByName = sysClient.getTenantByName(maillName); + if (tenantByName.isSuccess()) { + Tenant tenant = tenantByName.getData(); + if (ObjectUtil.isEmpty(tenant)) { + log.info(">>>>>>>>>>>>> saveOtherDataBaseNew 租户不存在"); + return null; + } + return tenant; + } + return null; + } + } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/InComingServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/InComingServiceImpl.java index 05ddac9ad..5753ebde6 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/InComingServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/InComingServiceImpl.java @@ -3,6 +3,7 @@ package com.logpm.trunkline.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.logpm.basicdata.entity.BasicdataWarehouseEntity; import com.logpm.basicdata.feign.IBasicdataWarehouseClient; @@ -25,10 +26,13 @@ import org.springblade.common.constant.IncomingTypeEnum; import org.springblade.common.constant.RabbitConstant; import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.exception.CustomerException; +import org.springblade.common.utils.CommonUtil; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; +import org.springblade.system.entity.Tenant; +import org.springblade.system.feign.ISysClient; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -50,6 +54,7 @@ public class InComingServiceImpl implements IInComingService { // private final DynamicDataSourceProvider dynamicDataSourceProvider; private final RabbitTemplate rabbitTemplate; private final FactoryDataMessageSender factoryDataMessageSender; + private final ISysClient sysClient; @Override @@ -109,7 +114,7 @@ public class InComingServiceImpl implements IInComingService { } //1.修改暂存单包件入库状态 - advanceDetailService.updatePackageStatusById("1", advanceDetailId, warehouseId, warehouseName,new Date()); + advanceDetailService.updatePackageStatusById("1", advanceDetailId, warehouseId, warehouseName, new Date()); List incomingWarehouseNames = advanceDetailService.findIncomingWarehouseName(advanceId); advanceService.updateIncomingWarehouseName(String.join(",", incomingWarehouseNames), advanceId); @@ -158,7 +163,7 @@ public class InComingServiceImpl implements IInComingService { NodePushMsg nodePushMsg = NodePushMsg.builder() .operator(AuthUtil.getNickName()) .operatorTime(new Date()) - .address("在【"+ warehouseName +"】入库") + .address("在【" + warehouseName + "】入库") .brand(BrandEnums.getByValue(advanceDetailEntity.getBrand())) .node(WorkNodeEnums.INITIAL_WAREHOUSE_ENTRY) .content(Arrays.asList(PushData.builder().packageCode(packageCode).build())) @@ -204,16 +209,19 @@ public class InComingServiceImpl implements IInComingService { //把advanceDetailEntityList通过packageStatus分组 Map> advanceDetailEntityMap = advanceDetailEntityList.stream().collect(Collectors.groupingBy(TrunklineAdvanceDetailEntity::getPackageStatus)); + //把advanceDetailEntityList的orderCode提取成一个Set +// Set orderCodes = advanceDetailEntityList.stream().map(TrunklineAdvanceDetailEntity::getOrderCode).collect(Collectors.toSet()); + String finalWarehouseName = warehouseName; advanceDetailEntityMap.keySet().forEach(packageStatus -> { List advanceDetailEntities = advanceDetailEntityMap.get(packageStatus); - if(!advanceDetailEntities.isEmpty()){ + if (!advanceDetailEntities.isEmpty()) { //提取advanceDetailEntities中所有元素的orderPackageCode组成一个List List orderPackageCodes = advanceDetailEntities.stream() .map(TrunklineAdvanceDetailEntity::getOrderPackageCode) .collect(Collectors.toList()); - if("0".equals(packageStatus)){ + if ("0".equals(packageStatus)) { //未入库包件 Set advanceIds = new HashSet<>(); @@ -245,7 +253,7 @@ public class InComingServiceImpl implements IInComingService { //2.判断包件和订单是否已经存入在库订单 boolean b = advanceService.saveOrderAndPackages(advanceDetailEntities, warehouseId); - if(b){ + if (b) { if (!Objects.isNull(billladingId)) { //先判断该包件是否已经有提货记录了 List noOrderPackageCodes = billladingPackageServicie.findBillladingPackages(orderPackageCodes); @@ -269,37 +277,74 @@ public class InComingServiceImpl implements IInComingService { try { advanceDetailEntities.forEach(advanceDetailEntity -> { - String packageCode = advanceDetailEntity.getOrderPackageCode(); - // 发送入库消息 - OrderStatusDTO orderStatusDTO = new OrderStatusDTO(); - // 通过包件id 查询包件 - orderStatusDTO.setUnitNo(packageCode); - orderStatusDTO.setOrderNo(advanceDetailEntity.getOrderCode()); - orderStatusDTO.setStatus("1"); - orderStatusDTO.setOperationTime(DateUtil.now()); - orderStatusDTO.setCurrentWarehouse(warehouseId.toString()); - Map map = new HashMap<>(); - map.put("messageData", JSONUtil.toJsonStr(orderStatusDTO)); - rabbitTemplate.convertAndSend(RabbitConstant.HWY_ORDER_STATUS_EXCHANGE, RabbitConstant.HWY_ORDER_STATUS_ROUTING, map); - - NodePushMsg nodePushMsg = NodePushMsg.builder() - .operator(AuthUtil.getNickName()) - .operatorTime(new Date()) - .address("在【"+ finalWarehouseName +"】入库") - .brand(BrandEnums.getByValue(advanceDetailEntity.getBrand())) - .node(WorkNodeEnums.INITIAL_WAREHOUSE_ENTRY) - .content(Arrays.asList(PushData.builder().packageCode(packageCode).build())) - .build(); - factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg); + R result = sysClient.getTenant(AuthUtil.getTenantId()); + if (result.isSuccess()) { + + Tenant tenant = result.getData(); + + if (tenant.getTenantType() == 1) { + // 发送入库消息 + OrderStatusDTO orderStatusDTO = new OrderStatusDTO(); + // 通过包件id 查询包件 + orderStatusDTO.setUnitNo(advanceDetailEntity.getOrderPackageCode()); + orderStatusDTO.setOrderNo(advanceDetailEntity.getOrderCode()); + orderStatusDTO.setStatus("1"); + orderStatusDTO.setOperationTime(DateUtil.now()); + orderStatusDTO.setCurrentWarehouse(warehouseId.toString()); + Map map = new HashMap<>(); + map.put("messageData", JSONUtil.toJsonStr(orderStatusDTO)); + rabbitTemplate.convertAndSend(RabbitConstant.HWY_ORDER_STATUS_EXCHANGE, RabbitConstant.HWY_ORDER_STATUS_ROUTING, map); + + NodePushMsg nodePushMsg = NodePushMsg.builder() + .operator(AuthUtil.getNickName()) + .operatorTime(new Date()) + .address("在【" + finalWarehouseName + "】入库") + .brand(BrandEnums.getByValue(advanceDetailEntity.getBrand())) + .node(WorkNodeEnums.INITIAL_WAREHOUSE_ENTRY) + .content(Arrays.asList(PushData.builder().packageCode(advanceDetailEntity.getOrderPackageCode()).build())) + .build(); + factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg); + } else if (tenant.getTenantType() == 2) { + // 完结预入库数据状态 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("orderPackageCode", advanceDetailEntity.getOrderPackageCode()); + jsonObject.put("carNum", null); + + Map mapState = new HashMap(); + mapState.put("messageId", CommonUtil.getUUID()); + mapState.put("messageData", jsonObject); + mapState.put("createTime", System.currentTimeMillis()); + try { + rabbitTemplate.convertAndSend(RabbitConstant.IN_WAREHOUSE_TO_BUSINESS_DATA_EXCHANGE, RabbitConstant.IN_WAREHOUSE_TO_BUSINESS_DATA_ROUTING, mapState, message -> { + message.getMessageProperties() + .setHeader("x-delay", 5000); + return message; + }); + } catch (Exception customerException) { + log.error(">>>>>>>>>>>>>>>>>>>>>>>>>> 消息推送失败~ 请联系管理员! ", customerException); + throw new CustomerException(customerException.getMessage()); + + } + + + } else { + log.warn("未知的租户类型"); + } + + } }); } catch (Exception e) { - log.error("入库推送失败:{}", e); + log.error(">>>>>>>>>>>>>>>>>>>>>>>>>> 预入库消息推送失败~ 请联系管理员! ", e); + throw new CustomerException("服务器异常"); + } - }else if("1".equals(packageStatus)){ + + + } else if ("1".equals(packageStatus)) { //已入库包件 if (incomingType != 1) { log.warn("############incomingPackage: 包件已入库 orderPackageCodes={} warehouseId={}", orderPackageCodes, warehouseId); - throw new CustomerException(405,"包件"+orderPackageCodes+"已入库"); + throw new CustomerException(405, "包件" + orderPackageCodes + "已入库"); } else { if (!Objects.isNull(billladingId)) { //先判断该包件是否已经有提货记录了 @@ -326,6 +371,8 @@ public class InComingServiceImpl implements IInComingService { }); + + // for (String packageCode : packageCodes) { // log.info("############incomingPackage: 包件入库开始 packageCode={} billladingId={} warehouseId={}", packageCode, billladingId, warehouseId); // //包件入库开始 @@ -436,7 +483,6 @@ public class InComingServiceImpl implements IInComingService { } - @Override public R findIncomingOrderList(InComingDTO inComingDTO) { Integer incomingType = inComingDTO.getIncomingType(); @@ -489,7 +535,7 @@ public class InComingServiceImpl implements IInComingService { //查询所有包件 List detailList = advanceDetailService.list(queryWrapper); - List orderPackageCodes = advanceService.incomingPackageBatch(advanceId, warehouseId, detailList, userId, deptId, tenantId,waybillEntity); + List orderPackageCodes = advanceService.incomingPackageBatch(advanceId, warehouseId, detailList, userId, deptId, tenantId, waybillEntity); advanceDetailService.updateBatchById(detailList); @@ -499,12 +545,12 @@ public class InComingServiceImpl implements IInComingService { //存入日志 packageTrackLogAsyncService.addPackageTrackLog(tenantId, userId, deptId, nickName, orderPackageCodes, warehouseId, warehouseName, WorkNodeEnums.INITIAL_WAREHOUSE_ENTRY.getCode(), "包件" + IncomingTypeEnum.getValue(incomingType)); total = total + detailList.size(); - if(CollUtil.isNotEmpty(detailList)){ + if (CollUtil.isNotEmpty(detailList)) { for (TrunklineAdvanceDetailEntity advanceDetailEntity : detailList) { NodePushMsg nodePushMsg = NodePushMsg.builder() .operator(AuthUtil.getNickName()) .operatorTime(new Date()) - .address("在【"+ warehouseName +"】入库") + .address("在【" + warehouseName + "】入库") .brand(BrandEnums.getByValue(advanceDetailEntity.getBrand())) .node(WorkNodeEnums.INITIAL_WAREHOUSE_ENTRY) .content(Arrays.asList(PushData.builder().packageCode(advanceDetailEntity.getOrderPackageCode()).build())) @@ -516,7 +562,7 @@ public class InComingServiceImpl implements IInComingService { } // DynamicDataSourceContextHolder.clear(); - return R.success("入库成功"+total+"件"); + return R.success("入库成功" + total + "件"); } } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java index 3011afb98..efe3b3885 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java @@ -36,6 +36,7 @@ import org.springblade.common.annotations.RepeatSubmit; import org.springblade.common.constant.CodeNumConstant; import org.springblade.common.constant.DictBizConstant; import org.springblade.common.constant.IncomingTypeEnum; +import org.springblade.common.constant.RabbitConstant; import org.springblade.common.constant.order.*; import org.springblade.common.exception.CustomerException; import org.springblade.common.utils.CommonUtil; @@ -46,6 +47,7 @@ import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.cache.DictBizCache; import org.springblade.system.feign.IRegionFeign; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -96,6 +98,8 @@ public class OpenOrderServiceImpl implements IOpenOrderService { private final IAsyncService asyncService; private final ICarsLoadAsyncService carsLoadAsyncService; + private final RabbitTemplate rabbitTemplate; + @Override public IPage advancePageList(AdvanceDTO advanceDTO) { IPage page = new Page<>(); @@ -146,7 +150,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { BeanUtil.copy(infoByIds, openOrderVO); openOrderVO.setAdvanceIds(advanceIds); BasicdataBrandEntity basicdataBrandEntity = basicdataBrandClient.findEntityByName(brand); - if(!Objects.isNull(basicdataBrandEntity)){ + if (!Objects.isNull(basicdataBrandEntity)) { openOrderVO.setBrandId(basicdataBrandEntity.getId()); } //发站仓-----目前登录人的仓库 @@ -251,7 +255,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { basicdataFreightApiVO.setDestination(openOrderVO.getDestinationCode()); basicdataFreightApiVO.setArrivalWarehouse(openOrderVO.getDestinationWarehouseId() + ""); - if(goodsList.isEmpty()){ + if (goodsList.isEmpty()) { List ls = new ArrayList<>(); //把list中的元素通过packName分组如果pickName为空则换为"其他" Map> groupedEntities = list.stream() @@ -273,7 +277,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { ls.add(advanceDetailGoodsVO); }); goodsList = new ArrayList<>(ls); - }else{ + } else { for (AdvanceDetailGoodsVO advanceDetailGoodsVO : goodsList) { String goodsName = advanceDetailGoodsVO.getGoodsName(); BasicdataCategoryEntity basicdataCategoryEntity = basicdataCategoryClient.findByName(goodsName); @@ -383,7 +387,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { WarehouseWaybillEntity waybillEntity = new WarehouseWaybillEntity(); waybillEntity.setWaybillNo(waybillNo); - if(Objects.isNull(brandId)){ + if (Objects.isNull(brandId)) { BasicdataBrandEntity basicdataBrandEntity = basicdataBrandClient.findEntityByName(brand); if (!Objects.isNull(basicdataBrandEntity)) { brandId = basicdataBrandEntity.getId(); @@ -622,7 +626,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { //判断是否是开单及入库的配置 Boolean aBoolean = basicdataOpenIncomingClient.checkOpenIncoming(warehouseId, brandId); if (Boolean.TRUE.equals(aBoolean)) { - openOrderAsyncService.incomingPackageBatch(advanceIds, AuthUtil.getUserId(), Func.firstLong(AuthUtil.getDeptId()), AuthUtil.getTenantId(), AuthUtil.getNickName(), IncomingTypeEnum.OPEN_TO_IN.getCode(),warehouseId,warehouseName,waybillEntity); + openOrderAsyncService.incomingPackageBatch(advanceIds, AuthUtil.getUserId(), Func.firstLong(AuthUtil.getDeptId()), AuthUtil.getTenantId(), AuthUtil.getNickName(), IncomingTypeEnum.OPEN_TO_IN.getCode(), warehouseId, warehouseName, waybillEntity); waybillEntity.setStockCount(waybillEntity.getTotalCount()); waybillEntity.setWaybillStatus("20"); warehouseWaybillClient.updateEntity(waybillEntity); @@ -648,8 +652,25 @@ public class OpenOrderServiceImpl implements IOpenOrderService { //发布开单广播 openOrderAsyncService.sendOpenWaybillFanout(waybillEntity, details, advanceIds); - Map map = new HashMap<>(); - map.put("waybillId",waybillId); + + Map mapState = new HashMap(); + mapState.put("messageId", CommonUtil.getUUID()); + mapState.put("messageData", waybillId); + mapState.put("createTime", System.currentTimeMillis()); + try { + rabbitTemplate.convertAndSend(RabbitConstant.OPEN_WAYBILL_TO_BUSINESS_DATA_EXCHANGE, RabbitConstant.OPEN_WAYBILL_TO_BUSINESS_DATA_ROUTING, mapState, message -> { + message.getMessageProperties() + .setHeader("x-delay", 5000); + return message; + }); + } catch (Exception customerException) { + log.error(">>>>>>>>>>>>>>>>>>>>>>>>>> 消息推送失败~ 请联系管理员! ", customerException); + + } + + + Map map = new HashMap<>(); + map.put("waybillId", waybillId); return R.data(map); } @@ -905,10 +926,10 @@ public class OpenOrderServiceImpl implements IOpenOrderService { Long warehouseId = advanceDTO.getWarehouseId(); //查询包件是否已经不在库 - List parcelListEntities = distributionParcelListClient.findPackagesByAdvanceIdsAndNoStock(advanceIds,warehouseId); - if(!parcelListEntities.isEmpty()){ + List parcelListEntities = distributionParcelListClient.findPackagesByAdvanceIdsAndNoStock(advanceIds, warehouseId); + if (!parcelListEntities.isEmpty()) { log.warn("############deletedAdvance: 已有包件出库,不能删除"); - throw new CustomerException(405,"已有包件出库,不能删除"); + throw new CustomerException(405, "已有包件出库,不能删除"); } for (Long advanceId : advanceIds) { @@ -917,7 +938,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { advanceService.deletedAdvance(advanceIds); //删除所有在库包件,并更新订单信息 - distributionParcelListClient.findAllOrderCodesAndDeleteByAdvanceIds(advanceIds,warehouseId); + distributionParcelListClient.findAllOrderCodesAndDeleteByAdvanceIds(advanceIds, warehouseId); } @@ -1090,7 +1111,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { List batchPackageCodeByType = basicdataCodeClient.getBatchPackageCodeByType(warehouseCode, orderCode, totalNumber); batchPackageCodeByType.forEach(item -> { TrunklineAdvanceDetailEntity advanceDetailEntity = new TrunklineAdvanceDetailEntity(); - BeanUtil.copy(advanceDetailModel,advanceDetailEntity); + BeanUtil.copy(advanceDetailModel, advanceDetailEntity); advanceDetailEntity.setOrderPackageCode(item); detailEntities.add(advanceDetailEntity); }); @@ -1173,8 +1194,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { List advanceDetailEntities = new ArrayList<>(); - - Map advanceEntityMap = new HashMap<>(); + Map advanceEntityMap = new HashMap<>(); List advanceIds = new ArrayList<>(); @@ -1201,8 +1221,8 @@ public class OpenOrderServiceImpl implements IOpenOrderService { detailEntities.forEach(advanceEntity -> { String orderCode = advanceEntity.getOrderCode(); String trainNumber = advanceEntity.getTrainNumber(); - String key = orderCode + "&" + (StringUtil.isBlank(trainNumber)?"null":trainNumber); - advanceEntityMap.put(key,advanceEntity); + String key = orderCode + "&" + (StringUtil.isBlank(trainNumber) ? "null" : trainNumber); + advanceEntityMap.put(key, advanceEntity); }); List updateAdvanceEntityList = new ArrayList<>(); @@ -1277,7 +1297,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { List comlist = new ArrayList<>(); for (int i = 0; i < advanceEntitiesList.size(); i++) { List list = advanceEntitiesList.get(i); - CompletableFuture fromCpFirstReq = asyncService.saveAdvanceEntity(list, i+1); + CompletableFuture fromCpFirstReq = asyncService.saveAdvanceEntity(list, i + 1); comlist.add(fromCpFirstReq); } CompletableFuture.allOf(comlist.toArray(new CompletableFuture[0])).join(); @@ -1290,7 +1310,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { List comlist = new ArrayList<>(); for (int i = 0; i < advanceEntitiesList.size(); i++) { List list = advanceEntitiesList.get(i); - CompletableFuture fromCpFirstReq = asyncService.updateAdvanceEntity(list, i+1); + CompletableFuture fromCpFirstReq = asyncService.updateAdvanceEntity(list, i + 1); comlist.add(fromCpFirstReq); } CompletableFuture.allOf(comlist.toArray(new CompletableFuture[0])).join(); @@ -1298,33 +1318,32 @@ public class OpenOrderServiceImpl implements IOpenOrderService { } - advanceEntityList.forEach(advanceEntity -> { advanceIds.add(advanceEntity.getId()); String trainNumber = advanceEntity.getTrainNumber(); - advanceEntityMap.put(advanceEntity.getOrderCode()+"&"+(StringUtil.isBlank(trainNumber)?"null":trainNumber),advanceEntity); + advanceEntityMap.put(advanceEntity.getOrderCode() + "&" + (StringUtil.isBlank(trainNumber) ? "null" : trainNumber), advanceEntity); }); //通过advanceIds查询所有advanceDetail QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in("advance_id",advanceIds) - .eq("is_deleted",0); + queryWrapper.in("advance_id", advanceIds) + .eq("is_deleted", 0); List advanceDetailEntityList = advanceDetailService.list(queryWrapper); //把advanceDetailEntityList通过advanceId分组并且把集合转化为orderPackageCode的集合 Map> map = advanceDetailEntityList.parallelStream().collect(Collectors.groupingBy(TrunklineAdvanceDetailEntity::getAdvanceId, Collectors.mapping(TrunklineAdvanceDetailEntity::getOrderPackageCode, Collectors.toList()))); - Map materialMap = new HashMap<>(); + Map materialMap = new HashMap<>(); listMap.keySet().forEach(str -> { List pacakgeDetailExcelList = listMap.get(str); TrunklineAdvanceEntity advanceEntity = advanceEntityMap.get(str); - if(!Objects.isNull(advanceEntity)){ + if (!Objects.isNull(advanceEntity)) { Long advanceId = advanceEntity.getId(); String orderCode = advanceEntity.getOrderCode(); List orderPackageCodes = map.get(advanceId); pacakgeDetailExcelList.forEach(pacakgeDetailExcelDTO -> { String orderPackageCode = pacakgeDetailExcelDTO.getOrderPackageCode(); - if(Objects.isNull(orderPackageCodes) || !orderPackageCodes.contains(orderPackageCode)){ + if (Objects.isNull(orderPackageCodes) || !orderPackageCodes.contains(orderPackageCode)) { TrunklineAdvanceDetailEntity advanceDetailModel = new TrunklineAdvanceDetailEntity(); advanceDetailModel.setWarehouseId(warehouseId); advanceDetailModel.setWarehouseName(warehouseName); @@ -1353,7 +1372,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { advanceDetailModel.setPackageStatus("0"); if (!Objects.isNull(pacakgeDetailExcelDTO.getVolume())) { advanceDetailModel.setVolume(new BigDecimal(pacakgeDetailExcelDTO.getVolume())); - }else{ + } else { advanceDetailModel.setVolume(BigDecimal.ZERO); } @@ -1362,21 +1381,21 @@ public class OpenOrderServiceImpl implements IOpenOrderService { if (StringUtil.isNotBlank(materialCode) && StringUtil.isNotBlank(materialName)) { Long materialId = materialMap.get(materialCode); - if(!Objects.isNull(materialId)){ + if (!Objects.isNull(materialId)) { advanceDetailModel.setMaterialId(materialId); advanceDetailModel.setMaterialCode(materialCode); advanceDetailModel.setMaterialName(materialName); - }else{ + } else { BasicMaterialEntity basicMaterialEntity = basicMaterialClient.findEntityByCodeAndName(materialCode, materialName); if (Objects.isNull(basicMaterialEntity)) { basicMaterialEntity = new BasicMaterialEntity(); basicMaterialEntity.setProductCode(materialCode); basicMaterialEntity.setName(materialName); BasicdataBrandEntity basicdataBrandEntity = basicdataBrandClient.findEntityByName(pacakgeDetailExcelDTO.getBrand()); - if(Objects.isNull(basicdataBrandEntity)){ + if (Objects.isNull(basicdataBrandEntity)) { basicMaterialEntity.setBrandId("1713382405517201409"); - }else{ - basicMaterialEntity.setBrandId(basicdataBrandEntity.getId()+""); + } else { + basicMaterialEntity.setBrandId(basicdataBrandEntity.getId() + ""); } basicMaterialEntity.setProperty("家配"); basicMaterialEntity.setSpecification("件"); @@ -1387,12 +1406,12 @@ public class OpenOrderServiceImpl implements IOpenOrderService { basicMaterialEntity.setHide(1); Long aLong = basicMaterialClient.addMaterial(basicMaterialEntity); basicMaterialEntity.setId(aLong); - materialMap.put(materialCode,aLong); + materialMap.put(materialCode, aLong); advanceDetailModel.setMaterialId(aLong); advanceDetailModel.setMaterialCode(materialCode); advanceDetailModel.setMaterialName(materialName); - }else{ - materialMap.put(materialCode,basicMaterialEntity.getId()); + } else { + materialMap.put(materialCode, basicMaterialEntity.getId()); advanceDetailModel.setMaterialId(basicMaterialEntity.getId()); advanceDetailModel.setMaterialCode(basicMaterialEntity.getProductCode()); advanceDetailModel.setMaterialName(basicMaterialEntity.getName()); @@ -1465,9 +1484,9 @@ public class OpenOrderServiceImpl implements IOpenOrderService { .map(Map.Entry::getKey) .collect(Collectors.toSet()); - if(!duplicateOrderPackageCodes.isEmpty()){ - log.warn("#################importCustomizedOuPai: 包条码重复 {}",duplicateOrderPackageCodes); - return R.fail(405, "包条码重复"+duplicateOrderPackageCodes); + if (!duplicateOrderPackageCodes.isEmpty()) { + log.warn("#################importCustomizedOuPai: 包条码重复 {}", duplicateOrderPackageCodes); + return R.fail(405, "包条码重复" + duplicateOrderPackageCodes); } List orderPackageCodeKeys = new ArrayList<>(importCustomizedOuPaiDTOSet); @@ -1494,8 +1513,8 @@ public class OpenOrderServiceImpl implements IOpenOrderService { List advanceEntityList = new ArrayList<>(); List updateAdvanceEntityList = new ArrayList<>(); - if(importCustomizedOuPaiDTOS.isEmpty()){ - log.warn("##################importCustomizedOuPai: 没有需要处理的数据 importCustomizedOuPaiDTOS={}",importCustomizedOuPaiDTOS); + if (importCustomizedOuPaiDTOS.isEmpty()) { + log.warn("##################importCustomizedOuPai: 没有需要处理的数据 importCustomizedOuPaiDTOS={}", importCustomizedOuPaiDTOS); return R.data(advanceEntityList); } @@ -1537,8 +1556,8 @@ public class OpenOrderServiceImpl implements IOpenOrderService { detailEntities.forEach(advanceEntity -> { String orderCode = advanceEntity.getOrderCode(); String trainNumber = advanceEntity.getTrainNumber(); - String key = orderCode + "&" + (StringUtil.isBlank(trainNumber)?"null":trainNumber); - advanceEntityMap.put(key,advanceEntity); + String key = orderCode + "&" + (StringUtil.isBlank(trainNumber) ? "null" : trainNumber); + advanceEntityMap.put(key, advanceEntity); }); listMap.keySet().forEach(str -> { @@ -1700,7 +1719,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { List comlist = new ArrayList<>(); for (int i = 0; i < advanceDetailEntitiesList.size(); i++) { List list = advanceDetailEntitiesList.get(i); - CompletableFuture fromCpFirstReq = asyncService.getResponseFromCp(list, i+1); + CompletableFuture fromCpFirstReq = asyncService.getResponseFromCp(list, i + 1); comlist.add(fromCpFirstReq); } CompletableFuture.allOf(comlist.toArray(new CompletableFuture[0])).join(); @@ -1941,7 +1960,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService { String volume = importStandardOuPaiDTO.getVolume(); if(StringUtil.isBlank(volume)){ advanceDetailModel.setVolume(BigDecimal.ZERO); - }else{ + } else { advanceDetailModel.setVolume(new BigDecimal(importStandardOuPaiDTO.getVolume())); } advanceDetailModel.setTrainNumber(advanceEntity.getTrainNumber()); diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java index 7c7ce51d2..bd2e12cbf 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java @@ -726,7 +726,7 @@ public class TrunklineAdvanceServiceImpl extends BaseServiceImpl advanceEntityList = findListByIds(new ArrayList<>(advanceIdSet)); Map advanceEntityMap = new HashMap<>(); - if(advanceEntityList.isEmpty()){ + if(!advanceEntityList.isEmpty()){ advanceEntityMap = advanceEntityList.stream().collect(Collectors.toMap(TrunklineAdvanceEntity::getOrderCode, Function.identity())); } @@ -868,10 +868,10 @@ public class TrunklineAdvanceServiceImpl extends BaseServiceImpl{ + stockArticleClient.updateOrderInfo(orderCode,warehouseId); + }); + // String orderPackageCode = advanceDetailEntity.getOrderPackageCode(); // String orderCode = advanceDetailEntity.getOrderCode(); diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java index 670a2cca8..ef127277d 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java @@ -612,7 +612,7 @@ public class TrunklineBillladingServiceImpl extends BaseServiceImpl map = baseMapper.billladingNum(warehouseId,CommonUtil.getStartByDateStr(startDateStr),CommonUtil.getEndByDateStr(endDateStr),customerTrain); - IPage ls = baseMapper.billladingList(page,warehouseId,CommonUtil.getStartByDateStr(startDateStr),CommonUtil.getEndByDateStr(endDateStr)); + IPage ls = baseMapper.billladingList(page,warehouseId,CommonUtil.getStartByDateStr(startDateStr),CommonUtil.getEndByDateStr(endDateStr),customerTrain); Map m = new HashMap<>(); if(!Objects.isNull(map)){ diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java index c4181984a..5d4cd0ad3 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java @@ -34,6 +34,7 @@ import com.logpm.factorydata.vo.PushData; import com.logpm.trunkline.bean.Resp; import com.logpm.trunkline.dto.*; import com.logpm.trunkline.entity.*; +import com.logpm.trunkline.feign.ITrunklinePackageTrackLogClient; import com.logpm.trunkline.mapper.TrunklineCarsLoadMapper; import com.logpm.trunkline.service.*; import com.logpm.trunkline.vo.*; @@ -112,9 +113,11 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl loadCarsPageList(LoadCarsDTO loadCarsDTO) { + IPage page = new Page<>(); page.setCurrent(loadCarsDTO.getPageNum()); page.setSize(loadCarsDTO.getPageSize()); diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseUpdownStockupAreaServiceImpl.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseUpdownStockupAreaServiceImpl.java index 4ce20a389..603b9530e 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseUpdownStockupAreaServiceImpl.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseUpdownStockupAreaServiceImpl.java @@ -251,7 +251,8 @@ public class WarehouseUpdownStockupAreaServiceImpl extends BaseServiceImpl warehouseUpdownStockupAreaEntityList = this.list(Wrappers.query().lambda() @@ -261,7 +262,9 @@ public class WarehouseUpdownStockupAreaServiceImpl extends BaseServiceImpl 1) { boolean flag = warehouseUpdownStockupAreaEntityList.stream().anyMatch(item -> !item.getAssociationType().equals("3")); diff --git a/blade-service/pom.xml b/blade-service/pom.xml index c7b5c2aac..69f65ccb5 100644 --- a/blade-service/pom.xml +++ b/blade-service/pom.xml @@ -47,6 +47,8 @@ logpm-factory-data logpm-data-sharing + + logpm-business