提交 397ec661 作者: 17607474349

fix:

1、用户同步
上级 72c92e95
......@@ -27,17 +27,17 @@ public class DepartmentImportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -1287875741111587840L;
@ExcelColumn(index = 0)
@ExcelColumn(title = "部门名称")
@NotNull
String name;
@ExcelColumn(index = 1)
@ExcelColumn(title = "负责人")
String realName;
@ExcelColumn(index = 2)
@ExcelColumn(title = "手机号码")
String mobile;
@ExcelColumn(index = 3)
@ExcelColumn(title = "状态")
String enable;
public static Department transform(DepartmentImportExcel departmentImportExcel) {
......
......@@ -26,15 +26,15 @@ public class LocationTagImportExcel implements Serializable {
private static final long serialVersionUID = -8817732062049005201L;
// 编号
@ExcelColumn(index = 0)
@ExcelColumn(title = "编号")
String code;
// 标签型号
@ExcelColumn(index = 1)
@ExcelColumn(title = "标签型号")
String type;
// 设备编码
@ExcelColumn(index = 2)
@ExcelColumn(title = "imei")
String imei;
public static LocationTag transform(LocationTagImportExcel locationTagImportExcel) {
......
......@@ -26,39 +26,39 @@ public class UserImportExcel implements Serializable {
private static final long serialVersionUID = 3471291755743945051L;
// 姓名
@ExcelColumn(index = 0)
@ExcelColumn(title = "姓名")
String realName;
// 工号
@ExcelColumn(index = 1)
@ExcelColumn(title = "工号")
String uuid;
// 图标类型
@ExcelColumn(index = 2)
@ExcelColumn(title = "图标类型")
String type;
// 手机号
@ExcelColumn(index = 3)
@ExcelColumn(title = "手机号码")
String mobile;
// 部门id
@ExcelColumn(index = 4)
@ExcelColumn(title = "部门名称")
String deptName;
// 职位id
@ExcelColumn(index = 5)
@ExcelColumn(title = "职位名称")
String postName;
// 标签号
@ExcelColumn(index = 6)
@ExcelColumn(title = "标签编号")
String code;
// 性别
@ExcelColumn(index = 7)
@ExcelColumn(title = "性别")
Boolean gender;
// 是否为特殊人员
@ExcelColumn(index = 8)
@ExcelColumn(title = "特殊人员")
Boolean isSpecial;
public static User transform(UserImportExcel userImportExcel) {
......
......@@ -29,6 +29,6 @@ public class LocationTagTypeFindParam implements Serializable {
@ApiModelProperty(value = "编号", example = "BTT8888888")
String code;
@ApiModelProperty(value = "类别", example = "1:内部/2:访客")
@ApiModelProperty(value = "类别", example = "1内部/2访客")
Integer category;
}
......@@ -43,13 +43,13 @@ public class UserAddParam implements Serializable {
Boolean gender;
@ApiModelProperty(value = "归属部门", example = "1", required = true)
String deptId;
Long deptId;
@ApiModelProperty(value = "工号", example = "1888888888", required = true)
String uuid;
@ApiModelProperty(value = "职位", example = "1")
String postId;
Long postId;
@ApiModelProperty(value = "是否特殊人员", example = "0/1", required = true)
Boolean isSpecial;
......
......@@ -2,6 +2,7 @@
package com.yiring.app.param.user;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.yiring.auth.domain.dept.Department;
import com.yiring.auth.domain.post.Post;
import com.yiring.auth.domain.user.User;
......@@ -55,14 +56,14 @@ public class UserModifyParam implements Serializable {
@ApiModelProperty(value = "归属部门", example = "1", required = true)
@NotNull
String deptId;
Long deptId;
@ApiModelProperty(value = "工号", example = "1888888888", required = true)
@NotNull
String uuid;
@ApiModelProperty(value = "职位", example = "1")
String postId;
Long postId;
@ApiModelProperty(value = "是否特殊人员", example = "0/1", required = true)
@NotNull
......@@ -76,6 +77,8 @@ public class UserModifyParam implements Serializable {
user.setGender(userModifyParam.getGender());
user.setDepartment(Department.builder().id(Convert.toLong(userModifyParam.getDeptId())).build());
user.setUuid(userModifyParam.getUuid());
if (ObjectUtil.isNotEmpty(userModifyParam.getPostId())) {
user.setPost(Post.builder().id(Convert.toLong(userModifyParam.getPostId())).build());
}
}
}
......@@ -2,13 +2,19 @@
package com.yiring.app.service.location.tag.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.yiring.app.domain.location.LocationTag;
import com.yiring.app.domain.location.LocationTagRepository;
import com.yiring.app.feign.zy.location.tag.LocationTagTypeClient;
import com.yiring.app.param.location.tag.LocationTagTypeFindParam;
import com.yiring.app.param.location.tag.LocationTagTypeSendParam;
import com.yiring.app.param.zy.location.tag.ZyLocationTagTypeSendParam;
import com.yiring.app.service.location.tag.LocationTagTypeService;
import com.yiring.app.util.zy.ZyUtil;
import com.yiring.app.vo.location.tag.LocationTagTypeVo;
import com.yiring.common.core.Result;
import com.yiring.common.domain.BasicEntity;
......@@ -16,6 +22,7 @@ import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
......@@ -38,9 +45,14 @@ import org.springframework.transaction.annotation.Transactional;
@Slf4j
public class LocationTagTypeServiceImpl implements LocationTagTypeService {
final Integer FACTORY_ID = 100;
@Resource
LocationTagRepository locationTagRepository;
@Resource
LocationTagTypeClient locationTagTypeClient;
@Override
public Result<PageVo<LocationTagTypeVo>> findLocationTagType(
LocationTagTypeFindParam locationTagTypeFindParam,
......@@ -75,13 +87,34 @@ public class LocationTagTypeServiceImpl implements LocationTagTypeService {
@Override
public Result<String> sendLocationTagType(LocationTagTypeSendParam locationtagtypeSendParam) {
ZyLocationTagTypeSendParam zyLocationTagTypeSendParam = ZyLocationTagTypeSendParam
.builder()
.orgId(FACTORY_ID)
.category(locationtagtypeSendParam.getCategory())
.build();
String[] split = locationtagtypeSendParam.getIds().split(",");
ArrayList<Long> ids = ListUtil.toList();
ArrayList<String> list = ListUtil.toList(split);
for (String id : list) {
Optional<LocationTag> locationTagOptional = locationTagRepository.findById(Convert.toLong(id));
locationTagOptional.ifPresent(locationTag -> ids.add(locationTag.getLinkId()));
}
zyLocationTagTypeSendParam.setIds(Convert.toLongArray(ids));
JSONObject jsonObject = locationTagTypeClient.updateEntityType(
JSONUtil.toJsonStr(zyLocationTagTypeSendParam),
ZyUtil.manageLogin()
);
if (!ObjectUtil.equals(jsonObject.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(jsonObject.get("msg")));
}
Specification<LocationTag> specification = (root, cq, cb) -> {
List<Predicate> predicates = ListUtil.toList();
if (StrUtil.isNotEmpty(locationtagtypeSendParam.getIds())) {
CriteriaBuilder.In<Object> in = cb.in(root.get(BasicEntity.Fields.id));
String[] split = locationtagtypeSendParam.getIds().split(",");
ArrayList<String> list = ListUtil.toList(split);
for (String id : list) in.value(id);
for (String id : list) in.value(Convert.toLong(id));
predicates.add(cb.and(in));
}
......
......@@ -18,6 +18,7 @@ import com.yiring.app.feign.zy.user.UserClient;
import com.yiring.app.param.user.*;
import com.yiring.app.param.zy.user.ZyUserAddParam;
import com.yiring.app.param.zy.user.ZyUserFindParam;
import com.yiring.app.param.zy.user.ZyUserModifyParam;
import com.yiring.app.service.dept.DepartmentService;
import com.yiring.app.service.user.UserService;
import com.yiring.app.util.zy.ZyUtil;
......@@ -117,16 +118,33 @@ public class UserServiceImpl implements UserService {
@Override
public Result<String> userBingTag(UserBingTagParam userBingTagParam) {
Optional<User> userOptional = userRepository.findById(userBingTagParam.getId());
if (userOptional.isEmpty()) {
return Result.no(Status.BAD_REQUEST, "员工不存在");
}
User user = userOptional.get();
Optional<LocationTag> locationTagOptional = locationTagRepository.findOne(
Example.of(LocationTag.builder().code(userBingTagParam.getCode()).build())
);
if (locationTagOptional.isEmpty()) throw new RuntimeException("标签卡不存在");
LocationTag locationTag = locationTagOptional.get();
if (!ObjectUtil.isNotEmpty(locationTag.getUser())) {
if (locationTag.getUsed()) {
throw new RuntimeException("已绑定其他用户 : " + locationTag.getUser().getRealName());
}
JSONObject jsonObject = userClient.unbind(
user.getLinkId(),
userBingTagParam.getCode(),
FACTORY_ID,
ZyUtil.clientLogin()
);
if (!ObjectUtil.equals(jsonObject.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(jsonObject.get("msg")));
}
locationTag.setUser(User.builder().id(userBingTagParam.getId()).build());
locationTag.setUsed(true);
locationTagRepository.save(locationTag);
......@@ -136,11 +154,23 @@ public class UserServiceImpl implements UserService {
@Override
public Result<String> userUnBingTag(IdParam idParam) {
Optional<User> userOptional = userRepository.findById(idParam.getId());
if (userOptional.isEmpty()) {
return Result.no(Status.BAD_REQUEST, "员工不存在");
}
User user = userOptional.get();
Optional<LocationTag> locationTagOptional = locationTagRepository.findOne(
Example.of(LocationTag.builder().user(User.builder().id(idParam.getId()).build()).build())
);
if (locationTagOptional.isEmpty()) return Result.no(Status.BAD_REQUEST);
JSONObject jsonObject = userClient.unbind(user.getLinkId(), FACTORY_ID, ZyUtil.clientLogin());
if (!ObjectUtil.equals(jsonObject.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(jsonObject.get("msg")));
}
LocationTag locationTag = locationTagOptional.get();
locationTag.setUser(null);
locationTag.setUsed(false);
......@@ -151,6 +181,14 @@ public class UserServiceImpl implements UserService {
@Override
public Result<String> deleteUser(IdParam idParam) {
Optional<User> userOptional = userRepository.findById(idParam.getId());
if (userOptional.isEmpty()) {
return Result.no(Status.BAD_REQUEST, "员工不存在");
}
User user = userOptional.get();
LocationTag locationTagBuild = LocationTag.builder().user(User.builder().id(idParam.getId()).build()).build();
long locationTagCount = locationTagRepository.count(Example.of(locationTagBuild));
if (locationTagCount > 0) return Result.no(Status.BAD_REQUEST, "已发卡,不可删除");
......@@ -159,7 +197,11 @@ public class UserServiceImpl implements UserService {
long departmentCount = departmentRepository.count(Example.of(departmentBuild));
if (departmentCount > 0) return Result.no(Status.BAD_REQUEST, "部门负责人,请先解绑");
userRepository.deleteById(idParam.getId());
JSONObject jsonObject = userClient.delete(user.getLinkId(), ZyUtil.clientLogin());
if (!ObjectUtil.equals(jsonObject.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(jsonObject.get("msg")));
}
userRepository.delete(user);
return Result.ok();
}
......@@ -233,20 +275,40 @@ public class UserServiceImpl implements UserService {
User user = userOptional.get();
if (!StrUtil.equals(user.getUuid(), userModifyParam.getUuid())) {
long count = userRepository.count(Example.of(User.builder().uuid(userModifyParam.getUuid()).build()));
if (count > 0) return Result.no(Status.BAD_REQUEST, "工号相同");
if (
!StrUtil.equals(user.getMobile(), userModifyParam.getMobile()) &&
StrUtil.isNotEmpty(userModifyParam.getMobile())
) {
// 验证手机号码是否相同
long count = userRepository.count(Example.of(User.builder().mobile(userModifyParam.getMobile()).build()));
if (count > 0) {
return Result.no(Status.BAD_REQUEST, "手机号码已存在");
}
}
if (!StrUtil.equals(user.getMobile(), userModifyParam.getMobile())) {
long count = userRepository.count(Example.of(User.builder().uuid(userModifyParam.getMobile()).build()));
// 获取部门信息
Optional<Department> departmentOptional = departmentRepository.findOne(
Example.of(Department.builder().id(userModifyParam.getDeptId()).build())
);
if (count > 0) return Result.no(Status.BAD_REQUEST, "手机号相同");
if (departmentOptional.isEmpty()) {
return Result.no(Status.BAD_REQUEST);
}
Long linkId = departmentOptional.get().getLinkId();
user.setDepartment(departmentOptional.get());
UserModifyParam.transform(userModifyParam, user);
ZyUserModifyParam zyUserModifyParam = ZyUserModifyParam.transform(user, FACTORY_ID);
zyUserModifyParam.setId(user.getLinkId());
zyUserModifyParam.setDeptId(linkId);
zyUserModifyParam.setEntityIconId(user.getIsSpecial() ? 10028 : 1);
JSONObject jsonObject = userClient.save(JSONUtil.toJsonStr(zyUserModifyParam), ZyUtil.clientLogin());
if (!ObjectUtil.equals(jsonObject.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(jsonObject.get("msg")));
}
userRepository.save(user);
return Result.ok();
......@@ -256,7 +318,18 @@ public class UserServiceImpl implements UserService {
public Result<String> addUser(UserAddParam userAddParam) {
User user = UserAddParam.transform(userAddParam);
Optional<Department> departmentOptional = departmentRepository.findOne(Example.of(user.getDepartment()));
// 验证手机号码是否相同
if (StrUtil.isNotEmpty(userAddParam.getMobile())) {
long count = userRepository.count(Example.of(User.builder().mobile(userAddParam.getMobile()).build()));
if (count > 0) {
return Result.no(Status.BAD_REQUEST, "手机号码已存在");
}
}
// 获取部门信息
Optional<Department> departmentOptional = departmentRepository.findOne(
Example.of(Department.builder().id(userAddParam.getDeptId()).build())
);
if (departmentOptional.isEmpty()) {
return Result.no(Status.BAD_REQUEST);
......@@ -269,19 +342,19 @@ public class UserServiceImpl implements UserService {
zyUserAddParam.setDeptId(linkId);
zyUserAddParam.setEntityIconId(user.getIsSpecial() ? 10028 : 1);
JSONObject jsonObject = userClient.userAdd(JSONUtil.toJsonStr(zyUserAddParam), ZyUtil.clientLogin());
JSONObject jsonObject = userClient.save(JSONUtil.toJsonStr(zyUserAddParam), ZyUtil.clientLogin());
if (!ObjectUtil.equals(jsonObject.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(jsonObject.get("msg")));
}
ZyUserFindParam zyUserFindParam = ZyUserFindParam
.builder()
.orgId(FACTORY_ID)
.jobNum(zyUserAddParam.getJobNumber())
.type(1)
.pageNum(1)
.pageSize(1)
.build();
JSONObject result = userClient.list(JSONUtil.toJsonStr(zyUserFindParam), ZyUtil.clientLogin());
if (!ObjectUtil.equals(result.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(result.get("msg")));
......@@ -293,6 +366,14 @@ public class UserServiceImpl implements UserService {
// 拿第一个数据的id
Object id = JSONUtil.parseObj(records.get(0)).get("id");
// 绑定post
if (ObjectUtil.isNotEmpty(userAddParam.getPostId())) {
Optional<Post> postOptional = postRepository.findOne(
Example.of(Post.builder().id(userAddParam.getPostId()).build())
);
postOptional.ifPresent(user::setPost);
}
user.setLinkId(Convert.toLong(id));
userRepository.save(user);
......@@ -340,7 +421,37 @@ public class UserServiceImpl implements UserService {
userImportExcels.forEach(userImportExcel -> {
User user = UserImportExcel.transform(userImportExcel);
Department department = hashMap.get(userImportExcel.getDeptName());
ZyUserAddParam zyUserAddParam = ZyUserAddParam.transform(user, FACTORY_ID);
zyUserAddParam.setDeptId(department.getLinkId());
zyUserAddParam.setEntityIconId(user.getIsSpecial() ? 10028 : 1);
JSONObject jsonObject = userClient.save(JSONUtil.toJsonStr(zyUserAddParam), ZyUtil.clientLogin());
if (!ObjectUtil.equals(jsonObject.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(jsonObject.get("msg")));
}
ZyUserFindParam zyUserFindParam = ZyUserFindParam
.builder()
.orgId(FACTORY_ID)
.jobNum(zyUserAddParam.getJobNumber())
.type(1)
.pageNum(1)
.pageSize(1)
.build();
JSONObject result = userClient.list(JSONUtil.toJsonStr(zyUserFindParam), ZyUtil.clientLogin());
if (!ObjectUtil.equals(result.get("code"), 200)) {
throw new RuntimeException(StrUtil.toString(result.get("msg")));
}
JSONObject data = JSONUtil.parseObj(result.get("data"));
JSONArray records = JSONUtil.parseArray(data.get("records"));
// 拿第一个数据的id
Object id = JSONUtil.parseObj(records.get(0)).get("id");
Post post = postMap.get(userImportExcel.getPostName()).get(0);
user.setLinkId(Convert.toLong(id));
user.setDepartment(department);
user.setPost(post);
User saveUser = userRepository.save(user);
......@@ -360,20 +471,41 @@ public class UserServiceImpl implements UserService {
Root<User> root = cq.from(User.class);
Expression<Long> id = root.get(BasicEntity.Fields.id);
Expression<String> realName = root.get(User.Fields.realName);
Expression<String> avatar = root.get(User.Fields.avatar);
Expression<String> uuid = root.get(User.Fields.uuid);
Expression<User.Type> type = root.get(User.Fields.type);
Expression<Boolean> gender = root.get(User.Fields.gender);
Expression<Boolean> isSpecial = root.get(User.Fields.isSpecial);
Expression<Department> department = root.get(User.Fields.department).get("name");
Expression<String> mobile = root.get(User.Fields.mobile);
Expression<Post> post = root.get(User.Fields.post).get("name");
Join<User, Department> departmentJoin = root.join(User.Fields.department, JoinType.LEFT);
Expression<String> department = departmentJoin.get(Department.Fields.name);
Expression<Long> departmentId = departmentJoin.get(BasicEntity.Fields.id);
Join<User, Post> postJoin = root.join(User.Fields.post, JoinType.LEFT);
Expression<String> post = postJoin.get(Post.Fields.name);
Expression<Long> postId = departmentJoin.get(BasicEntity.Fields.id);
Subquery<String> query = cq.subquery(String.class);
Root<LocationTag> tagRoot = query.from(LocationTag.class);
query.select(tagRoot.get(LocationTag.Fields.code));
query.where(cb.equal(tagRoot.get(LocationTag.Fields.user), root));
cq.multiselect(id, realName, uuid, type, department, mobile, post, query, gender, isSpecial);
cq.multiselect(
id,
realName,
uuid,
type,
department,
mobile,
post,
query,
gender,
isSpecial,
departmentId,
postId,
avatar
);
List<Predicate> predicates = ListUtil.toList();
if (StrUtil.isNotEmpty(indexParam.getStr())) {
......@@ -406,11 +538,15 @@ public class UserServiceImpl implements UserService {
Expression<User.Type> type = root.get(User.Fields.type);
Expression<Boolean> gender = root.get(User.Fields.gender);
Expression<Boolean> isSpecial = root.get(User.Fields.isSpecial);
Expression<String> department = root.get(User.Fields.department).get("name");
Expression<String> departmentId = root.get(User.Fields.department).get("id");
Expression<String> mobile = root.get(User.Fields.mobile);
Expression<String> post = root.get(User.Fields.post).get("name");
Expression<String> postId = root.get(User.Fields.post).get("id");
Join<User, Department> departmentJoin = root.join(User.Fields.department, JoinType.LEFT);
Expression<String> department = departmentJoin.get(Department.Fields.name);
Expression<Long> departmentId = departmentJoin.get(BasicEntity.Fields.id);
Join<User, Post> postJoin = root.join(User.Fields.post, JoinType.LEFT);
Expression<String> post = postJoin.get(Post.Fields.name);
Expression<Long> postId = departmentJoin.get(BasicEntity.Fields.id);
Subquery<String> query = cq.subquery(String.class);
Root<LocationTag> tagRoot = query.from(LocationTag.class);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论