Browse Source

更新U9客户档案获取数据数据权限校验

zdd 3 tháng trước cách đây
mục cha
commit
1ac4254265
52 tập tin đã thay đổi với 336 bổ sung89 xóa
  1. 6 0
      blade-common/pom.xml
  2. 12 0
      blade-common/src/main/java/org/springblade/common/config/MD5Util.java
  3. 45 0
      blade-common/src/main/java/org/springblade/common/utils/PinYinUtil.java
  4. 12 0
      blade-service-api/blade-user-api/pom.xml
  5. 16 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
  6. 21 3
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  7. 6 0
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/PcBladeOrderMapper.java
  8. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeBrandAuthorizeMapper.xml
  9. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeClaimAttachmentMapper.xml
  10. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeClaimAuditMapper.xml
  11. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeClaimMapper.xml
  12. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeComplaintAttachmentMapper.xml
  13. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeComplaintMapper.xml
  14. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeComplaintReplyMapper.xml
  15. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeCustomerAddressMapper.xml
  16. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeDealerForecastMapper.xml
  17. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeDealerInventoryMapper.xml
  18. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeImageStoreApplyAttachmentMapper.xml
  19. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeImageStoreApplyMapper.xml
  20. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeMarketingActivityApprovalMapper.xml
  21. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeMarketingActivityAttachmentMapper.xml
  22. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeMarketingActivityMapper.xml
  23. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeNoticeCategoryMapper.xml
  24. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeNoticeMapper.xml
  25. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderInvoiceItemMapper.xml
  26. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderInvoiceMapper.xml
  27. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderItemMapper.xml
  28. 11 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderMapper.xml
  29. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderShipmentItemMapper.xml
  30. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderShipmentMapper.xml
  31. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSalesForecastSummaryMapper.xml
  32. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSalesLeadDetailMapper.xml
  33. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSalesLeadMapper.xml
  34. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeShipmentTrackingMapper.xml
  35. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyMapper.xml
  36. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyOptionMapper.xml
  37. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyQuestionMapper.xml
  38. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyResultMapper.xml
  39. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewCustomerSelMapper.xml
  40. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewDepartmentSelMapper.xml
  41. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewItemSelMapper.xml
  42. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewOperatorsSelMapper.xml
  43. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewShipSelMapper.xml
  44. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewSupplierSelMapper.xml
  45. 1 1
      blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewWhqohSelMapper.xml
  46. 40 16
      blade-service/blade-factory/src/main/java/org/springblade/factory/service/impl/PcBladeOrderServiceImpl.java
  47. 2 1
      blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
  48. 6 0
      blade-service/blade-u9cloud/pom.xml
  49. 2 0
      blade-service/blade-u9cloud/src/main/java/org/springblade/u9cloud/U9cloudApplication.java
  50. 45 1
      blade-service/blade-u9cloud/src/main/java/org/springblade/u9cloud/service/impl/ZcrmViewCustomerSelServiceImpl.java
  51. 73 30
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  52. 2 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

+ 6 - 0
blade-common/pom.xml

@@ -17,6 +17,12 @@
     <dependencies>
 
         <dependency>
+            <groupId>com.belerweb</groupId>
+            <artifactId>pinyin4j</artifactId>
+            <version>2.5.0</version>
+        </dependency>
+
+        <dependency>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
             <version>1.4</version>

+ 12 - 0
blade-common/src/main/java/org/springblade/common/config/MD5Util.java

