Просмотр исходного кода

feat(customer): 优化客户联系人排序和用户子类型管理

- 将客户联系人查询默认排序从ID改为创建时间
- 在LoginBody中新增用户子类型字段用于区分平台用户、供应商、伙伴商、企业客户和个人用户
- 修复订单状态流转记录接口重复提交问题
- 完善密码认证策略中的用户子类型参数传递
- 调整角色过滤逻辑排除admin角色
- 优化产品审核查询条件避免权限误判
- 放宽远程用户注册时用户名非空验证限制
- 扩展远程用户服务接口支持用户子类型参数
- 实现供应商地址主地址设置逻辑优化
- 完善供应商联系人主联系人唯一性控制
- 更新供应商用户注册时的用户子类型标识为供应商类型
肖路 1 месяц назад
Родитель
Сommit
e2e67005b2
14 измененных файлов с 57 добавлено и 39 удалено
  1. 1 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
  2. 1 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java
  3. 6 3
      ruoyi-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java
  4. 1 1
      ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SmsAuthStrategy.java
  5. 5 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java
  6. 1 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerContactServiceImpl.java
  7. 1 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerInfoServiceImpl.java
  8. 6 6
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAddressServiceImpl.java
  9. 17 17
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierContactServiceImpl.java
  10. 1 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java
  11. 0 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/OrderStatusLogController.java
  12. 5 2
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseAuditServiceImpl.java
  13. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/PcSystemController.java
  14. 11 4
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

+ 1 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -24,7 +24,7 @@ public interface RemoteUserService {
      * @param tenantId 租户id
      * @param tenantId 租户id
      * @return 结果
      * @return 结果
      */
      */
-    LoginUser getUserInfo(String username, String tenantId) throws UserException;
+    LoginUser getUserInfo(String username, String tenantId,String userSonType) throws UserException;
 
 
     /**
     /**
      * 通过用户id查询用户信息
      * 通过用户id查询用户信息

+ 1 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java

@@ -45,7 +45,7 @@ public class RemoteUserBo implements Serializable {
      * 用户账号
      * 用户账号
      */
      */
     @Xss(message = "用户账号不能包含脚本字符")
     @Xss(message = "用户账号不能包含脚本字符")
-    @NotBlank(message = "用户账号不能为空")
+//    @NotBlank(message = "用户账号不能为空")
     @Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
     @Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
     private String userName;
     private String userName;
 
 

+ 6 - 3
ruoyi-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java

@@ -79,8 +79,11 @@ public class PasswordAuthStrategy implements IAuthStrategy {
         if (captchaProperties.getEnabled()) {
         if (captchaProperties.getEnabled()) {
             validateCaptcha(tenantId, username, code, uuid);
             validateCaptcha(tenantId, username, code, uuid);
         }
         }
+        if(ObjectUtil.isEmpty(loginBody.getUserSonType())){
+            loginBody.setUserSonType("0");
+        }
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
-            LoginUser user = remoteUserService.getUserInfo(username, tenantId);
+            LoginUser user = remoteUserService.getUserInfo(username, tenantId, loginBody.getUserSonType());
             loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
             loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
             return user;
             return user;
         });
         });
@@ -131,7 +134,7 @@ public class PasswordAuthStrategy implements IAuthStrategy {
             validateCaptcha(tenantId, username, code, uuid);
             validateCaptcha(tenantId, username, code, uuid);
         }
         }
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
-            LoginUser user = remoteUserService.getUserInfo(username, tenantId);
+            LoginUser user = remoteUserService.getUserInfo(username, tenantId, "3,4");
 //            if(!Objects.equals(user.getUserSonType(), "3")){
 //            if(!Objects.equals(user.getUserSonType(), "3")){
 //                throw new ServiceException("不存在该账号");
 //                throw new ServiceException("不存在该账号");
 //            }
 //            }
@@ -196,7 +199,7 @@ public class PasswordAuthStrategy implements IAuthStrategy {
         String tenantId = "000000";
         String tenantId = "000000";
         LoginVo loginVo = new LoginVo();
         LoginVo loginVo = new LoginVo();
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
-            LoginUser user = remoteUserService.getUserInfo(username, tenantId);
+            LoginUser user = remoteUserService.getUserInfo(username, tenantId,"0");
             loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
             loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
             return user;
             return user;
         });
         });

