dyh-gateway/src/main/java/cn/huge/gateway/utils/SpringContextUtil.java
@@ -53,7 +53,7 @@ public static Boolean checkDev(){ String activeProfile = getActiveProfile(); if (DEV.equals(activeProfile)){ return false; return true; }else{ return false; } dyh-gateway/src/main/resources/config/application.yml
@@ -54,4 +54,4 @@ #refreshToken过期时间:13小时,比token时间长一点 expire-time: 46800000 #不进行token拦截 auth-skip-urls: /dyh-sys/api/v1/fileInfo/show,/dyh-sys/api/v1/fileInfo/down,/api/v1/ctAccount/login,/dyh-cust/api/weChat/paAccount,/dyh-sys/api/weChat/paHotNews/listShow,/dyh-mediate/api/weChat/paCaseInfo/mediatePower,/dyh-mediate/api/v1/caseOut/rmtj/selectExcels,/dyh-mediate/api/v1/caseOut/rmtj/selectFiles,/dyh-mediate/api/v1/caseInfo/exportListToExcel,/dyh-sys/dingTalk/api/fileInfo/ocrIdcard,/dyh-mediate/api/v1/caseOut/rmtj/outQueryEnd,/dyh-mediate/api/v1/caseInfo/reportStatisticsListToExcel,/dyh-mediate/api/v1/caseInfo/tjExcels,/dyh-mediate/api/v1/caseInfo/tjFiles,/dyh-mediate/api/analyseScreen/unitCount,/dyh-mediate/api/analyseScreen/mediatorCount,/dyh-mediate/api/analyseScreen/mediationCount,/dyh-mediate/api/analyseScreen/caseReasonRate,/dyh-mediate/api/analyseScreen/mediatorReasonRate,/dyh-mediate/api/analyseScreen/monthCount,/dyh-mediate/api/analyseScreen/findAllUnit,/dyh-mediate/api/analyseScreen/findAllCount,/dyh-mediate/api/analyseScreen/dynamicDetail,/dyh-mediate/api/v1/caseInfo/exportAiDoc auth-skip-urls: /dyh-sys/api/v1/sync/universalSync dyh-service/dyh-base/src/main/java/cn/huge/module/cust/dto/CtUserDTO.java
@@ -143,7 +143,7 @@ /** * 组织类型,1:指挥中心,2:职能部门,3:镇街,:4:村居社区,5:行、专业,6:企、事业,7:演示测试,9:其他 */ private String unitType; private Integer unitType; /** * 部门编号 dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/UtilsClientImpl.java
@@ -49,4 +49,5 @@ throw new ServiceException("UtilsClientImpl.getNewTimeId", e); } } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/controller/web/CtRoleWebController.java
File was renamed from dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/controller/web/CRoleWebController.java @@ -1,9 +1,9 @@ package cn.huge.module.ctrole.controller; package cn.huge.module.ctrole.controller.web; import cn.huge.base.common.utils.ReturnFailUtils; import cn.huge.base.common.utils.ReturnSucUtils; import cn.huge.module.ctrole.domain.po.CRole; import cn.huge.module.ctrole.service.CRoleService; import cn.huge.module.ctrole.domain.po.CtRole; import cn.huge.module.ctrole.service.CtRoleService; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -15,8 +15,6 @@ import javax.servlet.http.HttpServletRequest; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; /** * @title: 角色表接口api @@ -29,13 +27,13 @@ @Slf4j @RestController @RequestMapping("/api/web/cRole") public class CRoleWebController { public class CtRoleWebController { @Autowired(required = false) private HttpServletRequest request; @Autowired private CRoleService service; private CtRoleService service; /** * 获取请求URL参数 @@ -123,7 +121,7 @@ Map<String, Object> terms = getParameter(); Sort sort = Sort.by(Sort.Direction.DESC, "create_time"); PageRequest pageRequest = PageRequest.of(page-1, size, sort); Page<CRole> cRolePage = service.pageQuery(pageRequest, terms); Page<CtRole> cRolePage = service.pageQuery(pageRequest, terms); return ReturnSucUtils.getRepInfo( "处理成功", cRolePage); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); @@ -164,13 +162,13 @@ /** * 新增或更新对象 * @url {ctx}/api/web/cRole/saveCRole * @param cRole 实体对象 * @param ctRole 实体对象 * @return Object */ @PostMapping("/saveCRole") public Object saveCRole(@RequestBody CRole cRole) { public Object saveCRole(@RequestBody CtRole ctRole) { try { service.saveCRole(cRole); service.saveCRole(ctRole); return ReturnSucUtils.getRepInfo(); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/dao/mapper/CtRoleMapper.java
File was renamed from dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/dao/mapper/CRoleMapper.java @@ -1,6 +1,6 @@ package cn.huge.module.ctrole.dao.mapper; import cn.huge.module.ctrole.domain.po.CRole; import cn.huge.module.ctrole.domain.po.CtRole; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.springframework.data.domain.PageRequest; @@ -18,20 +18,20 @@ * @version 1.0.0 */ @Repository public interface CRoleMapper extends BaseMapper<CRole>{ public interface CtRoleMapper extends BaseMapper<CtRole>{ /** * 更新对象 * @param entity 对象 */ void updateCRole(@Param("entity") CRole entity); void updateCRole(@Param("entity") CtRole entity); /** * 条件更新对象 * @param entity 对象 * @param terms 条件 */ void updateCRoleTerms(@Param("entity") CRole entity, @Param("terms") Map<String, Object> terms); void updateCRoleTerms(@Param("entity") CtRole entity, @Param("terms") Map<String, Object> terms); /** * 根据编号物理删除 @@ -44,7 +44,7 @@ * @param terms 查询条件集合 * @return List<CRole> */ List<CRole> listTerms(@Param("terms") Map<String, Object> terms); List<CtRole> listTerms(@Param("terms") Map<String, Object> terms); /** * 按条件查询实体总数 @@ -59,6 +59,6 @@ * @param terms 查询条件集合 * @return List<CRole> */ List<CRole> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms); List<CtRole> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms); } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/dao/mapper/xml/CtRoleMapper.xml
File was renamed from dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/dao/mapper/xml/CRoleMapper.xml @@ -8,9 +8,9 @@ * @time:2024-08-19 20:04:19 * @version 1.0.0 --> <mapper namespace="cn.huge.module.ctrole.dao.mapper.CRoleMapper"> <mapper namespace="cn.huge.module.ctrole.dao.mapper.CtRoleMapper"> <!-- 结果集 --> <resultMap id="dataResult" type="cn.huge.module.ctrole.domain.po.CRole"> <resultMap id="dataResult" type="cn.huge.module.ctrole.domain.po.CtRole"> <result property="id" column="id"/> <result property="roleCode" column="role_code"/> <result property="name" column="name"/> dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/bo/CtRoleBO.java
File was renamed from dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/bo/CRoleBO.java @@ -1,6 +1,6 @@ package cn.huge.module.ctrole.domain.bo; import cn.huge.module.ctrole.domain.po.CRole; import cn.huge.module.ctrole.domain.po.CtRole; /** * @title: 角色表业务扩展类 @@ -9,9 +9,9 @@ * @author: liyj * @time: 2024-08-19 20:04:19 * @version: 1.0.0 * @see cn.huge.module.ctrole.domain.po.CRole * @see CtRole */ public class CRoleBO extends CRole { public class CtRoleBO extends CtRole { } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/po/CtRole.java
File was renamed from dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/po/CRole.java @@ -18,7 +18,7 @@ */ @TableName(value = "dyh_ct_role") @Data public class CRole { public class CtRole { /** * 角色编号 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRoleService.java
File was renamed from dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CRoleService.java @@ -4,19 +4,17 @@ import cn.huge.base.common.utils.DateUtils; import cn.huge.base.common.utils.IdUtils; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.ctrole.dao.mapper.CRoleMapper; import cn.huge.module.ctrole.domain.po.CRole; import cn.huge.module.ctrole.dao.mapper.CtRoleMapper; import cn.huge.module.ctrole.domain.po.CtRole; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.Date; import java.util.List; import java.util.Map; @@ -32,10 +30,10 @@ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class CRoleService extends ServiceImpl<CRoleMapper, CRole>{ public class CtRoleService extends ServiceImpl<CtRoleMapper, CtRole>{ @Autowired private CRoleMapper mapper; private CtRoleMapper mapper; @Autowired private UtilsClientImpl utilsClient; @@ -44,7 +42,7 @@ * 更新对象 * @param entity 对象 */ public void updateCRole(CRole entity){ public void updateCRole(CtRole entity){ try{ mapper.updateCRole(entity); }catch (Exception e){ @@ -58,7 +56,7 @@ * @param entity 对象 * @param terms 条件 */ public void updateCRoleTerms(CRole entity, Map<String, Object> terms){ public void updateCRoleTerms(CtRole entity, Map<String, Object> terms){ try{ mapper.updateCRoleTerms(entity, terms); }catch (Exception e){ @@ -85,7 +83,7 @@ * @param terms 条件 * @return List */ public List<CRole> listTerms(Map<String, Object> terms){ public List<CtRole> listTerms(Map<String, Object> terms){ return mapper.listTerms(terms); } @@ -104,26 +102,26 @@ * @param terms 条件 * @return Page */ public Page<CRole> pageQuery(PageRequest page, Map<String, Object> terms){ public Page<CtRole> pageQuery(PageRequest page, Map<String, Object> terms){ long total = mapper.countTerms(terms); List<CRole> content = mapper.pageTerms(page, terms); return new PageImpl<CRole>(content, page, total); List<CtRole> content = mapper.pageTerms(page, terms); return new PageImpl<CtRole>(content, page, total); } /** * 新增或更新对象 * @param cRole 实体对象 * @param ctRole 实体对象 */ public void saveCRole(CRole cRole){ public void saveCRole(CtRole ctRole){ try{ Date nowDate = DateUtils.getNowDate(); // 判断是否新增 if (IdUtils.checkNewId(cRole.getId())){ cRole.setId(utilsClient.getNewTimeId()); cRole.setCreateTime(nowDate); if (IdUtils.checkNewId(ctRole.getId())){ ctRole.setId(utilsClient.getNewTimeId()); ctRole.setCreateTime(nowDate); } cRole.setUpdateTime(nowDate); this.saveOrUpdate(cRole); ctRole.setUpdateTime(nowDate); this.saveOrUpdate(ctRole); }catch (Exception e){ log.error("[CRoleService.saveCRole]调用失败,异常信息:"+e, e); throw new ServiceException("CRoleService.saveCRole", e); dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtPostWebController.java
@@ -2,8 +2,12 @@ import cn.huge.base.common.utils.ReturnFailUtils; import cn.huge.base.common.utils.ReturnSucUtils; import cn.huge.base.config.CurrentUser; import cn.huge.module.ctuser.domain.po.CtPost; import cn.huge.module.ctuser.domain.po.CtUser; import cn.huge.module.ctuser.service.CtPostService; import cn.huge.module.ctuser.service.CtUserService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -36,6 +41,9 @@ @Autowired private CtPostService service; @Autowired private CtUserService ctUserService; /** * 获取请求URL参数 @@ -172,4 +180,24 @@ } } /** * 根据单位编号查询所有岗位 * @url {ctx}/api/v1/ctPost/getByUnitId * @param userId 登录用户编号 * @return Object * @throws Exception */ @GetMapping("/getByUnitId") public Object getByUnitId(@CurrentUser String userId) { try { // 获取当前登录用户 CtUser ctUser = ctUserService.getById(userId); QueryWrapper<CtPost> ctPostQueryWrapper = new QueryWrapper<>(); ctPostQueryWrapper.eq("unit_id", ctUser.getUnitId()); List<CtPost> ctPostList = service.list(ctPostQueryWrapper); return ReturnSucUtils.getRepInfo(ctPostList); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUnitWebController.java
@@ -1,9 +1,12 @@ package cn.huge.module.ctuser.controller; package cn.huge.module.ctuser.controller.web; import cn.huge.base.common.utils.ReturnFailUtils; import cn.huge.base.common.utils.ReturnSucUtils; import cn.huge.base.config.CurrentUser; import cn.huge.module.ctuser.domain.po.CtUnit; import cn.huge.module.ctuser.domain.po.CtUser; import cn.huge.module.ctuser.service.CtUnitService; import cn.huge.module.ctuser.service.CtUserService; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -14,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -36,6 +40,9 @@ @Autowired private CtUnitService service; @Autowired private CtUserService ctUserService; /** * 获取请求URL参数 @@ -307,4 +314,55 @@ } } /** * 批量新增-数据迁移 * @url {ctx}/api/web/ctUnit/saveCtUnitList * @param targetCtUnitList 实体对象 * @return Object */ @PostMapping("/saveCtUnitList") public Object saveCtUnitList(@RequestBody List<CtUnit> targetCtUnitList) { try { service.saveBatch(targetCtUnitList); return ReturnSucUtils.getRepInfo(); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 获取所有组织(包含所有下级子组织)树形结构 * @url {ctx}/api/v1/ctUnit/listUnitTree * @param userId 登录用户标识称 * @return Object */ @GetMapping("/listUnitTree") public Object listUnitTree(@CurrentUser String userId) { try { // 获取当前登录用户 CtUser ctUser = ctUserService.getById(userId); // 查询当前登录用户下的所有单位 List<CtUnit> ctUnits = service.listUnitTree(ctUser.getCustId(), ctUser.getUnitId()); return ReturnSucUtils.getRepInfo( "查询成功", ctUnits); } catch (Exception e) { return ReturnFailUtils.getRepInfo( "查询失败", null); } } /** * 获取组织详情(包含组织下的部门详情) * @url {ctx}/api/v1/ctUnit/getUnitAndDept?id= * @param id 组织编号 * @return Object */ @GetMapping("/getUnitAndDept") public Object getUnitAndDept(@RequestParam(value = "id") String id) { try { //查询该用户组织和部门 CtUnit ctUnit = service.getUnitAndDept(id); return ReturnSucUtils.getRepInfo( "查询成功", ctUnit); } catch (Exception e) { return ReturnFailUtils.getRepInfo( "查询失败", null); } } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUserWebController.java
@@ -1,12 +1,22 @@ package cn.huge.module.ctuser.controller; package cn.huge.module.ctuser.controller.web; import cn.huge.base.common.dto.SelectTermDTO; import cn.huge.base.common.utils.ObjectUtils; import cn.huge.base.common.utils.ReturnFailUtils; import cn.huge.base.common.utils.ReturnSucUtils; import cn.huge.base.common.utils.SelectTermUtils; import cn.huge.base.config.CurrentUser; import cn.huge.module.ctuser.domain.po.CtUser; import cn.huge.module.ctuser.service.CtUserService; import cn.huge.module.ctrole.domain.po.CtRole; import cn.huge.module.ctrole.service.CtRoleService; import cn.huge.module.ctuser.domain.po.*; import cn.huge.module.ctuser.service.*; import cn.huge.module.cust.constant.RoleBaseEnum; import cn.huge.module.cust.constant.UserBaseConsts; import cn.huge.module.cust.dto.CtUserDTO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -15,6 +25,8 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -37,6 +49,24 @@ @Autowired private CtUserService service; @Autowired private CtUnitService ctUnitService; @Autowired private CtRoleService ctRoleService; @Autowired private CtDeptService ctDeptService; @Autowired private CtUseroleService ctUseroleService; @Autowired private CtAccountService ctAccountService; @Autowired private CtUsepostService ctUsepostService; /** * 获取请求URL参数 @@ -259,4 +289,161 @@ } } /** * 获取人员信息列表查询条件 * @url {ctx}/api/v1/ctUser/listSelectTerm * @return userId 登录用户标识称 * @return Object * @throws Exception */ @GetMapping("/listSelectTerm") public Object listSelectTerm(@CurrentUser String userId) { try { Map<String, Object> result = Maps.newHashMap(); // 获取当前登录用户 CtUser loginUser = service.getById(userId); // 组织条件 QueryWrapper<CtUnit> ctUnitQueryWrapper = new QueryWrapper<>(); ctUnitQueryWrapper.eq("cust_id", loginUser.getCustId()); List<CtUnit> ctUnits = ctUnitService.list(ctUnitQueryWrapper); List<SelectTermDTO> unitSelectTerms = new ArrayList<>(); for (CtUnit ctUnit: ctUnits) { SelectTermDTO unitSelectTerm = new SelectTermDTO(); unitSelectTerm.setValue(ctUnit.getId()); unitSelectTerm.setLabel(ctUnit.getUnitName()); unitSelectTerm.setParentId(ctUnit.getParentId()); unitSelectTerms.add(unitSelectTerm); // 部门条件 QueryWrapper<CtDept> ctDeptQueryWrapper = new QueryWrapper<>(); ctDeptQueryWrapper.eq("unit_id", ctUnit.getId()); List<CtDept> ctDepts = ctDeptService.list(ctDeptQueryWrapper); if (CollectionUtils.isNotEmpty(ctDepts)) { List<SelectTermDTO> deptSelectTerms = new ArrayList<>(); for (CtDept ctDept : ctDepts) { SelectTermDTO deptSelectTerm = new SelectTermDTO(); deptSelectTerm.setValue(ctDept.getId()); deptSelectTerm.setLabel(ctDept.getName()); deptSelectTerm.setParentId(ctDept.getParentId()); deptSelectTerms.add(deptSelectTerm); } List<SelectTermDTO> depts = SelectTermUtils.createTreeByRoot(deptSelectTerms); unitSelectTerm.setChainList(depts); } } result.put("units", SelectTermUtils.createTreeByFirst(unitSelectTerms, loginUser.getUnitId())); // 角色条件 QueryWrapper<CtRole> ctRoleQueryWrapper = new QueryWrapper<>(); ctRoleQueryWrapper.eq("unit_id", loginUser.getUnitId()); //判断是否为村居(村居不应该有调委会管理员角色) QueryWrapper<CtUnit> ctUnitQueryWrapper1 = new QueryWrapper<>(); ctUnitQueryWrapper1.eq("id", loginUser.getUnitId()).eq("cust_id", loginUser.getCustId()) .select("unit_type"); CtUnit ctUnit = ctUnitService.getOne(ctUnitQueryWrapper1); if(UserBaseConsts.UNIT_TYPE_4.equals(ctUnit.getUnitType())){ ctRoleQueryWrapper.ne("role_code", RoleBaseEnum.ROLE_9.getIndex()); } List<CtRole> ctRoleList = ctRoleService.list(ctRoleQueryWrapper); List<SelectTermDTO> roleSelectTerms = new ArrayList<>(); for (CtRole ctRole: ctRoleList){ SelectTermDTO selectTerm = new SelectTermDTO(); selectTerm.setValue(ctRole.getRoleCode()); selectTerm.setLabel(ctRole.getName()); roleSelectTerms.add(selectTerm); } result.put("roles", roleSelectTerms); return ReturnSucUtils.getRepInfo( "查询成功", result); } catch (Exception e) { log.error("Controller接口[CtUserController.listSelectTerm]请求异常:"+e, e); return ReturnFailUtils.getRepInfo("查询失败", null); } } /** * 条件分页查询人员信息 * @url {ctx}/api/v1/ctUser/pageQuery * @param page 页码 * @param size 每页数量 * @return Object */ @GetMapping("/pageQuery") public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size, @CurrentUser String userId) { try { // 获取当前登录用户 CtUserDTO loginUser = service.clientGetUserAll(userId); Map<String, Object> result = Maps.newHashMap(); Map<String, Object> terms = getParameter(); if (RoleBaseEnum.checkAdminPower(loginUser)){ terms.put("custId", loginUser.getCustId()); }else if (RoleBaseEnum.checkCourtOrUnitPower(loginUser.getRoleCodes())){ terms.put("custId", loginUser.getCustId()); String unitId = (String) terms.get("unitId"); if (StringUtils.isEmpty(unitId)){ terms.put("unitId", loginUser.getUnitId()); } }else { terms.put("custId", loginUser.getCustId()); terms.put("id", loginUser.getId()); } Sort sort = Sort.by(Sort.Direction.DESC, "t1.create_time"); PageRequest pageRequest = PageRequest.of(page-1, size, sort); Page<CtUser> ctUserPage = service.pageUserAndRole(pageRequest, terms); QueryWrapper<CtAccount> accountQueryWrapper = new QueryWrapper<>(); QueryWrapper<CtUserole> ctUseroleQueryWrapper = new QueryWrapper<>(); QueryWrapper<CtUsepost> ctUsepostQueryWrapper = new QueryWrapper<>(); for (CtUser ctUser: ctUserPage){ accountQueryWrapper.clear(); // 密码 accountQueryWrapper.eq("acc_type", UserBaseConsts.ACC_TYPE_1); accountQueryWrapper.eq("user_id", ctUser.getId()); CtAccount ctAccount = ctAccountService.getOne(accountQueryWrapper); if (ObjectUtils.isNotEmpty(ctAccount)){ ctUser.setAcc(ctAccount.getAcc()); ctUser.setCipher(ctAccount.getCipherOpen()); } // 角色 ctUseroleQueryWrapper.clear(); ctUseroleQueryWrapper.eq("user_id", ctUser.getId()); List<CtUserole> ctUseroleList = ctUseroleService.list(ctUseroleQueryWrapper); if (ObjectUtils.isNotEmpty(ctUseroleList)){ for (CtUserole ctUserole: ctUseroleList){ ctUserole.setRoleId(ctUserole.getRoleCode()); } ctUser.setCtUseroleList(ctUseroleList); } // 岗位 ctUsepostQueryWrapper.clear(); ctUsepostQueryWrapper.eq("user_id", ctUser.getId()); List<CtUsepost> ctUsepostList = ctUsepostService.list(ctUsepostQueryWrapper); if (ObjectUtils.isNotEmpty(ctUsepostList)) { ctUser.setCtUsepostList(ctUsepostList); } } result.put("ctUserPage", ctUserPage); terms = Maps.newHashMap(); // 生效名额 terms.put("status", UserBaseConsts.USER_STATUS_1); terms.put("custId", loginUser.getCustId()); if (RoleBaseEnum.checkAdminPower(loginUser)){ terms.put("custId", loginUser.getCustId()); }else if (RoleBaseEnum.checkCourtOrUnitPower(loginUser.getRoleCodes())){ terms.put("custId", loginUser.getCustId()); String unitId = (String) terms.get("unitId"); if (StringUtils.isEmpty(unitId)){ terms.put("unitId", loginUser.getUnitId()); } }else { terms.put("custId", loginUser.getCustId()); terms.put("id", loginUser.getId()); } long countZzStatus = service.countTerms(terms); result.put("countZzStatus", countZzStatus); return ReturnSucUtils.getRepInfo( "处理成功", result); } catch (Exception e) { log.error("Controller接口[CtUserController.pageQuery]请求异常:"+e, e); return ReturnFailUtils.getRepInfo(e.getMessage(), null); } } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUserMapper.java
@@ -61,4 +61,18 @@ */ List<CtUser> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms); /** * 按条件查询实体总数 * * @param terms 查询条件集合 */ long countQueryCtUser(@Param("terms") Map<String, Object> terms); /** * 按条件查询实体分页结果集 * @param page 分页对象 * @param terms 查询条件集合 * @return */ List<CtUser> pageQueryCtUser(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms); } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUseroleMapper.java
@@ -61,4 +61,11 @@ */ List<CtUserole> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms); /** * 根据用户编号获取其角色名代码 * @param userId 用户编号 * @return List<String> */ List<String> listRoleCode(@Param("userId") String userId); } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUserMapper.xml
@@ -325,4 +325,86 @@ limit #{page.offset}, #{page.size} </select> <!-- 根据条件统计 --> <select id="countQueryCtUser" resultType="java.lang.Long"> SELECT COUNT(distinct t1.id) FROM dyh_ct_user t1 LEFT JOIN dyh_ct_userole t2 on t1.id = t2.user_id <if test="terms != null"> <where> <if test="terms.trueName != null and terms.trueName !=''"> and t1.true_name like concat('%', #{terms.trueName}, '%') </if> <if test="terms.acc != null and terms.acc !=''"> and t1.acc like concat('%', #{terms.acc}, '%') </if> <if test="terms.unitId != null and terms.unitId !=''"> and t1.unit_id = #{terms.unitId} </if> <if test="terms.deptId != null and terms.deptId !=''"> and t1.dept_id = #{terms.deptId} </if> <if test="terms.status != null and terms.status !=''"> and t1.status = #{terms.status} </if> <if test="terms.deleteStatus = null and terms.deleteStatus =''"> and t1.delete_status = '1' </if> <if test="terms.deleteStatus != null and terms.deleteStatus !=''"> and t1.delete_status = #{terms.deleteStatus} </if> <if test="terms.roleId != null and terms.roleId !=''"> and t2.role_id = #{terms.roleId} </if> </where> </if> </select> <!-- 根据条件分页查询 --> <select id="pageQueryCtUser" resultMap="dataResult"> SELECT t1.* FROM dyh_ct_user t1 LEFT JOIN dyh_ct_userole t2 on t1.id = t2.user_id <if test="terms != null"> <where> <if test="terms.trueName != null and terms.trueName !=''"> and t1.true_name like concat('%', #{terms.trueName}, '%') </if> <if test="terms.acc != null and terms.acc !=''"> and t1.acc like concat('%', #{terms.acc}, '%') </if> <if test="terms.unitId != null and terms.unitId !=''"> and t1.unit_id = #{terms.unitId} </if> <if test="terms.deptId != null and terms.deptId !=''"> and t1.dept_id = #{terms.deptId} </if> <if test="terms.status != null and terms.status !=''"> and t1.status = #{terms.status} </if> <if test="terms.deleteStatus = null and terms.deleteStatus =''"> and t1.delete_status = '1' </if> <if test="terms.deleteStatus != null and terms.deleteStatus !=''"> and t1.delete_status = #{terms.deleteStatus} </if> <if test="terms.roleId != null and terms.roleId !=''"> and t2.role_id = #{terms.roleId} </if> <if test="terms.roleCode != null and terms.roleCode !=''"> and t2.role_code = #{terms.roleCode} </if> </where> </if> GROUP BY t1.id <if test="page.sort != null"> <foreach collection="page.sort" item="s" index="index" separator="," open="order by "> isnull(${s.property}), ${s.property} ${s.direction} </foreach> </if> <if test="page.sort == null"> order by isnull(t1.create_time), t1.create_time desc </if> limit #{page.offset}, #{page.size} </select> </mapper> dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUseroleMapper.xml
@@ -142,4 +142,13 @@ limit #{page.offset}, #{page.size} </select> <select id="listRoleCode" resultType="String"> select role_code FROM <include refid="table-name" /> WHERE user_id = #{userId} </select> </mapper> dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/domain/po/CtDept.java
@@ -7,6 +7,7 @@ import lombok.Data; import java.util.Date; import java.util.List; /** * @title: 客户部门表数据库对应关系类 @@ -105,4 +106,22 @@ @TableField(value = "update_time") private Date updateTime; /** * 人员数量 */ @TableField(exist = false) private Integer countCtUser; /** * 部门下的人员 */ @TableField(exist = false) private List<CtUser> matchUsers; /** * 子部门 */ @TableField(exist = false) private List<CtDept> children; } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/domain/po/CtUnit.java
@@ -7,6 +7,7 @@ import lombok.Data; import java.util.Date; import java.util.List; /** * @title: 客户组织信息表数据库对应关系类 @@ -231,4 +232,34 @@ @TableField(value = "update_time") private Date updateTime; /** * 子部门 */ @TableField(exist = false) private List<CtDept> ctDepts; /** * 部门数量 */ @TableField(exist = false) private Integer countCtDept; /** * 人员数量 */ @TableField(exist = false) private Integer countCtUser; /** * 子组织 */ @TableField(exist = false) private List<CtUnit> children; /** * 组织下未配岗人员 */ @TableField(exist = false) private List<CtUser> unMatchUsers; } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/domain/po/CtUser.java
@@ -7,6 +7,7 @@ import lombok.Data; import java.util.Date; import java.util.List; /** * @title: 客户用户表数据库对应关系类 @@ -249,4 +250,27 @@ @TableField(value = "update_time") private Date updateTime; /** * 平台账号 */ @TableField(exist = false) private String acc; /** * 密码 */ @TableField(exist = false) private String cipher; /** * 人员角色信息 */ @TableField(exist = false) private List<CtUserole> ctUseroleList; /** * 人员岗位信息 */ @TableField(exist = false) private List<CtUsepost> ctUsepostList; } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dto/UserLoginDTO.java
@@ -1,8 +1,6 @@ package cn.huge.module.ctuser.dto; import cn.huge.module.ctuser.domain.po.CtUserole; import cn.huge.module.user.domain.po.CtUser; import cn.huge.module.user.domain.po.CtUserole; import lombok.Data; import java.util.Date; dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtDeptService.java
@@ -4,9 +4,12 @@ import cn.huge.base.common.utils.DateUtils; import cn.huge.base.common.utils.IdUtils; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.constant.BaseConsts; import cn.huge.module.ctuser.dao.mapper.CtDeptMapper; import cn.huge.module.ctuser.domain.po.CtDept; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; @@ -17,6 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -130,4 +134,51 @@ } } /** * 创建某一级部门下树形结构 * @param ctDeptList 所有部门集合 * @param firstId 某一级组织编号 * @return List */ public List<CtDept> createTree(List<CtDept> ctDeptList, String firstId) { List<CtDept> firstMapList= new ArrayList<>(); for (CtDept ctDept: ctDeptList ){ for(CtDept deptParam: ctDeptList ) { if (deptParam.getId().equals(ctDept.getParentId())) { addToMBean(deptParam, ctDept); break; } } } //取第一级节点 for (CtDept dept: ctDeptList ){ if (StringUtils.isNotEmpty(firstId)){ if (firstId.equals(dept.getId())) { firstMapList.add(dept); } }else{ if (BaseConsts.ROOT.equals(dept.getParentId()) || StringUtils.isEmpty(dept.getParentId())) { firstMapList.add(dept); } } } return firstMapList; } /** * 获取部门的子级部门 * @param targetUnit 目标部门 * @param currentUnit 子级部门 */ public void addToMBean(CtDept targetUnit, CtDept currentUnit){ List<CtDept> childListObj = targetUnit.getChildren(); List<CtDept> childList = null; if(CollectionUtils.isEmpty(childListObj)) { childList = new ArrayList(); targetUnit.setChildren(childList); }else{ childList = childListObj; } childList.add(currentUnit); } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtPostService.java
@@ -3,9 +3,12 @@ import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.DateUtils; import cn.huge.base.common.utils.IdUtils; import cn.huge.base.config.CurrentUser; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.ctuser.dao.mapper.CtPostMapper; import cn.huge.module.ctuser.domain.po.CtPost; import cn.huge.module.ctuser.domain.po.CtUser; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -15,6 +18,7 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import javax.annotation.PostConstruct; import java.util.Date; @@ -130,4 +134,5 @@ } } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUnitService.java
@@ -3,10 +3,17 @@ import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.DateUtils; import cn.huge.base.common.utils.IdUtils; import cn.huge.base.config.CurrentUser; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.constant.BaseConsts; import cn.huge.module.ctuser.dao.mapper.CtUnitMapper; import cn.huge.module.ctuser.domain.po.CtDept; import cn.huge.module.ctuser.domain.po.CtUnit; import cn.huge.module.ctuser.domain.po.CtUser; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; @@ -15,11 +22,14 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @title: 客户组织信息表业务逻辑处理 @@ -39,6 +49,12 @@ @Autowired private UtilsClientImpl utilsClient; @Autowired private CtDeptService ctDeptService; @Autowired private CtUserService ctUserService; /** * 更新对象 @@ -130,4 +146,126 @@ } } /** * 获取所有组织(包含所有下级子组织) * * @param custId 客户编号 * @param firstId 某一级组织编号 * @return List */ public List<CtUnit> listUnitTree(String custId, String firstId) { QueryWrapper<CtUnit> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("cust_id", custId).orderByDesc("create_time"); List<CtUnit> ctUnits = mapper.selectList(queryWrapper); // 获取所有的 CtDept 的数量 QueryWrapper<CtDept> deptQueryWrapper = new QueryWrapper<>(); deptQueryWrapper.in("unit_id", ctUnits.stream().map(CtUnit::getId).collect(Collectors.toList())); List<CtDept> ctDepts = ctDeptService.list(deptQueryWrapper); // 将 CtDept 的数量存储在 Map 中 Map<String, Long> ctDeptCountMap = ctDepts.stream() .collect(Collectors.groupingBy(CtDept::getUnitId, Collectors.counting())); // 为每个 CtUnit 设置 CtDept 的数量 for (CtUnit ctUnit : ctUnits) { Long ctDeptsCount = ctDeptCountMap.getOrDefault(ctUnit.getId(), 0L); ctUnit.setCountCtDept(ctDeptsCount.intValue()); } return this.createTree(ctUnits, firstId); } /** * 创建某一级组织下树形结构 * * @param ctUnitList 所有组织集合 * @param firstId 某一级组织编号 * @return List */ public List<CtUnit> createTree(List<CtUnit> ctUnitList, String firstId) { List<CtUnit> firstMapList = new ArrayList<>(); for (CtUnit ctUnit : ctUnitList) { for (CtUnit currentParam : ctUnitList) { if (currentParam.getId().equals(ctUnit.getParentId())) { addToMBean(currentParam, ctUnit); break; } } } //取第一级节点 for (CtUnit unit : ctUnitList) { if (StringUtils.isNotEmpty(firstId)) { if (firstId.equals(unit.getId())) { firstMapList.add(unit); } } else { if (BaseConsts.ROOT.equals(unit.getParentId()) || StringUtils.isEmpty(unit.getParentId())) { firstMapList.add(unit); } } } return firstMapList; } /** * 获取组织的子级组织 * * @param targetUnit 目标组织 * @param currentUnit 子级组织 */ public void addToMBean(CtUnit targetUnit, CtUnit currentUnit) { List<CtUnit> childListObj = targetUnit.getChildren(); List<CtUnit> childList = null; if (CollectionUtils.isEmpty(childListObj)) { childList = new ArrayList(); targetUnit.setChildren(childList); } else { childList = childListObj; } childList.add(currentUnit); } /** * 获取组织相关数据(包含组织下的部门) * * @param unitId 组织主键编号 * @return */ public CtUnit getUnitAndDept(String unitId) { // 组织详情 CtUnit ctUnit = mapper.selectById(unitId); // 组织人员数量 QueryWrapper<CtUser> userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.eq("unit_id", unitId); Integer countCtUser = ctUserService.count(userQueryWrapper); ctUnit.setCountCtUser(countCtUser); // 未配岗人员(单位下) userQueryWrapper.isNull("dept_id"); List<CtUser> unMatchUsers = ctUserService.list(userQueryWrapper); ctUnit.setUnMatchUsers(unMatchUsers); // 部门详情 QueryWrapper<CtDept> deptQueryWrapper = new QueryWrapper<>(); deptQueryWrapper.eq("unit_id", unitId); deptQueryWrapper.orderByDesc("create_time"); List<CtDept> ctDepts = ctDeptService.list(deptQueryWrapper); for (CtDept ctDept : ctDepts) { // 部门 userQueryWrapper.clear(); userQueryWrapper.eq("dept_id", ctDept.getId()); // 部门下成员 List<CtUser> matchUsers = ctUserService.list(userQueryWrapper); ctDept.setMatchUsers(matchUsers); // 部门人员数量 int countDeptUser = ctUserService.count(userQueryWrapper); ctDept.setCountCtUser(countDeptUser); } List<CtDept> ctDeptTrees = ctDeptService.createTree(ctDepts, null); ctUnit.setCtDepts(ctDeptTrees); // 部门数量 ctUnit.setCountCtDept(ctDepts.size()); return ctUnit; } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java
@@ -8,13 +8,16 @@ import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.constant.BaseConsts; import cn.huge.module.ctuser.dao.mapper.CtUserMapper; import cn.huge.module.ctuser.domain.po.CtUnit; import cn.huge.module.ctuser.domain.po.CtUser; import cn.huge.module.cust.constant.UserBaseConsts; import cn.huge.module.cust.dto.CtUserDTO; import cn.huge.module.redis.constant.RedisKeyConsts; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -30,6 +33,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @title: 客户用户表业务逻辑处理 @@ -52,6 +56,12 @@ @Autowired private UtilsClientImpl utilsClient; @Autowired private CtUnitService ctUnitService; @Autowired private CtUseroleService ctUseroleService; /** * 更新对象 @@ -194,4 +204,70 @@ } } /** * 重写根据id获取用户 * @param userId 登录用户编号 * @return Object */ public CtUser getById(String userId) { String loginUserId = ""; if (userId.indexOf(BaseConsts.AND) != -1){ String[] userIds = userId.split(BaseConsts.AND); loginUserId = userIds[0]; }else { loginUserId = userId; } return mapper.selectById(loginUserId); } /** * 按条件分页查询 * * @param page 分页对象 * @param terms 条件 * @return Page */ public Page<CtUser> pageUserAndRole(PageRequest page, Map<String, Object> terms) { long total = mapper.countQueryCtUser(terms); List<CtUser> content = mapper.pageQueryCtUser(page, terms); return new PageImpl<CtUser>(content, page, total); } /** * 获取当前登录用户,获取用户所有信息(用户信息、角色等) * @param userId 登录用户编号 * @return Object */ public CtUserDTO clientGetUserAll(String userId) { String loginUserId = ""; String loginRoleCode = ""; if (userId.indexOf(BaseConsts.AND) != -1){ String[] userIds = userId.split(BaseConsts.AND); loginUserId = userIds[0]; loginRoleCode = userIds[1]; }else { loginUserId = userId; } // 用户信息 CtUser ctUser = mapper.selectById(loginUserId); if (ObjectUtils.isNotEmpty(ctUser)){ CtUnit ctUnit = ctUnitService.getById(ctUser.getUnitId()); CtUserDTO ctUserDTO = new CtUserDTO(); BeanUtils.copyProperties(ctUser, ctUserDTO); if(ObjectUtils.isNotEmpty(ctUnit)){ ctUserDTO.setUnitType(ctUnit.getUnitType()); } // 角色代码 if (StringUtils.isEmpty(loginRoleCode)) { List<String> roleCodeList = ctUseroleService.listRoleCode(loginUserId); String userRole = roleCodeList.stream().map(String::valueOf).collect(Collectors.joining(",")); ctUserDTO.setRoleCodes(userRole); }else { ctUserDTO.setRoleCodes(loginRoleCode); } return ctUserDTO; }else { return null; } } } dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUseroleService.java
@@ -147,4 +147,12 @@ return ctUseroleList; } /** * 根据用户编号获取其角色代码 * @param userId 用户编号 * @return List<String> */ public List<String> listRoleCode(String userId){ return mapper.listRoleCode(userId); } } dyh-service/dyh-sync/src/main/java/cn/huge/module/client/api/CustClient.java
New file @@ -0,0 +1,34 @@ package cn.huge.module.client.api; import cn.huge.base.common.bo.ReturnBO; import cn.huge.module.mediate.dto.WechatBindCaseDTO; import cn.huge.module.sync.domain.target.TargetCtUnit; 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.util.List; /** * @title: 客户用户中心微服务调用接口 * @description: 客户用户中心微服务调用接口 * @company: hugeinfo * @author: liyj * @time: 2021-11-05 16:51:48 * @version: 1.0.0 */ @FeignClient(name = "dyh-cust") public interface CustClient { /** * * @url {ctx}/api/v1/ctUser/clientGetUser?userId= * @param targetCtUnitList 登录用户编号 * @return ReturnBO */ @GetMapping("/api/web/ctUnit/saveCtUnitList") ReturnBO saveCtUnitList(@RequestBody List<TargetCtUnit> targetCtUnitList); } dyh-service/dyh-sync/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
New file @@ -0,0 +1,68 @@ package cn.huge.module.client.api.impl; import cn.huge.base.common.bo.ReturnBO; import cn.huge.base.common.constant.ReturnConsts; import cn.huge.base.common.dto.SelectTermDTO; import cn.huge.base.common.exception.ClientException; import cn.huge.base.common.exception.ServiceException; import cn.huge.module.client.api.CustClient; import cn.huge.module.cust.dto.CtUserDTO; import cn.huge.module.cust.dto.PaUserDTO; import cn.huge.module.mediate.dto.WechatBindCaseDTO; import cn.huge.module.sync.domain.target.TargetCtUnit; import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestParam; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; /** * @title: 客户用户中心微服务调用接口实现 * @description: 客户用户中心微服务调用接口实现 * @company: hugeinfo * @author: liyj * @time: 2021-11-05 16:51:48 * @version: 1.0.0 */ @Slf4j @Component public class CustClientImpl { private CustClient custClient; @Autowired public CustClientImpl(CustClient custClient) { this.custClient = custClient; } /** * ObjectMapper工具类 */ private ObjectMapper objectMapper = new ObjectMapper(); /** * 内部用户-获取登录用户 * @param userId 用户编号 * @return CtUserDTO */ public CtUserDTO clientGetUser(List<TargetCtUnit> targetCtUnitList){ try{ ReturnBO returnBo = custClient.saveCtUnitList(targetCtUnitList); if (ReturnConsts.OK == returnBo.getCode()){ CtUserDTO loginUser = objectMapper.convertValue(returnBo.getData(), CtUserDTO.class); return loginUser; }else{ log.error("Client外服务接口[CustClientImpl.clientGetUser]请求异常:" + returnBo.getMsg(), returnBo.getMsg()); throw new ClientException("CustClientImpl.clientGetUser", returnBo.getMsg()); } }catch (Exception e){ log.error("service方法[CustClientImpl.clientGetUser]调用异常:"+e, e); throw new ServiceException("CustClientImpl.clientGetUser", e); } } } dyh-service/dyh-sync/src/main/java/cn/huge/module/client/constant/SysConsts.java
New file @@ -0,0 +1,35 @@ package cn.huge.module.client.constant; /** * @title: 配置微服务相关常量类 * @description: 存放配置微服务相关常量 * @company: hugeinfo * @author: liyj * @time: 2021-11-05 16:51:48 * @version: 1.0.0 */ public class SysConsts { } /** * -------------------_ooOoo_------------------- * ------------------o8888888o------------------ * ------------------88" . "88------------------ * ------------------(| -_- |)------------------ * ------------------O\ = /O------------------ * ---------------____/`---'\____--------------- * -------------.' \\| |// `.------------- * ------------/ \\||| : |||// \------------ * -----------/ _||||| -:- |||||- \----------- * -----------| | \\\ - /// | |----------- * -----------| \_| ''\---/'' | |----------- * -----------\ .-\__ `-` ___/-. /----------- * ---------___`. .' /--.--\ `. . __---------- * ------."" '< `.___\_<|>_/___.' >'"".------- * -----| | : `- \`.;`\ _ /`;.`/ - ` : | |----- * -----\ \ `-. \_ __\ /__ _/ .-` / /----- * ======`-.____`-.___\_____/___.-`____.-'====== * -------------------`=---=' * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ---------佛祖保佑---hugeinfo---永无BUG---------- */ dyh-service/dyh-sync/src/main/java/cn/huge/module/client/utils/SysUtils.java
New file @@ -0,0 +1,35 @@ package cn.huge.module.client.utils; /** * @title: 配置微服务相关工具类 * @description: 存放配置微服务相关工具方法 * @company: hugeinfo * @author: liyj * @time: 2021-11-05 16:51:48 * @version: 1.0.0 */ public class SysUtils { } /** * -------------------_ooOoo_------------------- * ------------------o8888888o------------------ * ------------------88" . "88------------------ * ------------------(| -_- |)------------------ * ------------------O\ = /O------------------ * ---------------____/`---'\____--------------- * -------------.' \\| |// `.------------- * ------------/ \\||| : |||// \------------ * -----------/ _||||| -:- |||||- \----------- * -----------| | \\\ - /// | |----------- * -----------| \_| ''\---/'' | |----------- * -----------\ .-\__ `-` ___/-. /----------- * ---------___`. .' /--.--\ `. . __---------- * ------."" '< `.___\_<|>_/___.' >'"".------- * -----| | : `- \`.;`\ _ /`;.`/ - ` : | |----- * -----\ \ `-. \_ __\ /__ _/ .-` / /----- * ======`-.____`-.___\_____/___.-`____.-'====== * -------------------`=---=' * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ---------佛祖保佑---hugeinfo---永无BUG---------- */ dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/controller/SyncController.java
New file @@ -0,0 +1,50 @@ package cn.huge.module.sync.controller; import cn.huge.base.common.utils.ReturnFailUtils; import cn.huge.base.common.utils.ReturnSucUtils; import cn.huge.module.sync.service.SyncService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; /** * @title: 客户组织信息表接口api * @description: 客户组织信息表接口api * @company: hugeinfo * @author: liyj * @time: 2024-08-17 15:30:57 * @version: 1.0.0 */ @Slf4j @RestController @RequestMapping("/api/sync") public class SyncController { @Autowired(required = false) private HttpServletRequest request; private final SyncService syncService; public SyncController(SyncService syncService) { this.syncService = syncService; } /** * 数据迁移通用接口 * @url {ctx}/api/web/ctUnit/universalSync * @return Object */ @GetMapping("/universalSync") public Object universalSync() { try { syncService.syncData(); return ReturnSucUtils.getRepInfo( "处理成功", null); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } } dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/dao/mapper/SyncMapper.java
New file @@ -0,0 +1,40 @@ package cn.huge.module.sync.dao.mapper; import cn.huge.module.sync.domain.source.SourceCtUnit; import org.apache.ibatis.annotations.Param; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; import java.util.Set; /** * @title: 客户用户账号表持久层业务处理 * @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。 * @company: hugeinfo * @author: liyj * @time: 2024-08-17 15:30:56 * @version 1.0.0 */ @Repository public interface SyncMapper{ /** * 按条件查询结果集 * @param mysqlTableName 表名 * @param page 分页对象 * @return List<CtAccount> */ List<SourceCtUnit> pageInfo(@Param("mysqlTableName") String mysqlTableName, @Param("page") PageRequest page); /** * 按条件查询结果集 * @param mysqlTableName 表名 * @return List<CtAccount> */ int countData(@Param("mysqlTableName") String mysqlTableName); } dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/dao/mapper/xml/SyncMapper.xml
New file @@ -0,0 +1,79 @@ <?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"> <!-- * @title: 客户用户账号表 * @description: 自定义sql,请自行实现业务逻辑 * @company: hugeinfo * @author: liyj * @time:2024-08-17 15:30:56 * @version 1.0.0 --> <mapper namespace="cn.huge.module.sync.dao.mapper.SyncMapper"> <resultMap id="dataResult" type="cn.huge.module.sync.domain.source.SourceCtUnit"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="unitType" column="unit_type"/> <result property="courtStatus" column="court_status"/> <result property="unitCode" column="unit_code"/> <result property="des" column="des"/> <result property="dutyName" column="duty_name"/> <result property="dutyMobile" column="duty_mobile"/> <result property="dutyIdcard" column="duty_idcard"/> <result property="joinWay" column="join_way"/> <result property="prov" column="prov"/> <result property="provName" column="prov_name"/> <result property="city" column="city"/> <result property="cityName" column="city_name"/> <result property="area" column="area"/> <result property="areaName" column="area_name"/> <result property="road" column="road"/> <result property="roadName" column="road_name"/> <result property="village" column="village"/> <result property="villageName" column="village_name"/> <result property="addr" column="addr"/> <result property="lng" column="lng"/> <result property="lat" column="lat"/> <result property="goodField" column="good_field"/> <result property="goodFieldName" column="good_field_name"/> <result property="canField" column="can_field"/> <result property="canFieldName" column="can_field_name"/> <result property="findStatus" column="find_status"/> <result property="dispStatus" column="disp_status"/> <result property="countCase" column="count_case"/> <result property="level" column="level"/> <result property="parentId" column="parent_id"/> <result property="deleteStatus" column="delete_status"/> <result property="custId" column="cust_id"/> <result property="custProv" column="cust_prov"/> <result property="custCity" column="cust_city"/> <result property="custArea" column="cust_area"/> <result property="createTime" column="create_time"/> <result property="updateTime" column="update_time"/> </resultMap> <!-- 根据条件分页查询 --> <select id="pageInfo" resultMap = "dataResult"> SELECT * FROM ${mysqlTableName} <if test="page.sort != null"> <foreach collection="page.sort" item="s" index="index" separator="," open="order by "> ${s.property} ${s.direction} </foreach> </if> <if test="page.sort == null"> order by create_time asc </if> limit #{page.offset}, #{page.size} </select> <!-- 根据条件分页查询 --> <select id="countData" resultType="int"> SELECT count(1) FROM ${mysqlTableName} </select> </mapper> dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/domain/source/SourceCtUnit.java
New file @@ -0,0 +1,257 @@ package cn.huge.module.sync.domain.source; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; /** * @title: 客户组织表 * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。 * @company:hugeinfo * @author: chenx * @time: 2022-02-22 14:19:41 * @version 1.0.0 */ @TableName(value = "dyh_ct_unit") @Data public class SourceCtUnit { /** * 组织编号 */ @TableId(value = "id") private String id; /** * 组织名称 */ @TableField(value = "name") private String name; /** * 组织类型,1:指挥中心,2:职能部门,3:镇街,:4:村居社区,5:行、专业,6:企、事业,7:演示测试,9:其他 */ @TableField(value = "unit_type") private String unitType; /** * 是否归类为法院,1:否,2:是 */ @TableField(value = "court_status") private String courtStatus; /** * 组织机构代码 */ @TableField(value = "unit_code") private String unitCode; /** * 描述 */ @TableField(value = "des") private String des; /** * 单位负责人姓名 */ @TableField(value = "duty_name") private String dutyName; /** * 单位负责人手机号码 */ @TableField(value = "duty_mobile") private String dutyMobile; /** * 单位负责人身份证 */ @TableField(value = "duty_idcard") private String dutyIdcard; /** * 加入方式,1:系统创建(默认),1:自主申请 */ @TableField(value = "join_way") private String joinWay; /** * 组织地址省 */ @TableField(value = "prov") private String prov; /** * 组织地址省名称 */ @TableField(value = "prov_name") private String provName; /** * 组织地址市 */ @TableField(value = "city") private String city; /** * 组织地址市名称 */ @TableField(value = "city_name") private String cityName; /** * 组织地址区 */ @TableField(value = "area") private String area; /** * 组织地址区名称 */ @TableField(value = "area_name") private String areaName; /** * 组织地址街道 */ @TableField(value = "road") private String road; /** * 组织地址街道名称 */ @TableField(value = "road_name") private String roadName; /** * 组织地址社区 */ @TableField(value = "village") private String village; /** * 组织地址社区名称 */ @TableField(value = "village_name") private String villageName; /** * 组织详细地址 */ @TableField(value = "addr") private String addr; /** * 组织经度 */ @TableField(value = "lng") private String lng; /** * 组织纬度 */ @TableField(value = "lat") private String lat; /** * 父级组织,根级默认root */ @TableField(value = "parent_id") private String parentId; /** * 调解专长,多个用,隔开 */ @TableField(value = "good_field") private String goodField; /** * 调解专长名称,多个用,隔开 */ @TableField(value = "good_field_name") private String goodFieldName; /** * 调解范围,多个用,隔开 */ @TableField(value = "can_field") private String canField; /** * 调解范围名称,多个用,隔开 */ @TableField(value = "can_field_name") private String canFieldName; /** * 是否可以找他调(小程序),1:否,2:是 */ @TableField(value = "find_status") private String findStatus; /** * 是否参与自动调度,1:否,2:是 */ @TableField(value = "disp_status") private String dispStatus; /** * 累计调解数量 */ @TableField(value = "count_case") private String countCase; /** * 级别 */ @TableField(value = "level") private Integer level; /** * 删除状态,1:未删除(默认),99:已删除 */ @TableLogic @TableField(value = "delete_status") private String deleteStatus; /** * 顾客编号 */ @TableField(value = "cust_id") private String custId; /** * 所属客户省 */ @TableField(value = "cust_prov") private String custProv; /** * 所属客户市 */ @TableField(value = "cust_city") private String custCity; /** * 所属客户区 */ @TableField(value = "cust_area") private String custArea; /** * 创建时间 */ @TableField(value = "create_time") private Date createTime; /** * 更新时间 */ @TableField(value = "update_time") private Date updateTime; } dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/domain/target/TargetCtUnit.java
New file @@ -0,0 +1,232 @@ package cn.huge.module.sync.domain.target; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; import java.util.Date; /** * @title: 客户组织信息表数据库对应关系类 * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。 * @company:hugeinfo * @author: liyj * @time: 2024-08-19 20:04:19 * @version 1.0.0 */ @Data public class TargetCtUnit { /** * 组织编号 */ @TableId(value = "id") private String id; /** * 层级 */ @TableField(value = "level") private Integer level; /** * 父级组织,根级为root */ @TableField(value = "parent_id") private String parentId; /** * 组织级别,1:市级,2:区级,3:镇街级,4:村居级 */ @TableField(value = "unit_grade") private Integer unitGrade; /** * 组织名称 */ @TableField(value = "unit_name") private String unitName; /** * 组织类型,0:政法委,1:综治中心,2:直属部门,3:法院,4:行专业调委会,5:企事业调委会,6:演示测试,9:其他 */ @TableField(value = "unit_type") private Integer unitType; /** * 组织机构代码 */ @TableField(value = "unit_code") private String unitCode; /** * 描述 */ @TableField(value = "unit_des") private String unitDes; /** * 单位负责人姓名 */ @TableField(value = "duty_name") private String dutyName; /** * 单位负责人手机号码 */ @TableField(value = "duty_mobile") private String dutyMobile; /** * 单位负责人身份证 */ @TableField(value = "duty_idcard") private String dutyIdcard; /** * 加入方式,1:系统创建,2:自主申请 */ @TableField(value = "join_way") private Integer joinWay; /** * 组织地址省 */ @TableField(value = "prov") private String prov; /** * 组织地址省名称 */ @TableField(value = "prov_name") private String provName; /** * 组织地址市 */ @TableField(value = "city") private String city; /** * 组织地址市名称 */ @TableField(value = "city_name") private String cityName; /** * 组织地址区 */ @TableField(value = "area") private String area; /** * 组织地址区名称 */ @TableField(value = "area_name") private String areaName; /** * 组织地址街道 */ @TableField(value = "road") private String road; /** * 组织地址街道名称 */ @TableField(value = "road_name") private String roadName; /** * 组织地址社区 */ @TableField(value = "village") private String village; /** * 组织地址社区名称 */ @TableField(value = "village_name") private String villageName; /** * 组织详细地址 */ @TableField(value = "addr") private String addr; /** * 组织经度 */ @TableField(value = "lng") private String lng; /** * 组织纬度 */ @TableField(value = "lat") private String lat; /** * 调解专长,多个用,隔开 */ @TableField(value = "good_field") private String goodField; /** * 调解专长名称,多个用,隔开 */ @TableField(value = "good_field_name") private String goodFieldName; /** * 调解范围,多个用,隔开 */ @TableField(value = "can_field") private String canField; /** * 调解范围名称,多个用,隔开 */ @TableField(value = "can_field_name") private String canFieldName; /** * 是否可以找他调(小程序),0:否,1:是 */ @TableField(value = "find_status") private Integer findStatus; /** * 是否参与自动调度,0:否,1:是 */ @TableField(value = "disp_status") private Integer dispStatus; /** * 删除状态,0:已删除,1:未删除 */ @TableLogic @TableField(value = "delete_status") private Integer deleteStatus; /** * 所属客户编号 */ @TableField(value = "cust_id") private String custId; /** * 创建时间 */ @TableField(value = "create_time") private Date createTime; /** * 更新时间 */ @TableField(value = "update_time") private Date updateTime; } dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/service/SyncService.java
New file @@ -0,0 +1,105 @@ package cn.huge.module.sync.service; import cn.huge.module.client.api.impl.CustClientImpl; import cn.huge.module.sync.dao.mapper.SyncMapper; import cn.huge.module.sync.domain.source.SourceCtUnit; import cn.huge.module.sync.domain.target.TargetCtUnit; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.converters.DateConverter; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.annotation.Transactional; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author liyj * @version 1.0.0 * @title: 客户用户账号表业务逻辑处理 * @Description 客户用户账号表业务逻辑处理 * @company hugeinfo * @Time 2024-08-17 15:30:56 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class SyncService { @Autowired private SyncMapper syncMapper; @Autowired private CustClientImpl custClient; private static final String MYSQL_TABLE = "dyh_ct_unit"; public void syncData() { try { List<SourceCtUnit> sourceCtUnitList = new ArrayList<>(); List<TargetCtUnit> targetCtUnitList = new ArrayList<>(); // 查询MySQL表结构 Sort sort = Sort.by(Sort.Direction.ASC, "create_time"); int page = 1; int size = 1000; PageRequest pageRequest = PageRequest.of(page-1, size, sort); sourceCtUnitList = syncMapper.pageInfo(MYSQL_TABLE, pageRequest); //查询mysql总量 int total = syncMapper.countData(MYSQL_TABLE); //查出最大页数 int maxPage = 1; maxPage = (total / size); if (0 != total % size) { maxPage += 1; } for (int i = 1; i >= maxPage; i++) { for(SourceCtUnit sourceCtUnit: sourceCtUnitList){ TargetCtUnit targetCtUnit = new TargetCtUnit(); ConvertUtils.register(new DateConverter(null), java.util.Date.class); BeanUtils.copyProperties(targetCtUnit, sourceCtUnit); // for(Field field: sourceCtUnit.getClass().getDeclaredFields()){ // convertType(field.get(sourceCtUnit), field.getName(), targetCtUnit); // } targetCtUnitList.add(targetCtUnit); } if(CollectionUtils.isNotEmpty(targetCtUnitList)){ custClient.clientGetUser(targetCtUnitList); } } } catch (Exception e) { e.printStackTrace(); } } /** * 时间转换的时候,调用初始化,时间类型转换 * 使用:直接在实体中加上一个注解形式。 */ public static void initDate(){ // 时间注册 DateConverter converter = new DateConverter(null); converter.setPattern(new String("yyyy-MM-dd HH:mm:ss")); ConvertUtils.register(converter, Date.class); } public void convertType(Object value, String columnName, TargetCtUnit targetCtUnit) { if (value == null) { targetCtUnit.setUnitType(Integer.valueOf("NULL")); }else if("unitType".equals(columnName) || "joinWay".equals(columnName) || "findStatus".equals(columnName) || "dispStatus".equals(columnName)|| "deleteStatus".equals(columnName)){ targetCtUnit.setUnitType(Integer.parseInt((String) value)); } } }