@@ -4,6 +4,8 @@ import org.apache.commons.codec.binary.Base64;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 
 /**
  * @desc: md5工具类
@@ -70,4 +72,14 @@ public class MD5Util {
 	}
 
 
+	public static String encryptionData(String data) throws NoSuchAlgorithmException {
+		MessageDigest md = MessageDigest.getInstance("MD5");
+		byte[] digest = md.digest(data.getBytes());
+		StringBuilder sb = new StringBuilder();
+		for (byte b : digest) {
+			sb.append(String.format("%02x", b));
+		}
+		return sb.toString();
+	}
+
 }

+ 45 - 0
blade-common/src/main/java/org/springblade/common/utils/PinYinUtil.java

@@ -0,0 +1,45 @@
+package org.springblade.common.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import org.springframework.util.StringUtils;
+
+/**
+ * @author Rain
+ */
+@Slf4j
+public class PinYinUtil {
+
+
+	public static String getUserNamePinYin(String userName) {
+		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+		StringBuilder pinyin = new StringBuilder();
+		String userNameNotBlank = userName.replaceAll("\\s+", "");
+		if (!StringUtils.hasText(userNameNotBlank)) {
+			return "";
+		}
+		for (char c : userNameNotBlank.toCharArray()) {
+			try {
+				String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
+				if (pinyinArray != null) {
+					pinyin.append(pinyinArray[0]);
+				} else {
+					pinyin.append(c);
+				}
+			} catch (Exception e) {
+				log.error("同步经销商用户转换拼音失败:{}", e.getMessage());
+			}
+		}
+		return pinyin.toString();
+
+	}
+
+
+
+
+}

+ 12 - 0
blade-service-api/blade-user-api/pom.xml

@@ -19,6 +19,18 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-cache</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-u9cloud-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springblade</groupId>
+                    <artifactId>blade-core-secure</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
 
 </project>

+ 16 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java

@@ -137,4 +137,20 @@ public class User extends TenantEntity {
 	 */
 	@ApiModelProperty(value = "小程序id")
 	private String appletsId;
+
+
+	/**
+	 * 用户类型
+	 * 1: 工厂
+	 * 2: 经销商
+	 * 3: 门店
+	 * 4: 车主
+	 */
+	private Integer userTypeRole;
+
+	/**
+	 * u9 客户id
+	 */
+	private Long customerId;
+
 }

+ 21 - 3
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@@ -8,12 +8,14 @@ import org.springblade.core.tool.api.R;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
+import org.springblade.u9cloud.entity.ZcrmViewCustomerSel;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Map;
 
