Browse Source

2024年4月19日17:35:01

纪新园 1 year ago
parent
commit
a6467756e1

+ 0 - 74
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/config/XxlJobConfig.java

@@ -1,74 +0,0 @@
-package org.springblade.salesPart.config;
-
-import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * xxl-job config
- *
- * @author xuxueli 2017-04-28
- */
-@Configuration
-public class XxlJobConfig {
-	private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
-
-	@Value("${xxl.job.admin.addresses}")
-	private String adminAddresses;
-
-	@Value("${xxl.job.executor.appname}")
-	private String appName;
-
-	@Value("${xxl.job.executor.ip}")
-	private String ip;
-
-	@Value("${xxl.job.executor.port}")
-	private int port;
-
-	@Value("${xxl.job.accessToken}")
-	private String accessToken;
-
-	@Value("${xxl.job.executor.logpath}")
-	private String logPath;
-
-	@Value("${xxl.job.executor.logretentiondays}")
-	private int logRetentionDays;
-
-
-	@Bean
-	public XxlJobSpringExecutor xxlJobExecutor() {
-		logger.info(">>>>>>>>>>> xxl-job config init.");
-		XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
-		xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
-		xxlJobSpringExecutor.setAppName(appName);
-		xxlJobSpringExecutor.setIp(ip);
-		xxlJobSpringExecutor.setPort(port);
-		xxlJobSpringExecutor.setAccessToken(accessToken);
-		xxlJobSpringExecutor.setLogPath(logPath);
-		xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
-
-		return xxlJobSpringExecutor;
-	}
-
-	/**
-	 * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
-	 *
-	 *      1、引入依赖:
-	 *          <dependency>
-	 *             <groupId>org.springframework.cloud</groupId>
-	 *             <artifactId>spring-cloud-commons</artifactId>
-	 *             <version>${version}</version>
-	 *         </dependency>
-	 *
-	 *      2、配置文件,或者容器启动变量
-	 *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
-	 *
-	 *      3、获取IP
-	 *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
-	 */
-
-
-}

+ 29 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsDescServiceImpl.java