+ 1 - 1
ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SmsAuthStrategy.java

@@ -110,7 +110,7 @@ public class SmsAuthStrategy implements IAuthStrategy {
 
 
 
 
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
         LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
-            LoginUser user = remoteUserService.getUserInfo(username, tenantId);
+            LoginUser user = remoteUserService.getUserInfo(username, tenantId, "3,4");
 //            if(!Objects.equals(user.getUserSonType(), "3")){
 //            if(!Objects.equals(user.getUserSonType(), "3")){
 //                throw new ServiceException("不存在该账号");
 //                throw new ServiceException("不存在该账号");
 //            }
 //            }

+ 5 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java

@@ -38,4 +38,9 @@ public class LoginBody {
      */
      */
     private String uuid;
     private String uuid;
 
 
+    /**
+    *   用户子类型(0=平台用户,1=供应商,2=伙伴商,3=企业客户,4=个人用户)
+    * */
+    private String userSonType;
+
 }
 }

+ 1 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerContactServiceImpl.java

@@ -126,7 +126,7 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
     private LambdaQueryWrapper<CustomerContact> buildQueryWrapper(CustomerContactBo bo) {
     private LambdaQueryWrapper<CustomerContact> buildQueryWrapper(CustomerContactBo bo) {
         Map<String, Object> params = bo.getParams();
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<CustomerContact> lqw = Wrappers.lambdaQuery();
         LambdaQueryWrapper<CustomerContact> lqw = Wrappers.lambdaQuery();
-        lqw.orderByDesc(CustomerContact::getId);
+        lqw.orderByDesc(CustomerContact::getCreateTime);
         lqw.eq(bo.getCustomerId() != null, CustomerContact::getCustomerId, bo.getCustomerId());
         lqw.eq(bo.getCustomerId() != null, CustomerContact::getCustomerId, bo.getCustomerId());
         lqw.like(StringUtils.isNotBlank(bo.getContactNo()), CustomerContact::getContactNo, bo.getContactNo());
         lqw.like(StringUtils.isNotBlank(bo.getContactNo()), CustomerContact::getContactNo, bo.getContactNo());
         lqw.like(StringUtils.isNotBlank(bo.getContactName()), CustomerContact::getContactName, bo.getContactName());
         lqw.like(StringUtils.isNotBlank(bo.getContactName()), CustomerContact::getContactName, bo.getContactName());

+ 1 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerInfoServiceImpl.java

@@ -1245,6 +1245,7 @@ public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, Cus
         Long userId = remoteUserService.addUser(remoteUserBo);
         Long userId = remoteUserService.addUser(remoteUserBo);
 
 
 
 
+        remoteUserService.addUserRole(remoteUserBo);
         // 添加客户联系人信息
         // 添加客户联系人信息
         CustomerContact contact = new CustomerContact();
         CustomerContact contact = new CustomerContact();
         contact.setCustomerId(customerId);
         contact.setCustomerId(customerId);

+ 6 - 6
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAddressServiceImpl.java

@@ -144,12 +144,12 @@ public class SupplierAddressServiceImpl extends ServiceImpl<SupplierAddressMappe
         SupplierAddress add = MapstructUtils.convert(bo, SupplierAddress.class);
         SupplierAddress add = MapstructUtils.convert(bo, SupplierAddress.class);
         validEntityBeforeSave(add);
         validEntityBeforeSave(add);
         // 如果设置为自身地址
         // 如果设置为自身地址
-        if (IsDefault.Yes.getCode().equals(add.getIsSelf())) {
+        if ("1".equals(add.getIsSelf())) {
 
 
             // 把该供应商下其他地址全部改为否
             // 把该供应商下其他地址全部改为否
             LambdaUpdateWrapper<SupplierAddress> updateWrapper = Wrappers.lambdaUpdate();
             LambdaUpdateWrapper<SupplierAddress> updateWrapper = Wrappers.lambdaUpdate();
             updateWrapper.eq(SupplierAddress::getSupplierId, add.getSupplierId())
             updateWrapper.eq(SupplierAddress::getSupplierId, add.getSupplierId())
-                .set(SupplierAddress::getIsSelf, IsDefault.No.getCode());
+                .set(SupplierAddress::getIsSelf, 0);
 
 
             baseMapper.update(null, updateWrapper);
             baseMapper.update(null, updateWrapper);
         }
         }
@@ -190,12 +190,12 @@ public class SupplierAddressServiceImpl extends ServiceImpl<SupplierAddressMappe
         SupplierAddress update = MapstructUtils.convert(bo, SupplierAddress.class);
         SupplierAddress update = MapstructUtils.convert(bo, SupplierAddress.class);
         validEntityBeforeSave(update);
         validEntityBeforeSave(update);
         // 如果本次修改设置为自身地址
         // 如果本次修改设置为自身地址
-        if (IsDefault.Yes.getCode().equals(update.getIsSelf())) {
-
+        // 如果设置为自身地址
+        if ("1".equals(update.getIsSelf())) {
+            // 把该供应商下其他地址全部改为否
             LambdaUpdateWrapper<SupplierAddress> updateWrapper = Wrappers.lambdaUpdate();
             LambdaUpdateWrapper<SupplierAddress> updateWrapper = Wrappers.lambdaUpdate();
             updateWrapper.eq(SupplierAddress::getSupplierId, update.getSupplierId())
             updateWrapper.eq(SupplierAddress::getSupplierId, update.getSupplierId())
-                .ne(SupplierAddress::getId, update.getId()) // 排除自己
-                .set(SupplierAddress::getIsSelf, IsDefault.No.getCode());
+                .set(SupplierAddress::getIsSelf, 0);
 
 
             baseMapper.update(null, updateWrapper);
             baseMapper.update(null, updateWrapper);
         }
         }

+ 17 - 17
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierContactServiceImpl.java

@@ -182,14 +182,14 @@ public class SupplierContactServiceImpl extends ServiceImpl<SupplierContactMappe
         //4.如果是待修改审核  能登录  user是能登录的 status = 0
         //4.如果是待修改审核  能登录  user是能登录的 status = 0
         SupplierContact add = MapstructUtils.convert(bo, SupplierContact.class);
         SupplierContact add = MapstructUtils.convert(bo, SupplierContact.class);
         // ====== 主联系人唯一控制 ======
         // ====== 主联系人唯一控制 ======
-//        if ("1".equals(add.getIsPrimaryContact())) {
-//
-//            LambdaUpdateWrapper<SupplierContact> updateWrapper = Wrappers.lambdaUpdate();
-//            updateWrapper.eq(SupplierContact::getSupplierId, add.getSupplierId())
-//                .set(SupplierContact::getIsPrimaryContact, "0");
-//
-//            baseMapper.update(null, updateWrapper);
-//        }
+        if ("1".equals(add.getIsPrimaryContact())) {
+
+            LambdaUpdateWrapper<SupplierContact> updateWrapper = Wrappers.lambdaUpdate();
+            updateWrapper.eq(SupplierContact::getSupplierId, add.getSupplierId())
+                .set(SupplierContact::getIsPrimaryContact, "0");
+
+            baseMapper.update(null, updateWrapper);
+        }
         List<SupplierContact> supplierContacts = baseMapper.selectList(new LambdaQueryWrapper<SupplierContact>().eq(SupplierContact::getSupplierId, add.getSupplierId()).eq(SupplierContact::getIsPrimaryContact, SysPlatformYesNo.YES.getCode()));
         List<SupplierContact> supplierContacts = baseMapper.selectList(new LambdaQueryWrapper<SupplierContact>().eq(SupplierContact::getSupplierId, add.getSupplierId()).eq(SupplierContact::getIsPrimaryContact, SysPlatformYesNo.YES.getCode()));
         if (ObjectUtil.isNotEmpty(supplierContacts) && supplierContacts.size() > 0) {
         if (ObjectUtil.isNotEmpty(supplierContacts) && supplierContacts.size() > 0) {
             add.setIsPrimaryContact(SysPlatformYesNo.NO.getCode());
             add.setIsPrimaryContact(SysPlatformYesNo.NO.getCode());
@@ -247,15 +247,15 @@ public class SupplierContactServiceImpl extends ServiceImpl<SupplierContactMappe
     public Boolean updateByBo(SupplierContactBo bo) {
     public Boolean updateByBo(SupplierContactBo bo) {
         SupplierContact update = MapstructUtils.convert(bo, SupplierContact.class);
         SupplierContact update = MapstructUtils.convert(bo, SupplierContact.class);
         // ====== 主联系人唯一控制 ======
         // ====== 主联系人唯一控制 ======
-//        if ("1".equals(update.getIsPrimaryContact())) {
-//
-//            LambdaUpdateWrapper<SupplierContact> updateWrapper = Wrappers.lambdaUpdate();
-//            updateWrapper.eq(SupplierContact::getSupplierId, update.getSupplierId())
-//                .ne(SupplierContact::getId, update.getId()) // 排除自己
-//                .set(SupplierContact::getIsPrimaryContact, "0");
-//
-//            baseMapper.update(null, updateWrapper);
-//        }
+        if ("1".equals(update.getIsPrimaryContact())) {
+
+            LambdaUpdateWrapper<SupplierContact> updateWrapper = Wrappers.lambdaUpdate();
+            updateWrapper.eq(SupplierContact::getSupplierId, update.getSupplierId())
+                .ne(SupplierContact::getId, update.getId()) // 排除自己
+                .set(SupplierContact::getIsPrimaryContact, "0");
+
+            baseMapper.update(null, updateWrapper);
+        }
         if (update.getUserId() != null) {
         if (update.getUserId() != null) {
             RemoteUserBo remoteUserBo = new RemoteUserBo();
             RemoteUserBo remoteUserBo = new RemoteUserBo();
             remoteUserBo.setNickName(bo.getUserName());
             remoteUserBo.setNickName(bo.getUserName());

+ 1 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java

@@ -2216,7 +2216,7 @@ public class SupplierInfoServiceImpl extends ServiceImpl<SupplierInfoMapper, Sup
         remoteUserBo.setRoleId(1996815844478320642L);
         remoteUserBo.setRoleId(1996815844478320642L);
         remoteUserBo.setPhonenumber(bo.getPurchasePhone());
         remoteUserBo.setPhonenumber(bo.getPurchasePhone());
         remoteUserBo.setPassword(BCrypt.hashpw(bo.getPassword()));
         remoteUserBo.setPassword(BCrypt.hashpw(bo.getPassword()));
-        remoteUserBo.setUserSonType("3"); // 商城用户
+        remoteUserBo.setUserSonType("1"); // 供应商
         remoteUserBo.setTenantId(LoginHelper.getTenantId());
         remoteUserBo.setTenantId(LoginHelper.getTenantId());
         remoteUserBo.setStatus("0"); // 正常状态
         remoteUserBo.setStatus("0"); // 正常状态
 
 

+ 0 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/OrderStatusLogController.java

@@ -105,7 +105,6 @@ public class OrderStatusLogController extends BaseController {
     }
     }
 
 
     @Log(title = "订单状态流转记录", businessType = BusinessType.INSERT)
     @Log(title = "订单状态流转记录", businessType = BusinessType.INSERT)
-    @RepeatSubmit()
     @PostMapping("/selectNewOne")
     @PostMapping("/selectNewOne")
     public R<OrderStatusLogVo> selectNewOne(@Validated(AddGroup.class) @RequestBody OrderStatusLogBo bo) {
     public R<OrderStatusLogVo> selectNewOne(@Validated(AddGroup.class) @RequestBody OrderStatusLogBo bo) {
         return R.ok(orderStatusLogService.selectNewOne(bo));
         return R.ok(orderStatusLogService.selectNewOne(bo));

+ 5 - 2
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseAuditServiceImpl.java

@@ -173,8 +173,11 @@ public class ProductBaseAuditServiceImpl extends ServiceImpl<ProductBaseAuditMap
             lqw.eq(bo.getQueryType()==2,ProductBaseAudit::getCreateByType,2);
             lqw.eq(bo.getQueryType()==2,ProductBaseAudit::getCreateByType,2);
             lqw.eq(bo.getQueryType()==2,ProductBaseAudit::getCreateById,LoginHelper.getLoginUser().getPartnerId());
             lqw.eq(bo.getQueryType()==2,ProductBaseAudit::getCreateById,LoginHelper.getLoginUser().getPartnerId());
         }else{
         }else{
-            lqw.eq(ProductBaseAudit::getCreateByType,0);
-            lqw.eq(ProductBaseAudit::getCreateById,LoginHelper.getUserId());
+            if(bo.getAuditStatus()==0){
+                lqw.eq(ProductBaseAudit::getCreateByType,0);
+                lqw.eq(ProductBaseAudit::getCreateById,LoginHelper.getUserId());
+            }
+
         }
         }
 //        if(ObjectUtil.isNotEmpty(bo.getQueryType())){
 //        if(ObjectUtil.isNotEmpty(bo.getQueryType())){
 //            lqw.apply(bo.getQueryType()==1,"JSON_EXTRACT(product_data, '$.createByType') = {0}", 1);
 //            lqw.apply(bo.getQueryType()==1,"JSON_EXTRACT(product_data, '$.createByType') = {0}", 1);

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/PcSystemController.java

@@ -47,7 +47,7 @@ public class PcSystemController {
         bo.setPlatformCode("home");
         bo.setPlatformCode("home");
         List<SysRoleVo> roleList = sysRoleService.selectRoleList(bo);
         List<SysRoleVo> roleList = sysRoleService.selectRoleList(bo);
         //将游客角色过滤掉
         //将游客角色过滤掉
-//      roleList = roleList.stream().filter(role -> !Objects.equals(role.getRoleKey(), "tourist")).toList()
+      roleList = roleList.stream().filter(role -> !Objects.equals(role.getRoleKey(), "tourist")&& !Objects.equals(role.getRoleKey(), "admin")).toList();
         return R.ok(roleList);
         return R.ok(roleList);
     }
     }
 }
 }

+ 11 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -81,10 +81,15 @@ public class RemoteUserServiceImpl implements RemoteUserService {
      * @return 结果
      * @return 结果
      */
      */
     @Override
     @Override
-    public LoginUser getUserInfo(String username, String tenantId) throws UserException {
-        SysUserVo sysUser1 = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username));
+    public LoginUser getUserInfo(String username, String tenantId,String userSonType) throws UserException {
+//        SysUserVo sysUser1 = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username));
         return TenantHelper.dynamic(tenantId, () -> {
         return TenantHelper.dynamic(tenantId, () -> {
-            SysUserVo sysUser = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username));
+            LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<SysUser>();
+            wrapper.eq(SysUser::getUserName, username);
+            if (StringUtils.isNotBlank(userSonType)) {
+                wrapper.in(SysUser::getUserSonType, userSonType.split(","));
+            }
+            SysUserVo sysUser = userMapper.selectVoOne(wrapper);
             if (ObjectUtil.isNull(sysUser)) {
             if (ObjectUtil.isNull(sysUser)) {
                 throw new UserException("user.not.exists", username);
                 throw new UserException("user.not.exists", username);
             }
             }
@@ -511,7 +516,9 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         SysUserBo sysUserBo = MapstructUtils.convert(remoteUserBo, SysUserBo.class);
         SysUserBo sysUserBo = MapstructUtils.convert(remoteUserBo, SysUserBo.class);
         String username = sysUserBo.getUserName();
         String username = sysUserBo.getUserName();
         boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>()
         boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>()
-            .eq(SysUser::getUserName, sysUserBo.getUserName()));
+            .eq(SysUser::getUserName, sysUserBo.getUserName())
+            .eq(SysUser::getUserSonType, sysUserBo.getUserSonType())
+        );
         if (exist) {
         if (exist) {
             throw new ServiceException("账号已经存在:" + username);
             throw new ServiceException("账号已经存在:" + username);
         }
         }