@@ -42,7 +44,6 @@ public interface IUserClient {
 	String USER_INFO_BY_IDS = API_PREFIX + "/user-info-by-ids";
 	String USER_INFO_BY_NAME_PRECISION = API_PREFIX + "/user-info-by-name-precision";
 	String LIST_USER_BY_ROLE_ID = API_PREFIX + "/listUserByRoleId";
-	String GET_USER_PAGE = API_PREFIX + "/getUserPage";
 	String USER_BY_IDS = API_PREFIX + "/selectUserIds";
 
 	String USER_BY_NAME = API_PREFIX + "/selectUserByName";
@@ -53,8 +54,7 @@ public interface IUserClient {
 	String SELECT_USER_BY_NAMES_NEW = API_PREFIX + "/selectUserByNamesNew";
 	String GET_USER_BY_ROLE = API_PREFIX + "/getUserByRole";
 	String UPDATE_USER_BY_ID = API_PREFIX + "/updateUserById";
-	String XCX_USER_INFO_BY_WEB_USER_ID = API_PREFIX + "/getXcxUserListByWebUserId";
-	String WEB_USER_BY_XCX_USER_PHONE = API_PREFIX + "/getWebUserByXcxUserPhone";
+
 	String UPDATE_USER_BATCH_BY_ID = API_PREFIX + "/updateUserBatchById";
 
 	String SELECT_LIST_NOT_TENANT_ID = API_PREFIX + "/selectListNotTenantId";
@@ -68,6 +68,12 @@ public interface IUserClient {
 
 	String GET_USER_INFO_BY_PHONE = API_PREFIX + "/getUserInfoByPhone";
 
+	String INSERT_OR_UPDATE_DEALER_USER = API_PREFIX + "insertOrUpdateDealerUser";
+
+
+
+
+
 	@GetMapping(LIST_USER_BY_ROLE_ID)
 	R<List<User>> listUserByRoleId(@RequestParam("roleId") String roleId, @RequestParam(value = "tenantId", required = false) String tenantId, @RequestParam(value = "salesCompanyId", required = false) String salesCompanyId);
 
@@ -296,4 +302,16 @@ public interface IUserClient {
 	@GetMapping(GET_USER_INFO_BY_PHONE)
 	UserInfo getUserInfoByPhone(@RequestParam("phone") String phone, @RequestParam("category") Integer category);
 
+
+	/**
+	 * 批量插入或更新经销商信息
+	 *
+	 * @param customerSelList 客户信息
+	 * @return 结果
+	 * @throws NoSuchAlgorithmException 加密异常
+	 */
+	@PostMapping(INSERT_OR_UPDATE_DEALER_USER)
+	R<String> insertOrUpdateDealerUser(@RequestBody List<ZcrmViewCustomerSel> customerSelList) throws NoSuchAlgorithmException;
+
+
 }

+ 6 - 0
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/PcBladeOrderMapper.java

@@ -2,8 +2,14 @@ package org.springblade.factory.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springblade.factory.entity.PcBladeOrder;
 
 @Mapper
 public interface PcBladeOrderMapper extends BaseMapper<PcBladeOrder> {
+
+	// 用注解直接编写SQL,无需XML
+	@Select("SELECT COUNT(1) > 0 FROM pc_blade_order WHERE order_code = #{orderCode} AND is_deleted = 0")
+	boolean checkOrderCodeExists(@Param("orderCode") String orderCode);
 }

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeBrandAuthorizeMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeBrandAuthorizeMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeBrandAuthorizeMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeClaimAttachmentMapper.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeClaimAttachmentMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeClaimAttachmentMapper">
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeClaimAuditMapper.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeClaimAuditMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeClaimAuditMapper">
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeClaimMapper.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeClaimMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeClaimMapper">
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeComplaintAttachmentMapper.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeComplaintAttachmentMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeComplaintAttachmentMapper">
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeComplaintMapper.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeComplaintMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeComplaintMapper">
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeComplaintReplyMapper.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeComplaintReplyMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeComplaintReplyMapper">
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeCustomerAddressMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeCustomerAddressMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeCustomerAddressMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeDealerForecastMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeDealerForecastMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeDealerForecastMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeDealerInventoryMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeDealerInventoryMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeDealerInventoryMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeImageStoreApplyAttachmentMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeImageStoreApplyAttachmentMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeImageStoreApplyAttachmentMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeImageStoreApplyMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeImageStoreApplyMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeImageStoreApplyMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeMarketingActivityApprovalMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeMarketingActivityApprovalMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeMarketingActivityApprovalMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeMarketingActivityAttachmentMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeMarketingActivityAttachmentMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeMarketingActivityAttachmentMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeMarketingActivityMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeMarketingActivityMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeMarketingActivityMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeNoticeCategoryMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeNoticeCategoryMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeNoticeCategoryMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeNoticeMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeNoticeMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeNoticeMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderInvoiceItemMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeOrderInvoiceItemMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeOrderInvoiceItemMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderInvoiceMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeOrderInvoiceMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeOrderInvoiceMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderItemMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeOrderItemMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeOrderItemMapper">
 
 </mapper>

+ 11 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderMapper.xml

@@ -1,5 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeOrderMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeOrderMapper">
+
+
+    <!-- 检查订单编号是否存在 -->
+    <select id="checkOrderCodeExists" parameterType="java.lang.String" resultType="java.lang.Boolean">
+        SELECT COUNT(1) > 0
+        FROM pc_blade_order
+        WHERE order_code = #{orderCode}
+          AND is_deleted = 0
+    </select>
+
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderShipmentItemMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeOrderShipmentItemMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeOrderShipmentItemMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeOrderShipmentMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeOrderShipmentMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeOrderShipmentMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSalesForecastSummaryMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeSalesForecastSummaryMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeSalesForecastSummaryMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSalesLeadDetailMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeSalesLeadDetailMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeSalesLeadDetailMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSalesLeadMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeSalesLeadMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeSalesLeadMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeShipmentTrackingMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeShipmentTrackingMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeShipmentTrackingMapper">
 
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeSurveyMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeSurveyMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyOptionMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeSurveyOptionMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeSurveyOptionMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyQuestionMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeSurveyQuestionMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeSurveyQuestionMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/PcBladeSurveyResultMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.PcBladeSurveyResultMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.PcBladeSurveyResultMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewCustomerSelMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.ZcrmViewCustomerSelMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.ZcrmViewCustomerSelMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewDepartmentSelMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.ZcrmViewDepartmentSelMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.ZcrmViewDepartmentSelMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewItemSelMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.ZcrmViewItemSelMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.ZcrmViewItemSelMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewOperatorsSelMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.ZcrmViewOperatorsSelMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.ZcrmViewOperatorsSelMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewShipSelMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.ZcrmViewShipSelMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.ZcrmViewShipSelMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewSupplierSelMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.ZcrmViewSupplierSelMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.ZcrmViewSupplierSelMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 1 - 1
blade-service/blade-factory/src/main/java/org/springblade/factory/mapper/xml/ZcrmViewWhqohSelMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.factory.mapper.ZcrmViewWhqohSelMapper">
+<mapper namespace="org.springblade.factory.mapper.xml.ZcrmViewWhqohSelMapper">
     <!-- 在这里添加自定义的 SQL 映射,如果有的话 -->
 </mapper>

+ 40 - 16
blade-service/blade-factory/src/main/java/org/springblade/factory/service/impl/PcBladeOrderServiceImpl.java

@@ -16,6 +16,7 @@ import org.springblade.factory.mapper.PcBladeOrderMapper;
 import org.springblade.factory.service.PcBladeOrderItemService;
 import org.springblade.factory.service.PcBladeOrderService;
 import org.springblade.factory.vo.PcBladeOrderVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -149,7 +150,8 @@ public class PcBladeOrderServiceImpl extends BaseServiceImpl<PcBladeOrderMapper,
 		return order;
 	}
 
-
+	// 关键:通过@Autowired注入Mapper
+	private final PcBladeOrderMapper orderMapper;
 	/**
 	 * 保存订单及明细的完整业务逻辑
 	 */
@@ -166,9 +168,25 @@ public class PcBladeOrderServiceImpl extends BaseServiceImpl<PcBladeOrderMapper,
 			throw new ServiceException("至少有一条订单明细");
 		}
 
-		// 3. 生成订单编号
+		// 3. 生成并检查订单编号(完全基础的方式,不依赖QueryWrapper)
+		String orderCode;
 		if (StringUtils.isBlank(pcBladeOrder.getOrderCode())) {
-			pcBladeOrder.setOrderCode("DDH-" + factoryUitls.createOrderNo());
+			// 自动生成编号
+			orderCode = generateOrderCode();
+			// 检查是否存在(使用自定义查询方法)
+			boolean exists = orderMapper.checkOrderCodeExists(orderCode);
+			if (exists) {
+				// 存在则重新生成
+				orderCode = generateOrderCode();
+			}
+			pcBladeOrder.setOrderCode(orderCode);
+		} else {
+			// 检查前端传入的编号
+			orderCode = pcBladeOrder.getOrderCode();
+			boolean exists = orderMapper.checkOrderCodeExists(orderCode);
+			if (exists) {
+				throw new ServiceException("订单编号已存在:" + orderCode);
+			}
 		}
 
 		// 4. 设置订单创建信息
@@ -190,33 +208,39 @@ public class PcBladeOrderServiceImpl extends BaseServiceImpl<PcBladeOrderMapper,
 		}
 
 		// 7. 保存订单明细