@@ -811,6 +811,8 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R saveCorpsDescApp(PjCorpsDesc corpsDesc) {
 		Long userId = SecureUtil.getUserId();
 		Long deptId = Long.valueOf(AuthUtil.getDeptId());
@@ -895,7 +897,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 
 			//保存客户联系人信息
 			PjCorpsAttn corpsAttn = new PjCorpsAttn();
-			if (ObjectUtils.isNotNull(user)) {
+			/*if (ObjectUtils.isNotNull(user)) {
 				long count = corpsAttnService.count(new LambdaQueryWrapper<PjCorpsAttn>()
 					.eq(PjCorpsAttn::getUserId, user.getId())
 					.eq(PjCorpsAttn::getTel, corpsDesc.getTel())
@@ -905,6 +907,19 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 					throw new RuntimeException("手机号已存在,提交失败");
 				}
 				corpsAttn.setUserId(user.getId());
+			}*/
+			List<PjCorpsAttn> corpsAttnList = corpsAttnService.list(new LambdaQueryWrapper<PjCorpsAttn>()
+				.eq(PjCorpsAttn::getTel,corpsDesc.getTel())
+				.eq(PjCorpsAttn::getTenantId,AuthUtil.getTenantId())
+				.eq(PjCorpsAttn::getIsDeleted,0)
+				.eq(PjCorpsAttn::getSalesCompanyId,AuthUtil.getDeptId()));
+			if (!corpsAttnList.isEmpty()){
+				PjCorpsDesc pjCorpsDesc1 = baseMapper.selectById(corpsAttnList.get(0).getPid());
+				if (pjCorpsDesc1 != null){
+					throw new RuntimeException("该手机号:"+corpsDesc.getTel()+"已经在客户:"+pjCorpsDesc1.getCname()+"注册,请修改客户名称");
+				}else{
+					throw new RuntimeException("该手机号未查到客户信息");
+				}
 			}
 			corpsAttn.setCname(corpsDesc.getAttn());
 			corpsAttn.setTel(corpsDesc.getTel());
@@ -1209,6 +1224,19 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 
 				//保存客户联系人信息
 				PjCorpsAttn corpsAttn = new PjCorpsAttn();
+				List<PjCorpsAttn> corpsAttnList = corpsAttnService.list(new LambdaQueryWrapper<PjCorpsAttn>()
+					.eq(PjCorpsAttn::getTel,corpsDesc.getTel())
+					.eq(PjCorpsAttn::getTenantId,AuthUtil.getTenantId())
+					.eq(PjCorpsAttn::getIsDeleted,0)
+					.eq(PjCorpsAttn::getSalesCompanyId,AuthUtil.getDeptId()));
+				if (!corpsAttnList.isEmpty()){
+					PjCorpsDesc pjCorpsDesc1 = baseMapper.selectById(corpsAttnList.get(0).getPid());
+					if (pjCorpsDesc1 != null){
+						throw new RuntimeException("该手机号:"+corpsDesc.getTel()+"已经在客户:"+pjCorpsDesc1.getCname()+"注册,请修改客户名称");
+					}else{
+						throw new RuntimeException("该手机号未查到客户信息");
+					}
+				}
 				User user = userClient.loginByAccount("", corpsDesc.getTel(), "4", AuthUtil.getTenantId(), resDept.getData().getAppletsId());
 				if (ObjectUtils.isNotNull(user)) {
 					long count = corpsAttnService.count(new LambdaQueryWrapper<PjCorpsAttn>()

+ 9 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java

@@ -328,7 +328,15 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 			deptList = res.getData();
 		}
 		List<Dept> finalDeptList = deptList;
-		String cnames = data.stream().map(GoodsExcel::getCname).distinct().filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<String> cnameList = data.stream().map(GoodsExcel::getCname).distinct().filter(Objects::nonNull).collect(Collectors.toList());
+		if (cnameList.size() != data.size()){
+			throw new RuntimeException("商品名称存在重复");
+		}
+		List<String> codeList = data.stream().map(GoodsExcel::getCode).distinct().filter(Objects::nonNull).collect(Collectors.toList());
+		if (codeList.size() != data.size()){
+			throw new RuntimeException("商品编号存在重复");
+		}
+		String cnames = String.join(",",cnameList);
 		List<PjStockDesc> stockDescList = stockDescService.list(new LambdaQueryWrapper<PjStockDesc>()
 			.eq(PjStockDesc::getIsDeleted, 0)
 			.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())

+ 0 - 25
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/handler/SynchronizeDataJobHandler.java

@@ -1,25 +0,0 @@
-package org.springblade.salesPart.handler;
-
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.handler.annotation.XxlJob;
-import lombok.AllArgsConstructor;
-import org.springblade.salesPart.michelinApi.service.IMichelinService;
-import org.springframework.stereotype.Component;
-
-@Component
-@AllArgsConstructor
-public class SynchronizeDataJobHandler {
-
-	private final IMichelinService michelinService;
-
-	/**
-	 * @throws Exception
-	 */
-	@XxlJob("synchronizeDataJobHandler")
-	public ReturnT<String> synchronizeDataJobHandler(String param) throws Exception {
-		System.out.println("==========================请求成功================================");
-		michelinService.getSalesOrder(param);
-		return ReturnT.SUCCESS;
-	}
-
-}

+ 39 - 3
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -1140,9 +1140,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				StringBuilder goodsName = new StringBuilder();
 				StringBuilder retrieval = new StringBuilder();
 				List<Long> goodsId = order.getOrderItemsList().stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
-				if (goodsId.size() != order.getOrderItemsList().size()) {
+				List<String> goodsNames = order.getOrderItemsList().stream().map(PjOrderItems::getGoodsName).distinct().collect(Collectors.toList());
+				/*if (goodsId.size() != order.getOrderItemsList().size()) {
 					throw new RuntimeException("明细存在重复商品,请修改明细数据");
-				}
+				}*/
 				List<PjStockDesc> pjStockDescList = stockDescService.list(new LambdaQueryWrapper<PjStockDesc>()
 					.eq(ObjectUtils.isNotNull(order.getStorageId()), PjStockDesc::getStorageId, order.getStorageId())
 					.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
@@ -1158,12 +1159,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					}
 				}
 				for (PjOrderItems item : order.getOrderItemsList()) {
-					item.setBillKey(item.getGoodsId() + item.getGoodsNo() + item.getDot());
+					item.setBillKey(item.getGoodsId() + item.getDot());
 				}
 				List<PjOrderItems> reducelList = order.getOrderItemsList().stream().filter(distinctByKey(PjOrderItems::getBillKey)).collect(Collectors.toList());
 				if (reducelList.size() != order.getOrderItemsList().size()) {
 					throw new RuntimeException("明细数据存在重复商品,请先处理后再保存");
 				}
+				if (goodsId.size() != goodsNames.size()){
+					throw new RuntimeException("明细数据存在改名并重名商品,请联系管理员处理");
+				}
 				for (PjOrderItems item : order.getOrderItemsList()) {
 					BigDecimal balanceQuantity = new BigDecimal("0.00");
 					BigDecimal inventoryAmount = new BigDecimal("0.00");
@@ -1417,6 +1421,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				.eq(PjOrderItems::getPid, pjOrder.getId());
 			List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
 			if (ObjectUtil.isNotEmpty(itemsList)) {
+				List<Long> goodsId = itemsList.stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
+				List<String> goodsNames = itemsList.stream().map(PjOrderItems::getGoodsName).distinct().collect(Collectors.toList());
+				for (PjOrderItems item : order.getOrderItemsList()) {
+					item.setBillKey(item.getGoodsId() + item.getDot());
+				}
+				List<PjOrderItems> reducelList = order.getOrderItemsList().stream().filter(distinctByKey(PjOrderItems::getBillKey)).collect(Collectors.toList());
+				if (reducelList.size() != order.getOrderItemsList().size()) {
+					throw new RuntimeException("明细数据存在重复商品,请先处理后再保存");
+				}
+				if (goodsId.size() != goodsNames.size()){
+					throw new RuntimeException("明细数据存在改名并重名商品,请联系管理员处理");
+				}
 				itemsList.forEach(e -> {
 					LambdaQueryWrapper<PjProductLaunch> queryWrapper = new LambdaQueryWrapper<>();
 					queryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
@@ -1667,6 +1683,26 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		pjOrder.setGenerateTask(OrderTypeEnum.SCRW.getType());
 		baseMapper.updateById(pjOrder);
 
+		LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+			.eq(PjOrderItems::getIsDeleted, 0)
+			.eq(PjOrderItems::getPid, pjOrder.getId());
+		List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
+		if (ObjectUtil.isNotEmpty(itemsList)) {
+			List<Long> goodsId = itemsList.stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
+			List<String> goodsNames = itemsList.stream().map(PjOrderItems::getGoodsName).distinct().collect(Collectors.toList());
+			for (PjOrderItems item : order.getOrderItemsList()) {
+				item.setBillKey(item.getGoodsId() + item.getDot());
+			}
+			List<PjOrderItems> reducelList = order.getOrderItemsList().stream().filter(distinctByKey(PjOrderItems::getBillKey)).collect(Collectors.toList());
+			if (reducelList.size() != order.getOrderItemsList().size()) {
+				throw new RuntimeException("明细数据存在重复商品,请先处理后再保存");
+			}
+			if (goodsId.size() != goodsNames.size()) {
+				throw new RuntimeException("明细数据存在改名并重名商品,请联系管理员处理");
+			}
+		}
+
 		LocalDateTime now = LocalDateTime.now();
 		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 		String formatted = now.format(formatter);

+ 13 - 5
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -1268,8 +1268,12 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			throw new SecurityException("导入数据不能为空");
 		}
 		List<PjOrderItems> list = new ArrayList<>();
-		String goodsNames = excelList.stream().map(ShipItemImportExcel::getGoodsName)
-			.filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<String> goodsNameList = excelList.stream().map(ShipItemImportExcel::getGoodsName).distinct()
+			.filter(Objects::nonNull).collect(Collectors.toList());
+		if (excelList.size() != goodsNameList.size()){
+			throw new RuntimeException("导入数据存在重复商品名称,请处理后再导入");
+		}
+		String goodsNames = String.join(",",goodsNameList);
 		LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjGoodsDesc::getIsDeleted, 0)
@@ -1925,8 +1929,12 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			throw new SecurityException("导入数据不能为空");
 		}
 		List<PjOrderItems> list = new ArrayList<>();
-		String codes = excelList.stream().map(ShipItemImportCodeExcel::getCode)
-			.filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<String> codesList = excelList.stream().map(ShipItemImportCodeExcel::getCode).distinct()
+			.filter(Objects::nonNull).collect(Collectors.toList());
+		if (excelList.size() != codesList.size()){
+			throw new RuntimeException("导入数据存在重复商品编码,请处理后再导入");
+		}
+		String codes = String.join(",",codesList);
 		LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjGoodsDesc::getIsDeleted, 0)
@@ -1971,7 +1979,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				item.setUnits(goodsDesc.getUnit());
 				item.setSendNum(new BigDecimal("0"));
 			} else {
-				throw new RuntimeException("第" + (i + 2) + "行,商品名称不存在");
+				throw new RuntimeException("第" + (i + 2) + "行,商品编码不存在");
 			}
 
 			list.add(item);

+ 0 - 21
blade-service/blade-sales-part/src/main/resources/application-dev.yml

@@ -7,24 +7,3 @@ spring:
     url: ${blade.datasource.dev.url}
     username: ${blade.datasource.dev.username}
     password: ${blade.datasource.dev.password}
-    #    url: jdbc:sqlserver://27.223.90.210:1402;DatabaseName=MichelinRTM2023
-    #    # 数据库用户名
-    #    username: sa
-    #    # 数据库密码
-    #    password: yn@123
-    #    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-#mybatis-plus:
-#  mapper-locations: classpath:com/yh/project/mapper/*Mapper.xml
-#  type-aliases-package: com.yh.project.*.entity
-#swagger文档
-xxl:
-  job:
-    accessToken: ''
-    admin:
-      addresses: http://127.0.0.1:10031/xxl-job-admin
-    executor:
-      appname: blade-land
-      ip: 127.0.0.1
-      logpath: applogs/xxl-job/jobhandler
-      logretentiondays: -1
-      port: 10033

+ 37 - 37
blade-service/blade-sales-part/src/main/resources/log/logback-dev.xml

@@ -58,56 +58,56 @@
     </if>
 
     <!-- 日志输出级别 -->
-    <root level="info">
+    <root level="ERROR">
         <appender-ref ref="STDOUT"/>
         <appender-ref ref="${STDOUT_APPENDER}"/>
     </root>
 
-    <logger name="net.sf.ehcache" level="info"/>
-    <logger name="druid.sql" level="info"/>
+    <logger name="net.sf.ehcache" level="ERROR"/>
+    <logger name="druid.sql" level="ERROR"/>
 
 
     <!-- MyBatis log configure -->
-    <logger name="com.apache.ibatis" level="info"/>
-    <logger name="org.mybatis.spring" level="info"/>
-    <logger name="java.sql.Connection" level="info"/>
-    <logger name="java.sql.Statement" level="info"/>
-    <logger name="java.sql.PreparedStatement" level="info"/>
+    <logger name="com.apache.ibatis" level="ERROR"/>
+    <logger name="org.mybatis.spring" level="ERROR"/>
+    <logger name="java.sql.Connection" level="ERROR"/>
+    <logger name="java.sql.Statement" level="ERROR"/>
+    <logger name="java.sql.PreparedStatement" level="ERROR"/>
 
     <!-- 减少部分debug日志 -->
-    <logger name="druid.sql" level="info"/>
-    <logger name="org.apache.shiro" level="info"/>
-    <logger name="org.mybatis.spring" level="info"/>
-    <logger name="org.springframework" level="info"/>
-    <logger name="org.springframework.context" level="info"/>
-    <logger name="org.springframework.beans" level="info"/>
-    <logger name="com.baomidou.mybatisplus" level="info"/>
-    <logger name="org.apache.ibatis.io" level="info"/>
-    <logger name="org.apache.velocity" level="info"/>
-    <logger name="org.eclipse.jetty" level="info"/>
-    <logger name="io.undertow" level="info"/>
-    <logger name="org.xnio.nio" level="info"/>
-    <logger name="org.thymeleaf" level="info"/>
-    <logger name="springfox.documentation" level="info"/>
-    <logger name="org.hibernate.validator" level="info"/>
-    <logger name="com.netflix.loadbalancer" level="info"/>
-    <logger name="com.netflix.hystrix" level="info"/>
-    <logger name="com.netflix.zuul" level="info"/>
-    <logger name="de.codecentric" level="info"/>
-    <!-- cache INFO -->
-    <logger name="net.sf.ehcache" level="info"/>
-    <logger name="org.springframework.cache" level="info"/>
+    <logger name="druid.sql" level="ERROR"/>
+    <logger name="org.apache.shiro" level="ERROR"/>
+    <logger name="org.mybatis.spring" level="ERROR"/>
+    <logger name="org.springframework" level="ERROR"/>
+    <logger name="org.springframework.context" level="ERROR"/>
+    <logger name="org.springframework.beans" level="ERROR"/>
+    <logger name="com.baomidou.mybatisplus" level="ERROR"/>
+    <logger name="org.apache.ibatis.io" level="ERROR"/>
+    <logger name="org.apache.velocity" level="ERROR"/>
+    <logger name="org.eclipse.jetty" level="ERROR"/>
+    <logger name="io.undertow" level="ERROR"/>
+    <logger name="org.xnio.nio" level="ERROR"/>
+    <logger name="org.thymeleaf" level="ERROR"/>
+    <logger name="springfox.documentation" level="ERROR"/>
+    <logger name="org.hibernate.validator" level="ERROR"/>
+    <logger name="com.netflix.loadbalancer" level="ERROR"/>
+    <logger name="com.netflix.hystrix" level="ERROR"/>
+    <logger name="com.netflix.zuul" level="ERROR"/>
+    <logger name="de.codecentric" level="ERROR"/>
+    <!-- cache ERROR -->
+    <logger name="net.sf.ehcache" level="ERROR"/>
+    <logger name="org.springframework.cache" level="ERROR"/>
     <!-- cloud -->
-    <logger name="org.apache.http" level="info"/>
-    <logger name="com.netflix.discovery" level="info"/>
-    <logger name="com.netflix.eureka" level="info"/>
+    <logger name="org.apache.http" level="ERROR"/>
+    <logger name="com.netflix.discovery" level="ERROR"/>
+    <logger name="com.netflix.eureka" level="ERROR"/>
     <!-- 业务日志 -->
-    <Logger name="org.springblade" level="info"/>
-    <Logger name="org.springblade.core.tenant" level="info"/>
-    <Logger name="org.springblade.core.version" level="info"/>
+    <Logger name="org.springblade" level="ERROR"/>
+    <Logger name="org.springblade.core.tenant" level="ERROR"/>
+    <Logger name="org.springblade.core.version" level="ERROR"/>
 
     <!-- 减少nacos日志 -->
-    <logger name="com.alibaba.nacos" level="info"/>
+    <logger name="com.alibaba.nacos" level="ERROR"/>
 
 
 </configuration>