diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFan.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFan.java index 2876094f..f5dda713 100644 --- a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFan.java +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFan.java @@ -34,6 +34,9 @@ public class PushConcernFan extends CommonEntity { @ApiModelProperty("粉丝用户") private String fanUserId; + @ApiModelProperty("关注类型") + private String type; + @ApiModelProperty("0-需要审核 1-审核通过") private String status; diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFanType.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFanType.java index 1e5d1502..e9a1ada8 100644 --- a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFanType.java +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushConcernFanType.java @@ -30,6 +30,9 @@ public class PushConcernFanType extends CommonEntity { @ApiModelProperty("类型名称") private String name; + @ApiModelProperty("关注粉丝父表ID") + private String concernFanId; + @ApiModelProperty("关注用户") private String concernUserId; diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/feign/RemotePushConcernFanService.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/feign/RemotePushConcernFanService.java new file mode 100644 index 00000000..31a7bb0d --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/feign/RemotePushConcernFanService.java @@ -0,0 +1,26 @@ +package com.cloud.kicc.commonbiz.api.feign; + +import com.cloud.kicc.common.core.api.R; +import com.cloud.kicc.common.core.constant.AppConstants; +import com.cloud.kicc.common.core.constant.SecurityConstants; +import com.cloud.kicc.common.core.constant.ServiceNameConstants; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; + +/** + *

+ * 远程推送关注粉丝api + *

+ * + * @Author: wangxiang4 + * @since: 2023/4/6 + */ +@FeignClient(contextId = "remotePushConcernFanService", value = ServiceNameConstants.COMMON_SERVICE) +public interface RemotePushConcernFanService { + + + @PostMapping(AppConstants.APP_COMMON + "/pushConcernFan/enterpriseUserSave") + R pushConcernFanSave(String enterpriseUserId, @RequestHeader(SecurityConstants.FROM) String from); + +} diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/User.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/User.java index 4864d76b..ae1510e2 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/User.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/User.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.cloud.kicc.common.data.entity.CommonEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -23,6 +25,7 @@ import java.time.LocalDateTime; @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("sys_user") +@ApiModel(description = "用户表") public class User extends CommonEntity { private static final long serialVersionUID = 1L; @@ -31,98 +34,115 @@ public class User extends CommonEntity { * 用户ID */ @TableId + @ApiModelProperty("用户ID") private String id; /** * 用户名 */ @ExcelProperty("用户名") + @ApiModelProperty("用户名") private String userName; /** * 昵称 */ @ExcelProperty("昵称") + @ApiModelProperty("用户昵称") private String nickName; /** * 密码 */ + @ApiModelProperty("用户密码") private String password; /** * 用户类型 */ + @ApiModelProperty("用户类型") private String userType; /** * 机构ID */ + @ApiModelProperty("机构ID") private String deptId; /** * 机构名称 */ - @ExcelProperty("机构名称") + @ApiModelProperty("机构名称") private String deptName; /** * 用户邮箱 */ @ExcelProperty("邮箱") + @ApiModelProperty("邮箱") private String email; /** * 手机号码 */ @ExcelProperty("手机号码") + @ApiModelProperty("手机号码") private String phone; /** * 用户性别(0男 1女 2未知) */ @ExcelProperty("性别") + @ApiModelProperty("用户性别(0男 1女 2未知") private String sex; /** * 头像路径 */ + @ApiModelProperty("头像路径") private String avatar; /** * 最后登陆IP */ + @ApiModelProperty("最后登陆IP") private String loginIp; /** * 最后登陆时间 */ + @ApiModelProperty("最后登陆时间") private LocalDateTime loginTime; /** * 地图标记点位置图片旋转值 */ + @ApiModelProperty("地图标记点位置图片旋转值") private Double mapOrientation; /** * 地图设计器默认中心点位置 */ + @ApiModelProperty("地图设计器默认中心点位置") private String mapCenter; /** * 帐号状态(0正常 1停用) */ + @ApiModelProperty("帐号状态(0正常 1停用)") private String status; /** * 内部系统账户 */ + @ApiModelProperty("内部系统账户ID") private Integer klabUserAccount; /** * 角色ID集合 */ @TableField(exist = false) + @ApiModelProperty("角色ID集合") private String[] roleIds; /** diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanController.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanController.java index 10122965..b54ea473 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanController.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanController.java @@ -1,6 +1,8 @@ package com.cloud.kicc.commonbiz.controller; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,16 +10,21 @@ import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.commonbiz.api.entity.PushConcernFan; +import com.cloud.kicc.commonbiz.api.entity.PushConcernFanType; +import com.cloud.kicc.commonbiz.api.entity.PushType; import com.cloud.kicc.commonbiz.service.IPushConcernFanService; +import com.cloud.kicc.commonbiz.service.IPushConcernFanTypeService; +import com.cloud.kicc.commonbiz.service.IPushTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.apache.ibatis.annotations.Param; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** *

@@ -34,6 +41,8 @@ import java.util.Map; public class PushConcernFanController { private final IPushConcernFanService iPushConcernFanService; + private final IPushConcernFanTypeService iPushConcernFanTypeService; + private final IPushTypeService iPushTypeService; @ApiOperation("分页查询") @GetMapping("/list") @@ -63,6 +72,47 @@ public class PushConcernFanController { return R.ok(); } + @ApiOperation("企业用户关联保存") + @PostMapping("/enterpriseUserSave") + public R enterpriseUserSave(String enterpriseUserId) { + // 企业内部用户保存默认强制关注系统内部所有用户 + IPage> list = iPushConcernFanService.selectPushFriendList(new Page(1, 999), + MapUtil.builder().put("createById", enterpriseUserId).build()); + + List pushTypes = iPushTypeService.list(Wrappers.lambdaQuery().eq(PushType::getCreateById, enterpriseUserId)); + + list.getRecords().forEach(item -> { + PushConcernFan pushConcernFan = new PushConcernFan(); + pushConcernFan.setFanUserId(enterpriseUserId); + pushConcernFan.setConcernUserId(item.get("id").toString()); + pushConcernFan.setType("1"); + pushConcernFan.setStatus("1"); + iPushConcernFanService.save(pushConcernFan); + + // 保存用户自定义推送类型 + List pushConcernFanTypes = pushTypes.stream() + .map(pushType -> new PushConcernFanType() + .setConcernFanId(pushConcernFan.getId()) + .setName(pushType.getName()) + .setConcernUserId(pushConcernFan.getConcernUserId()) + .setFanUserId(pushConcernFan.getFanUserId()) + .setTypeId(pushType.getId()) + .setPlaySound(pushType.getPlaySound()) + .setPlayVibrate(pushType.getPlayVibrate()) + .setPlayLights(pushType.getPlayLights()) + .setPlayToText(pushType.getPlayToText()) + .setOnlineRingtone(pushType.getOnlineRingtone()) + .setOfflineRingtone(pushType.getOfflineRingtone()) + ).collect(Collectors.toList()); + + if (!pushConcernFanTypes.isEmpty()) { + pushConcernFanTypes.get(0).setDefaultType("1"); + iPushConcernFanTypeService.saveBatch(pushConcernFanTypes); + } + }); + return R.ok(); + } + @ApiOperation("修改") @PutMapping("/update") public R update(@Valid @RequestBody PushConcernFan pushConcernFan) { @@ -70,9 +120,47 @@ public class PushConcernFanController { return R.ok(); } + @ApiOperation("审核") + @GetMapping("/audit") + public R audit(String id) { + iPushConcernFanService.update(Wrappers.lambdaUpdate().set(PushConcernFan::getStatus, "1").in(PushConcernFan::getId, id)); + PushConcernFan pushConcernFan = iPushConcernFanService.getById(id); + if (ObjectUtil.isNotEmpty(pushConcernFan)) { + List pushTypes = iPushTypeService.list(Wrappers.lambdaQuery().eq(PushType::getCreateById, pushConcernFan.getConcernUserId())); + List pushConcernFanTypes = pushTypes.stream() + .map(item -> new PushConcernFanType() + .setConcernFanId(pushConcernFan.getId()) + .setName(item.getName()) + .setConcernUserId(pushConcernFan.getConcernUserId()) + .setFanUserId(pushConcernFan.getFanUserId()) + .setTypeId(item.getId()) + .setPlaySound(item.getPlaySound()) + .setPlayVibrate(item.getPlayVibrate()) + .setPlayLights(item.getPlayLights()) + .setPlayToText(item.getPlayToText()) + .setOnlineRingtone(item.getOnlineRingtone()) + .setOfflineRingtone(item.getOfflineRingtone()) + ) + .collect(Collectors.toList()); + if (!pushConcernFanTypes.isEmpty()) { + pushConcernFanTypes.get(0).setDefaultType("1"); + iPushConcernFanTypeService.saveBatch(pushConcernFanTypes); + } + } + return R.ok(); + } + @ApiOperation("删除") @DeleteMapping("/remove/{ids:[\\w,]+}") public R removeById(@PathVariable String[] ids) { + List list = Arrays.asList(ids); + // 删除用户自定义推送类型 + list.forEach(id -> { + PushConcernFan pushConcernFan = iPushConcernFanService.getById(id); + iPushConcernFanTypeService.remove(Wrappers.lambdaQuery() + .eq(PushConcernFanType::getConcernUserId, pushConcernFan.getConcernUserId()) + .eq(PushConcernFanType::getFanUserId, pushConcernFan.getFanUserId())); + }); iPushConcernFanService.removeByIds(Arrays.asList(ids)); return R.ok(); } diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanTypeController.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanTypeController.java index 8bbd75ef..f96f9ef5 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanTypeController.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanTypeController.java @@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.commonbiz.api.entity.PushConcernFanType; -import com.cloud.kicc.commonbiz.api.entity.PushType; import com.cloud.kicc.commonbiz.service.IPushConcernFanTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/PushConcernFanMapper.xml b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/PushConcernFanMapper.xml index 95fce2e8..18e18170 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/PushConcernFanMapper.xml +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/PushConcernFanMapper.xml @@ -10,6 +10,7 @@ cf.`status`, cf.create_time fan_create_time, cf.remarks fan_remarks, + cf.type cf_type, u.user_name, u.nick_name, u.user_type, @@ -31,7 +32,14 @@ FROM common_push_concern_fan cf JOIN sys_user u ON - cf.fan_user_id = u.id + + + cf.concern_user_id = u.id + + + cf.fan_user_id = u.id + + cf.del_flag = 0 and u.status = 0 @@ -57,6 +65,7 @@ cf.`status`, cf.create_time fan_create_time, cf.remarks fan_remarks, + cf.type cf_type, u.user_name, u.nick_name, u.user_type, @@ -89,16 +98,20 @@ SELECT cf.`status` cf_status, b.id b_id, + cf.type cf_type, u.* FROM sys_user u - LEFT JOIN common_push_concern_fan cf ON u.id = cf.concern_user_id + LEFT JOIN (select * FROM common_push_concern_fan WHERE del_flag = 0 and fan_user_id = #{map.createById}) cf ON u.id = cf.concern_user_id LEFT JOIN common_push_blacklist b ON u.id = b.concern_user_id u.del_flag = 0 AND u.status = 0 AND u.id != #{map.createById} + + AND u.user_type != '2' + AND u.nick_name = #{map.nickName} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/pom.xml b/kicc-platform/kicc-platform-biz/kicc-system-biz/pom.xml index 9a5a2425..89036630 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/pom.xml +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/pom.xml @@ -20,6 +20,11 @@ oss-spring-boot-starter + + com.cloud + kicc-common-api + + com.cloud kicc-system-api diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java index 85d7d2a7..8821c2fa 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java @@ -8,10 +8,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; +import com.cloud.kicc.common.core.constant.CommonConstants; +import com.cloud.kicc.common.core.constant.SecurityConstants; import com.cloud.kicc.common.core.exception.CheckedException; +import com.cloud.kicc.common.data.entity.KiccUser; import com.cloud.kicc.common.log.annotation.SysLog; import com.cloud.kicc.common.security.annotation.Inner; import com.cloud.kicc.common.security.util.SecurityUtils; +import com.cloud.kicc.commonbiz.api.feign.RemotePushConcernFanService; import com.cloud.kicc.system.api.entity.Menu; import com.cloud.kicc.system.api.entity.Role; import com.cloud.kicc.system.api.entity.User; @@ -27,6 +31,10 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.*; @@ -52,6 +60,7 @@ public class UserController { private final RoleService roleService; private final MenuService menuService; private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder(); + private final RemotePushConcernFanService remotePushConcernFanService; private LambdaQueryWrapper getQueryWrapper(User user) { return new LambdaQueryWrapper() @@ -113,9 +122,39 @@ public class UserController { public R save(@RequestBody User user) { user.setPassword(ENCODER.encode(user.getPassword())); userService.saveUser(user); + if (StrUtil.equals(user.getUserType(), "2")) { + remotePushConcernFanService.pushConcernFanSave(user.getId(), SecurityConstants.FROM_IN); + } + return R.ok(); + } + + + @Inner(false) + @SysLog("新增外部系统用户") + @PostMapping("/saveExternalUser") + public R saveExternalUser(@RequestBody User externalUser) { + User user = userService.getById("1510539584287346688"); + KiccUser kiccUser = new KiccUser( + user.getId(), + user.getDeptId(), + user.getUserName(), + SecurityConstants.BCRYPT + user.getPassword(), + user.getPhone(), + user.getTenantId(), + true, + true, + true, + StrUtil.equals(user.getStatus(), CommonConstants.STATUS_NORMAL), + AuthorityUtils.createAuthorityList(user.getPermissions()) + ); + Authentication authentication = new UsernamePasswordAuthenticationToken(kiccUser, "N/A", kiccUser.getAuthorities()); + SecurityContextHolder.getContext().setAuthentication(authentication); + externalUser.setPassword(ENCODER.encode(externalUser.getPassword())); + userService.saveUser(externalUser); return R.ok(); } + @Inner @GetMapping("/selectByUserName/{userName}") public R selectByUserName(@PathVariable String userName) {