-		int successCount = 0;
 		List<PcBladeOrderItem> itemList = pcBladeOrder.getPcBladeOrderItemList();
-
 		for (PcBladeOrderItem item : itemList) {
-			// 设置明细关联的订单ID
 			item.setOrderId(orderId);
-			// 设置明细的创建信息
+			item.setOrderCode(orderCode);
 			item.setCreateUser(AuthUtil.getUserId());
 			item.setCreateTime(new Date());
+			item.setUpdateTime(new Date());
+			item.setUpdateUser(AuthUtil.getUserId());
+
+			if (item.getStatus() == null) {
+				item.setStatus(0);
+			}
+			if (item.getIsDeleted() == null) {
+				item.setIsDeleted(0);
+			}
 
 			boolean isItemSaved = orderItemService.insertPcBladeOrderItem(item);
-			if (isItemSaved) {
-				successCount++;
-			} else {
-				// 明细保存失败,抛出异常回滚事务
+			if (!isItemSaved) {
 				throw new ServiceException("订单明细保存失败,订单ID:" + orderId);
 			}
 		}
 
-		// 8. 验证所有明细是否都保存成功
-		if (successCount != itemList.size()) {
-			throw new ServiceException("订单明细保存不完整,订单ID:" + orderId);
-		}
-
 		return orderId;
 	}
 
