|
@@ -6,18 +6,20 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.qmth.sop.business.bean.params.UserArchivesParam;
|
|
|
import com.qmth.sop.business.bean.result.UserArchivesResult;
|
|
|
+import com.qmth.sop.business.bean.result.UserArchivesSubTotalResult;
|
|
|
import com.qmth.sop.business.entity.SysSupplier;
|
|
|
import com.qmth.sop.business.entity.SysUser;
|
|
|
import com.qmth.sop.business.entity.TBUserArchives;
|
|
|
+import com.qmth.sop.business.entity.TBUserArchivesSupplier;
|
|
|
import com.qmth.sop.business.mapper.TBUserArchivesMapper;
|
|
|
-import com.qmth.sop.business.service.SysSupplierService;
|
|
|
-import com.qmth.sop.business.service.SysUserRoleService;
|
|
|
-import com.qmth.sop.business.service.TBUserArchivesService;
|
|
|
+import com.qmth.sop.business.service.*;
|
|
|
+import com.qmth.sop.common.base.BaseEntity;
|
|
|
import com.qmth.sop.common.contant.SystemConstant;
|
|
|
import com.qmth.sop.common.enums.EducationEnum;
|
|
|
import com.qmth.sop.common.enums.ExceptionResultEnum;
|
|
|
import com.qmth.sop.common.enums.GenderEnum;
|
|
|
import com.qmth.sop.common.enums.RoleTypeEnum;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
@@ -26,6 +28,7 @@ import java.time.Duration;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -41,6 +44,10 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
|
|
|
private SysUserRoleService sysUserRoleService;
|
|
|
@Resource
|
|
|
private SysSupplierService sysSupplierService;
|
|
|
+ @Resource
|
|
|
+ private TBUserArchivesSupplierService tbUserArchivesSupplierService;
|
|
|
+ @Resource
|
|
|
+ private SysUserService sysUserService;
|
|
|
|
|
|
@Override
|
|
|
public IPage<UserArchivesResult> findUserArchivesPage(String city, Long supplierId, String archivesName, RoleTypeEnum roleType, Boolean authenticationStatus, Long authenticationTimeStart, Long authenticationTimeEnd, Integer remainValidDay, Integer pageNumber, Integer pageSize) {
|
|
@@ -130,7 +137,7 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
|
|
|
}
|
|
|
}
|
|
|
Long archivesTime = userArchivesParam.getArchivesTime();
|
|
|
- List<RoleTypeEnum> roleTypeList = userArchivesParam.getRoleTypeList();
|
|
|
+ Long[] roleIds = userArchivesParam.getRoleIds();
|
|
|
Long authenticationTime = userArchivesParam.getAuthenticationTime();
|
|
|
Double authenticationScore = userArchivesParam.getAuthenticationScore();
|
|
|
Long authenticationValidTime = userArchivesParam.getAuthenticationValidTime();
|
|
@@ -151,20 +158,105 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
|
|
|
tbUserArchives.setEmail(email);
|
|
|
tbUserArchives.setBasePhotoPath(basePhotoPath);
|
|
|
// 档案表编辑
|
|
|
+ Long userId = null;
|
|
|
if (id == null || id == 0) {
|
|
|
// 新增
|
|
|
tbUserArchives.setCreateId(requestUser.getId());
|
|
|
this.save(tbUserArchives);
|
|
|
id = tbUserArchives.getId();
|
|
|
+ List<SysUser> userList = sysUserService.list(new QueryWrapper<SysUser>().lambda().eq(SysUser::getMobileNumber, mobileNumber));
|
|
|
+ if (CollectionUtils.isNotEmpty(userList)) {
|
|
|
+ if (userList.size() > 1) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("用户表数据异常: 存在多个手机号相同的用户[" + mobileNumber + "]");
|
|
|
+ }
|
|
|
+ userId = userList.get(0).getId();
|
|
|
+ }
|
|
|
} else {
|
|
|
// 编辑
|
|
|
+ TBUserArchives old = this.getById(id);
|
|
|
+ if (Objects.isNull(old)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("用户不存在");
|
|
|
+ }
|
|
|
+ List<SysUser> userList = sysUserService.list(new QueryWrapper<SysUser>().lambda().eq(SysUser::getMobileNumber, old.getMobileNumber()));
|
|
|
+ if (CollectionUtils.isNotEmpty(userList)) {
|
|
|
+ if (userList.size() > 1) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("用户表数据异常: 存在多个手机号相同的用户[" + mobileNumber + "]");
|
|
|
+ }
|
|
|
+ userId = userList.get(0).getId();
|
|
|
+ }
|
|
|
tbUserArchives.setId(id);
|
|
|
tbUserArchives.setUpdateId(requestUser.getId());
|
|
|
this.updateById(tbUserArchives);
|
|
|
}
|
|
|
|
|
|
- // 档案详细表编辑
|
|
|
- // TODO: 2023/8/14 档案详细 用户关联新增
|
|
|
- return null;
|
|
|
+ // 档案详细表编辑 (先根据档案id删除再新增)
|
|
|
+ tbUserArchivesSupplierService.remove(new QueryWrapper<TBUserArchivesSupplier>().lambda().eq(TBUserArchivesSupplier::getUserArchivesId, id));
|
|
|
+ TBUserArchivesSupplier tbUserArchivesSupplier = new TBUserArchivesSupplier();
|
|
|
+ tbUserArchivesSupplier.setUserArchivesId(id);
|
|
|
+ tbUserArchivesSupplier.setArchivesTime(archivesTime);
|
|
|
+ tbUserArchivesSupplier.setAuthenticationTime(authenticationTime);
|
|
|
+ tbUserArchivesSupplier.setAuthenticationScore(authenticationScore);
|
|
|
+ tbUserArchivesSupplier.setAuthenticationValidTime(authenticationValidTime);
|
|
|
+ tbUserArchivesSupplier.setSupplierId(supplierId);
|
|
|
+ tbUserArchivesSupplier.setRemark(remark);
|
|
|
+ tbUserArchivesSupplierService.save(tbUserArchivesSupplier);
|
|
|
+
|
|
|
+ // 用户编辑 - 根据手机号关联更新
|
|
|
+ SysUser sysUser = new SysUser();
|
|
|
+ if (userId != null && userId > 0) {
|
|
|
+ // 编辑
|
|
|
+ sysUser = sysUserService.getById(userId);
|
|
|
+ } else {
|
|
|
+ sysUser.setLoginName(name);
|
|
|
+ sysUser.setRealName(name);
|
|
|
+ sysUser.setPasswordInfo(sysUser.getMobileNumber());
|
|
|
+ }
|
|
|
+ sysUser.setMobileNumber(mobileNumber);
|
|
|
+ sysUser.setGender(gender);
|
|
|
+ sysUser.setRoleIds(roleIds);
|
|
|
+ sysUserService.saveUser(sysUser);
|
|
|
+ return id;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public UserArchivesSubTotalResult findUserArchivesSubTotal() {
|
|
|
+ UserArchivesSubTotalResult result = new UserArchivesSubTotalResult();
|
|
|
+ List<UserArchivesResult> userArchivesResultList = this.baseMapper.findSubTotal();
|
|
|
+ if (CollectionUtils.isNotEmpty(userArchivesResultList)) {
|
|
|
+ Long currentTime = System.currentTimeMillis();
|
|
|
+ Integer totalCount = userArchivesResultList.size();
|
|
|
+ List<UserArchivesResult> validList = userArchivesResultList.stream()
|
|
|
+ .filter(e -> e.getAuthenticationValidTime() != null && e.getAuthenticationValidTime() > currentTime)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Integer validCount = validList.size();
|
|
|
+ Integer inValidCount = totalCount - validCount;
|
|
|
+
|
|
|
+ result.setTotalCount(totalCount);
|
|
|
+ result.setValidCount(validCount);
|
|
|
+ result.setInvalidCount(inValidCount);
|
|
|
+
|
|
|
+ List<Long> userIdList = validList.stream().map(UserArchivesResult::getUserId).distinct().collect(Collectors.toList());
|
|
|
+ List<SysUser> effectEngineer = sysUserService.findUserListByRoleType(RoleTypeEnum.EFFECT_ENGINEER);
|
|
|
+ if (CollectionUtils.isNotEmpty(effectEngineer)) {
|
|
|
+ List<Long> effectEngineerIdList = effectEngineer.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList());
|
|
|
+ Integer effectEngineerCount = (int) userIdList.stream().filter(effectEngineerIdList::contains).count();
|
|
|
+ result.setEffectEngineerCount(effectEngineerCount);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SysUser> regionCoordinator = sysUserService.findUserListByRoleType(RoleTypeEnum.REGION_COORDINATOR);
|
|
|
+ if (CollectionUtils.isNotEmpty(regionCoordinator)) {
|
|
|
+ List<Long> regionCoordinatorIdList = regionCoordinator.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList());
|
|
|
+ Integer effectEngineerCount = (int) userIdList.stream().filter(regionCoordinatorIdList::contains).count();
|
|
|
+ result.setEffectEngineerCount(effectEngineerCount);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SysUser> assistantEngineer = sysUserService.findUserListByRoleType(RoleTypeEnum.ASSISTANT_ENGINEER);
|
|
|
+ if (CollectionUtils.isNotEmpty(assistantEngineer)) {
|
|
|
+ List<Long> assistantEngineerIdList = assistantEngineer.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList());
|
|
|
+ Integer assistantEngineerCount = (int) userIdList.stream().filter(assistantEngineerIdList::contains).count();
|
|
|
+ result.setAssistantEngineerCount(assistantEngineerCount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
}
|
|
|
-}
|
|
|
+}
|