+	/**
+	 * 生成订单编号
+	 */
+	private String generateOrderCode() {
+		return "DDH-" + System.currentTimeMillis() + "-" + (int)(Math.random() * 9000 + 1000);
+	}
+
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean updateOrderWithItems(PcBladeOrder pcBladeOrder) {

+ 2 - 1
blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java

@@ -61,7 +61,8 @@ public class SysClient implements ISysClient {
 			roleLambdaQueryWrapper
 				.eq(Role::getRoleAlias, alias)
 				.eq(Role::getIsDeleted, 0)
-				.eq(Role::getTenantId, AuthUtil.getTenantId());
+				.eq(Role::getTenantId, AuthUtil.getTenantId())
+				.last(" limit  1");
 			Role role = roleService.getOne(roleLambdaQueryWrapper);
 			if (role == null) {
 				throw new SecurityException("暂未查到符合的角色");

+ 6 - 0
blade-service/blade-u9cloud/pom.xml

@@ -51,6 +51,12 @@
             <artifactId>hutool-all</artifactId>
             <version>5.8.20</version> <!-- 版本号可根据最新稳定版调整 -->
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-user</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
blade-service/blade-u9cloud/src/main/java/org/springblade/u9cloud/U9cloudApplication.java

@@ -7,6 +7,7 @@ import org.springblade.core.cloud.feign.EnableBladeFeign;
 import org.springblade.core.launch.BladeApplication;
 import org.springblade.core.launch.constant.AppConstant;
 import org.springframework.cloud.client.SpringCloudApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
  *
  * @author Chill
  */
+@EnableFeignClients(basePackages = "org.springblade.system.user.feign")
 @BladeCloudApplication
 @SpringCloudApplication
 public class U9cloudApplication {

+ 45 - 1
blade-service/blade-u9cloud/src/main/java/org/springblade/u9cloud/service/impl/ZcrmViewCustomerSelServiceImpl.java

@@ -2,6 +2,9 @@ package org.springblade.u9cloud.service.impl;
 
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.api.R;
+import org.springblade.system.user.feign.IUserClient;
+import org.springblade.system.user.feign.UserClient;
 import org.springblade.u9cloud.common.U9cloudGetTokenUtil;
 import org.springblade.u9cloud.entity.ViewApiResponse;
 import org.springblade.u9cloud.entity.ZcrmViewCustomerSel;
@@ -52,6 +55,10 @@ public class ZcrmViewCustomerSelServiceImpl extends BaseServiceImpl<ZcrmViewCust
 		return this.saveBatch(customers);
 	}
 
+
+
+	private final IUserClient userClient;
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean insertBatchCustomers() {
@@ -71,6 +78,7 @@ public class ZcrmViewCustomerSelServiceImpl extends BaseServiceImpl<ZcrmViewCust
 
 		HttpEntity<Map<String, Object>> requestEntity = new HttpEntity(requestBody, headers);
 
+
 		// 4. 发送 POST
 		RestTemplate restTemplate = new RestTemplate();
 		ParameterizedTypeReference<ViewApiResponse<ZcrmViewCustomerSel>> typeRef =
@@ -82,10 +90,46 @@ public class ZcrmViewCustomerSelServiceImpl extends BaseServiceImpl<ZcrmViewCust
 		// 5. 处理结果
 		ViewApiResponse<ZcrmViewCustomerSel> apiResponse = response.getBody();
 
+		// 将 ViewApiResponse<ZcrmViewCustomerSel> 转成 List<ZcrmViewCustomerSel>
+		try {
+			if (apiResponse != null && apiResponse.isSuccess()) {
+				List<ZcrmViewCustomerSel> customerList = apiResponse.getData();
+				// 检查数据列表不为空再调用接口
+				if (customerList != null && !customerList.isEmpty()) {
+					R<String> result = userClient.insertOrUpdateDealerUser(customerList);
+					System.out.println(result); // R(code=400, success=false, data=null, msg=缺少经销商角色,请先维护角色)
+					// 将R对象转换为Map
+					Map<String, Object> resultMap = new HashMap<>();
+					// 通过反射获取R对象的属性值
+					Class<?> rClass = result.getClass();
+					resultMap.put("code", rClass.getMethod("getCode").invoke(result));
+					resultMap.put("success", rClass.getMethod("isSuccess").invoke(result));
+					resultMap.put("data", rClass.getMethod("getData").invoke(result));
+					resultMap.put("msg", rClass.getMethod("getMsg").invoke(result));
+					// 根据Map中的值进行判断
+					if (!(boolean) resultMap.get("success")) {
+						String errorMsg = (String) resultMap.get("msg");
+						int code = (int) resultMap.get("code");
+
+						// 处理缺少经销商角色的错误
+						if (code == 400) {
+							System.err.println("返回数据:" + resultMap.get("msg"));
+							return false;
+						}
+					} else {
+						System.err.println("同步用户数据成功,返回数据:" + resultMap.get("data"));
+					}
+				}
+			}
+		} catch (Exception e) {
+			// 可以考虑在这里抛出异常让事务回滚,根据业务需求决定
+			 throw new RuntimeException("同步用户数据失败", e);
+		}
+
 		boolean res = false;
 		if (apiResponse != null && apiResponse.isSuccess()) {
 			List<ZcrmViewCustomerSel> customers1 = apiResponse.getData();
-			if (!customers1.isEmpty()) {
+			if (customers1 != null && !customers1.isEmpty()) {
 				res = this.saveBatch(customers1);
 			}
 		}

+ 73 - 30
blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@@ -5,25 +5,35 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import org.springblade.common.config.MD5Util;
+//import org.springblade.common.utils.PinYinUtil;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.DigestUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.entity.Role;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
 import org.springblade.system.user.enums.UserEnum;
 import org.springblade.system.user.service.IUserService;
+import org.springblade.u9cloud.entity.ZcrmViewCustomerSel;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -91,37 +101,10 @@ public class UserClient implements IUserClient {
 	@Override
 	public List<User> userListGetByIds(List<Long> ids) {
 		LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
-
 		lqw.in(User::getId, ids);
-//		for (int i = 0; i < ids.size(); i++) {
-//			if (ids.size() - 1 == 1) {
-//				lqw.eq(User::getId, ids.get(i));
-//			} else {
-//				lqw.eq(User::getId, ids.get(i)).or();
-//			}
-//
-//		}
-//		ids.forEach(id -> lqw.eq(User::getId, id).or());
 		return service.list(lqw);
 	}
 
-//	@Override
-//	public List<User> getXcxUserListByWebUserId(List<Long> ids) {
-//		List<User> users = this.userListGetByIds(ids);
-//		List<String> phoneList = users.stream().map(User::getPhone).filter(Objects::nonNull).collect(Collectors.toList());
-//		LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
-//		lqw.in(User::getPhone, phoneList);
-//		lqw.eq(User::getUserType, 4);
-//		return service.list(lqw);
-//	}
-//
-//	@Override
-//	public User getWebUserByXcxUserPhone(String phone) {
-//		LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
-//		lqw.eq(User::getPhone, phone)
-//			.eq(User::getUserType, 1);
-//		return service.getOne(lqw);
-//	}
 
 	@Override
 	@GetMapping(USER_INFO_BY_NAME_PRECISION)
@@ -317,6 +300,66 @@ public class UserClient implements IUserClient {
 		return service.getUserInfoByPhone(phone, category);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R<String> insertOrUpdateDealerUser(List<ZcrmViewCustomerSel> customerSelList) throws NoSuchAlgorithmException {
+		if (CollectionUtils.isEmpty(customerSelList)) {
+			return R.fail("无客户数据");
+		}
+		R<Long> dealerRole = sysClient.getRoleByAlias("dealer");
+		if (!dealerRole.isSuccess() || Objects.isNull(dealerRole.getData())) {
+			return R.fail("缺少经销商角色,请先维护角色");
+		}
+		BladeUser bladeUser = AuthUtil.getUser();
+		R<Dept> dealerDept = sysClient.getDeptIByName(bladeUser.getTenantId(), "经销商");
+		if (!dealerDept.isSuccess() || Objects.isNull(dealerDept.getData())) {
+			return R.fail("缺少经销商部门,请先维护部门");
+		}
+		Dept dept = dealerDept.getData();
+		String dealerRoleId = String.valueOf(dealerRole.getData());
+		List<User> dealerUserList = service.list(new LambdaQueryWrapper<User>().eq(User::getTenantId, bladeUser.getTenantId()).eq(User::getUserTypeRole, 2));
+		List<User> insertOrUpdateUserList = new ArrayList<>();
+		Date nowDate = DateUtil.now();
+		if (!CollectionUtils.isEmpty(dealerUserList)) {
+			dealerUserList.forEach(usr -> usr.setIsDeleted(1));
+		}
+		for (ZcrmViewCustomerSel customerSel : customerSelList) {
+			User insertOrUpdateUser = new User();
+			insertOrUpdateUserList.add(insertOrUpdateUser);
+			User srcUser = dealerUserList.stream().filter(u -> customerSel.getCustomerId().equals(u.getCustomerId()) && customerSel.getCustomerCode().equals(u.getCode())).findFirst().orElse(null);
+			if (srcUser == null) {
+				insertOrUpdateUser.setPassword(DigestUtil.hex(MD5Util.encryptionData("Kbs@888")));
+				insertOrUpdateUser.setCreateTime(nowDate);
+			} else {
+				insertOrUpdateUser.setId(srcUser.getId());
+				insertOrUpdateUser.setUpdateTime(nowDate);
+				srcUser.setIsDeleted(0);
+			}
+			insertOrUpdateUser.setDeptId(String.valueOf(dept.getId()));
+			insertOrUpdateUser.setUserType(1);
+			insertOrUpdateUser.setCode(customerSel.getCustomerCode());
+			insertOrUpdateUser.setName(customerSel.getCustomerName());
+			insertOrUpdateUser.setRealName(customerSel.getCustomerName());
+			insertOrUpdateUser.setCustomerId(customerSel.getCustomerId());
+			insertOrUpdateUser.setRoleId(dealerRoleId);
+			insertOrUpdateUser.setAccount(customerSel.getCustomerCode());
+			// insertOrUpdateUser.setAccount(customerSel.getDescFlexFieldPrivateDescSeg1());
+			insertOrUpdateUser.setPhone(customerSel.getDescFlexFieldPrivateDescSeg2());
+			insertOrUpdateUser.setBankDeposit(customerSel.getBuyerBankAccount());
+			insertOrUpdateUser.setBankAccount(customerSel.getBuyerBankAccountCode());
+			insertOrUpdateUser.setUserTypeRole(2);
+		}
+		List<User> delUserList = dealerUserList.stream().filter(u -> u.getIsDeleted() == 1).collect(Collectors.toList());
+		for (User user : delUserList) {
+			User delUser = new User();
+			delUser.setId(user.getId());
+			delUser.setIsDeleted(1);
+			delUser.setUpdateTime(nowDate);
+			insertOrUpdateUserList.add(delUser);
+		}
+		boolean updateCount = service.saveOrUpdateBatch(insertOrUpdateUserList);
+		return updateCount ? R.success("成功") : R.fail("失败");
+	}
 
 
 }

+ 2 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -27,6 +27,8 @@
         <result column="dept_id" property="deptId"/>
         <result column="post_id" property="postId"/>
         <result column="working_status" property="workingStatus"/>
+        <result column="user_type_role" property="userTypeRole"/>
+        <result column="customer_id" property="customerId"/>
     </resultMap>
     <update id="updateByIdPointsBalance" parameterType="org.springblade.system.user.entity.User">
         update blade_user