diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/TCCCClientUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/TCCCClientUtils.java index 822d6cfe22..7fcff43282 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/TCCCClientUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/net/TCCCClientUtils.java @@ -21,12 +21,15 @@ public class TCCCClientUtils { private static String SECRETKEY = "ymRuDJI8mCRUUPFvQqCPQME0c2MbfaM2"; + private static String ENDPOINT ="ccc.ap-shanghai.tencentcloudapi.com"; + public static String getToken() { try { Credential cred = new Credential(SECRETID, SECRETKEY); // 实例化一个http选项,可选的,没有特殊需求可以跳过 + HttpProfile httpProfile = new HttpProfile(); - httpProfile.setEndpoint("ccc.ap-shanghai.tencentcloudapi.com"); + httpProfile.setEndpoint(ENDPOINT); // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); @@ -46,4 +49,8 @@ public class TCCCClientUtils { return e.toString(); } } + + public static void main(String[] args) { + getToken(); + } } diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/LingshanServiceAgentAgentList.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/LingshanServiceAgentAgentList.java new file mode 100644 index 0000000000..49fa8d30d9 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/LingshanServiceAgentAgentList.java @@ -0,0 +1,25 @@ +package com.epmet.dataaggre.dto.epmetuser.result; + +import lombok.Data; + +/** + * @Description 灵山代办,代办员列表 + * @Author wangxianzhang + * @Time 2023/5/9 4:26 PM + */ +@Data +public class LingshanServiceAgentAgentList { + + private String gridId; + private String orgNamePath; + private String agentId; + private String agentName; + private Integer gender; + private String genderDisplay; + private Integer age; + private String cultureDisplay; + private Integer culture; + private String mobile; + private String idCard; + +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/LingShanAgentServiceStaffAndGrid.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/LingShanAgentServiceStaffAndGrid.java new file mode 100644 index 0000000000..a3d2ed5bc8 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/LingShanAgentServiceStaffAndGrid.java @@ -0,0 +1,10 @@ +package com.epmet.dataaggre.beans; + +import lombok.Data; + +@Data +public class LingShanAgentServiceStaffAndGrid { + private String staffId; + + private String gridId; +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/StaffInfoInGridOfRole.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/StaffInfoInGridOfRole.java new file mode 100644 index 0000000000..352fb79a0a --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/StaffInfoInGridOfRole.java @@ -0,0 +1,14 @@ +package com.epmet.dataaggre.beans; + +import lombok.Data; + +@Data +public class StaffInfoInGridOfRole { + private String staffId; + private String staffName; + private Integer gender; + private Integer age; + private Integer culture; + private String mobile; + private String idCard; +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/LingShanServiceAgentController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/LingShanServiceAgentController.java new file mode 100644 index 0000000000..1fa76f9bfd --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/LingShanServiceAgentController.java @@ -0,0 +1,46 @@ +package com.epmet.dataaggre.controller; + +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dataaggre.dto.epmetuser.result.LingshanServiceAgentAgentList; +import com.epmet.dataaggre.service.LingShanServiceAgentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("lingshan/serviceAgent") +public class LingShanServiceAgentController { + + @Autowired + private LingShanServiceAgentService lingShanServiceAgentService; + + /** + * @description: 工作端pc,代办员列表 + * @param pageNo: + * @param pageSize: + * @param orgId: + * @param orgType: + * @param agentName: + * @param mobile: + * @param idCard: + * @return + * @author: WangXianZhang + * @date: 2023/5/9 4:30 PM + */ + @GetMapping("workpc/agentList") + public Result> workPcAgentList(@RequestParam("pageNo") Integer pageNo, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("orgId") String orgId, + @RequestParam("orgType") String orgType, + @RequestParam("agentName") String agentName, + @RequestParam("mobile") Integer mobile, + @RequestParam("idCard") Integer idCard) { + + PageData pd = lingShanServiceAgentService.workPcAgentList(orgId, orgType, agentName, mobile, idCard, pageNo, pageSize); + return new Result>().ok(pd); + } + +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/CustomerStaffDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/CustomerStaffDao.java index 6062e45dcb..cd6059ed50 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/CustomerStaffDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/CustomerStaffDao.java @@ -18,6 +18,7 @@ package com.epmet.dataaggre.dao.epmetuser; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dataaggre.beans.StaffInfoInGridOfRole; import com.epmet.dataaggre.dto.epmetuser.CustomerStaffDTO; import com.epmet.dataaggre.dto.epmetuser.result.ListStaffResultDTO; import com.epmet.dataaggre.dto.epmetuser.result.StaffSelectResDTO; @@ -28,6 +29,7 @@ import org.apache.ibatis.annotations.Param; import java.util.LinkedList; import java.util.List; +import java.util.Set; /** * 政府工作人员表 @@ -78,8 +80,25 @@ public interface CustomerStaffDao extends BaseDao { /** * 根据staffId查询姓名、手机号 * 禁用的不展示 - * @param staffIds + * @param staffIdss * @return */ List staffSelectList(@Param("staffIds") List staffIds); + + /** + * @Description:查询工作人员列表 + * @param staffIds: 工作人员id列表 + * @param roleId: 角色id + * @param mobile: 手机号 + * @param realname: realname + * @param idCard: 身份证 + * @Return void + * @Author: wangxianzhang + * @Date: 2023/5/10 9:37 AM + */ + List selectStaffListByStaffIdsAndRole(@Param("staffIds") Set staffIds, + @Param("roleId") String roleId, + @Param("mobile") Integer mobile, + @Param("realname") String realname, + @Param("idCard") Integer idCard); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/CustomerStaffGridDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/CustomerStaffGridDao.java index b481617cb2..8073c55807 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/CustomerStaffGridDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/CustomerStaffGridDao.java @@ -18,14 +18,17 @@ package com.epmet.dataaggre.dao.govorg; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dataaggre.beans.LingShanAgentServiceStaffAndGrid; import com.epmet.dataaggre.dto.govorg.OrgDTO; import com.epmet.dataaggre.dto.govorg.result.GridStaffResultDTO; import com.epmet.dataaggre.dto.govorg.result.StaffAgencyGridListResultDTO; import com.epmet.dataaggre.entity.govorg.CustomerStaffGridEntity; +import com.epmet.dataaggre.service.impl.LingShanServiceAgentServiceImpl; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 网格人员关系表 @@ -58,4 +61,6 @@ public interface CustomerStaffGridDao extends BaseDao { List selectGridList(@Param("agencyId") String agencyId, @Param("userId") String userId); List getGridStaffByAgency(@Param("agencyId") String agencyId); + + List getStaffAndItsBelongsGridByAgencyIdPath(@Param("agencyIdPath") String agencyIdPath); } \ No newline at end of file diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/LingShanServiceAgentService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/LingShanServiceAgentService.java new file mode 100644 index 0000000000..779d4c26b7 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/LingShanServiceAgentService.java @@ -0,0 +1,8 @@ +package com.epmet.dataaggre.service; + +import com.epmet.commons.tools.page.PageData; +import com.epmet.dataaggre.dto.epmetuser.result.LingshanServiceAgentAgentList; + +public interface LingShanServiceAgentService { + PageData workPcAgentList(String orgId, String orgType, String agentName, Integer mobile, Integer idCard, Integer pageNo, Integer pageSize); +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java index 6ff3e02f90..53fb0f2880 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java @@ -2,6 +2,7 @@ package com.epmet.dataaggre.service.epmetuser; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.dataaggre.beans.StaffInfoInGridOfRole; import com.epmet.dataaggre.dto.datastats.form.NowStatsDataFormDTO; import com.epmet.dataaggre.dto.datastats.result.NowStatsDataResultDTO; import com.epmet.dataaggre.dto.epmetuser.form.*; @@ -26,6 +27,7 @@ import com.epmet.dto.result.DetailByTypeResultDTO; import java.util.List; import java.util.Map; +import java.util.Set; /** * @Author zxc @@ -263,4 +265,6 @@ public interface EpmetUserService { */ DetailByTypeResultDTO detailByType(DetailByTypeFormDTO formDTO, TokenDto tokenDto); + PageData staffListInGridsOfRole(String roleKey, Set staffIds, String agentName, Integer mobile, Integer idCard, + Integer pageNo, Integer pageSize); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java index 96f4162fe8..e6bfd22670 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java @@ -24,6 +24,7 @@ import com.epmet.commons.tools.utils.*; import com.epmet.constant.BadgeConstant; import com.epmet.constant.NeighborhoodConstant; import com.epmet.constant.OrgInfoConstant; +import com.epmet.dataaggre.beans.StaffInfoInGridOfRole; import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.dao.epmetuser.*; import com.epmet.dataaggre.dto.datastats.form.NowStatsDataFormDTO; @@ -1149,4 +1150,23 @@ public class EpmetUserServiceImpl implements EpmetUserService, ResultDataResolve epmetMessageOpenFeignClient.sendSystemMsgByMQ(form); return result; } + + @Override + public PageData staffListInGridsOfRole(String roleKey, Set staffIds, String agentName, Integer mobile, + Integer idCard, Integer pageNo, Integer pageSize) { + + LambdaQueryWrapper rq = new LambdaQueryWrapper<>(); + rq.eq(GovStaffRoleEntity::getCustomerId, EpmetRequestHolder.getLoginUserCustomerId()); + rq.eq(GovStaffRoleEntity::getRoleKey, roleKey); + GovStaffRoleEntity role = govStaffRoleDao.selectOne(rq); + if (role == null) { + return null; + } + + PageHelper.startPage(pageNo, pageSize); + List ss = customerStaffDao.selectStaffListByStaffIdsAndRole(staffIds, role.getId(), mobile, agentName, idCard); + + return new PageData<>(ss, new PageInfo<>(ss).getTotal()); + + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java index 7464db5e2b..1828e4c713 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java @@ -3,6 +3,7 @@ package com.epmet.dataaggre.service.govorg; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.redis.common.bean.BuildingInfoCache; import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.dataaggre.beans.LingShanAgentServiceStaffAndGrid; import com.epmet.dataaggre.dto.epmetuser.form.ResisByPolicyRulesFormDTO; import com.epmet.dataaggre.dto.epmetuser.result.StaffSelectResDTO; import com.epmet.dataaggre.dto.evaluationindex.ScreenAgencyOrGridListDTO; @@ -18,6 +19,7 @@ import com.epmet.dto.IcNeighborHoodDTO; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; +import java.util.Set; /** * @Author zxc @@ -301,4 +303,7 @@ public interface GovOrgService { */ Map getEmployeeRegisterMobileAndIdCard(String registerId); + List getStaffAndItsBelongsGridByAgencyIdPath(String agencyIdPath); + + Set getStaffIdsInGrid(String gridId); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java index ab72e0992d..36755471d7 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java @@ -32,6 +32,7 @@ import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.HttpClientManager; import com.epmet.commons.tools.utils.Result; +import com.epmet.dataaggre.beans.LingShanAgentServiceStaffAndGrid; import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.constant.OrgConstant; import com.epmet.dataaggre.dao.govorg.*; @@ -49,6 +50,7 @@ import com.epmet.dataaggre.dto.govorg.result.*; import com.epmet.dataaggre.dto.resigroup.result.OrgInfoCommonDTO; import com.epmet.dataaggre.entity.govorg.CustomerAgencyEntity; import com.epmet.dataaggre.entity.govorg.CustomerGridEntity; +import com.epmet.dataaggre.entity.govorg.CustomerStaffGridEntity; import com.epmet.dataaggre.excel.GridLivelyDetailExcel; import com.epmet.dataaggre.excel.GridLivelyExcel; import com.epmet.dataaggre.service.commonservice.AreaCodeService; @@ -1540,4 +1542,16 @@ public class GovOrgServiceImpl implements GovOrgService { return customerAgencyDao.getEmployeeRegisterMobileAndIdCard(registerId); } + @Override + public List getStaffAndItsBelongsGridByAgencyIdPath(String agencyIdPath) { + return customerStaffGridDao.getStaffAndItsBelongsGridByAgencyIdPath(agencyIdPath); + } + + @Override + public Set getStaffIdsInGrid(String gridId) { + LambdaQueryWrapper q = new LambdaQueryWrapper<>(); + q.eq(CustomerStaffGridEntity::getGridId, gridId); + List es = customerStaffGridDao.selectList(q); + return es.stream().map(CustomerStaffGridEntity::getUserId).collect(Collectors.toSet()); + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/LingShanServiceAgentServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/LingShanServiceAgentServiceImpl.java new file mode 100644 index 0000000000..82cd3515d9 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/LingShanServiceAgentServiceImpl.java @@ -0,0 +1,128 @@ +package com.epmet.dataaggre.service.impl; + +import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.enums.DictTypeEnum; +import com.epmet.commons.tools.enums.GenderEnum; +import com.epmet.commons.tools.feign.ResultDataResolver; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.redis.common.CustomerOrgRedis; +import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache; +import com.epmet.commons.tools.redis.common.bean.GridInfoCache; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.PidUtils; +import com.epmet.constant.OrgInfoConstant; +import com.epmet.constant.RoleKeyConstants; +import com.epmet.dataaggre.beans.LingShanAgentServiceStaffAndGrid; +import com.epmet.dataaggre.beans.StaffInfoInGridOfRole; +import com.epmet.dataaggre.dto.epmetuser.result.LingshanServiceAgentAgentList; +import com.epmet.dataaggre.service.LingShanServiceAgentService; +import com.epmet.dataaggre.service.epmetuser.EpmetUserService; +import com.epmet.dataaggre.service.govorg.GovOrgService; +import com.epmet.dto.SysDictDataDTO; +import com.epmet.feign.EpmetAdminOpenFeignClient; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.sql.Array; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class LingShanServiceAgentServiceImpl implements LingShanServiceAgentService, ResultDataResolver { + + @Autowired + private EpmetUserService epmetUserService; + + @Autowired + private GovOrgService govOrgService; + + @Autowired + private EpmetAdminOpenFeignClient adminOpenFeignClient; + + @Override + public PageData workPcAgentList(String orgId, String orgType, String agentName, Integer mobile, Integer idCard, + Integer pageNo, Integer pageSize) { + + // 1个人可能属于多个wangge + Map> staffIdAndGridIds = new HashMap<>(); + Set staffIds = new HashSet<>(); + + // 得到staffIds和staffIdAndGridIds + if (OrgInfoConstant.AGENCY.equals(orgType)) { + // agency + AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(orgId); + List sags = govOrgService.getStaffAndItsBelongsGridByAgencyIdPath(PidUtils.convertPid2OrgIdPath(agencyInfo.getId(), agencyInfo.getPids())); + for (LingShanAgentServiceStaffAndGrid sag : sags) { + staffIds.add(sag.getStaffId()); + + List gridIds = staffIdAndGridIds.get(sag.getStaffId()); + if (CollectionUtils.isEmpty(gridIds)) { + gridIds = new ArrayList<>(); + staffIdAndGridIds.put(sag.getStaffId(), gridIds); + } + + gridIds.add(sag.getGridId()); + } + } else if (OrgInfoConstant.GRID.equals(orgType)) { + // 网格 + staffIds = govOrgService.getStaffIdsInGrid(orgId); + for (String staffId : staffIds) { + staffIdAndGridIds.put(staffId, Arrays.asList(orgId)); + } + } + + // 开始查询staff列表 + PageData pd = epmetUserService.staffListInGridsOfRole(RoleKeyConstants.ROLE_KEY_AGENT, staffIds, agentName, mobile, idCard, pageNo, pageSize); + + if (pd == null) { + return new PageData(new ArrayList(), 0); + } + + // 性别字典 + List edus = getResultDataOrReturnNull(adminOpenFeignClient.dictDataList(DictTypeEnum.EDUCATION.getCode()), ServiceConstant.EPMET_ADMIN_SERVER); + Map eduMap = edus.stream().collect(Collectors.toMap(SysDictDataDTO::getDictValue, SysDictDataDTO::getDictLabel)); + + // 转换为dto + List rl = pd.getList().stream().map(e -> { + LingshanServiceAgentAgentList d = new LingshanServiceAgentAgentList(); + d.setAgentName(e.getStaffName()); + d.setAgentId(e.getStaffId()); + d.setGender(e.getGender()); + d.setGenderDisplay(GenderEnum.getName(e.getGender().toString())); + d.setAge(e.getAge()); + d.setCulture(e.getCulture()); + if (e.getCulture() != null) { + d.setCultureDisplay(eduMap.get(e.getCulture().toString())); + } + d.setMobile(e.getMobile()); + d.setIdCard(e.getIdCard()); + + // 组织名称 + d.setOrgNamePath(getOrgNamePath(staffIdAndGridIds.get(e.getStaffId()))); + return d; + }).collect(Collectors.toList()); + + return new PageData<>(rl, pd.getTotal()); + } + + /** + * 通过gridid列表,拼接处组织名称path,例如:开发者社区-Java第一网格,开发者社区-Python第一网格 + */ + private String getOrgNamePath(List gridIds) { + List orgNames = gridIds.stream().map(gridId -> { + GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(gridId); + if (gridInfo == null) { + return null; + } + + AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(gridInfo.getPid()); + String agencyName = agencyInfo.getOrganizationName(); + return agencyName.concat("-").concat(gridInfo.getGridName()); + }).filter(Objects::nonNull).collect(Collectors.toList()); + + return String.join(",", orgNames); + } + + +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml index 8bc486c5e0..78ec048218 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml @@ -163,4 +163,35 @@ cs.user_id = #{staffId} + + \ No newline at end of file diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerStaffGridDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerStaffGridDao.xml index 0120ff67a5..af5b07332c 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerStaffGridDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerStaffGridDao.xml @@ -68,4 +68,14 @@ AND b.PID = #{agencyId} + + + + \ No newline at end of file diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/LingShanAgentServiceController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/LingShanAgentServiceController.java index f27ffc4181..91338c87f1 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/LingShanAgentServiceController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/LingShanAgentServiceController.java @@ -61,6 +61,36 @@ public class LingShanAgentServiceController { return new Result().ok(pd); } + /** + * @Description: 撤回 + * @param form: + * @Return com.epmet.commons.tools.utils.Result + * @Author: wangxianzhang + * @Date: 2023/5/10 11:20 AM + */ + @PostMapping("resi/withdraw") + public Result resiWithDraw(@RequestBody Map form) { + String id = form.get("id"); + if (StringUtils.isBlank(id)) { + throw new ValidateException("缺少ID参数"); + } + + lingShanServiceAgentService.resiWithDraw(id); + return new Result(); + } + + @PostMapping("resi/evaluate") + public Result resiEvaluate(@RequestBody Map form) { + String id = (String) form.get("id"); + Integer satisfication = (Integer) form.get("satisfication"); + if (StringUtils.isAnyBlank(id) || satisfication == null) { + throw new ValidateException("缺少ID参数"); + } + + lingShanServiceAgentService.resiEvaluate(id, satisfication); + return new Result(); + } + /** * @description: 工作端-服务列表 * 这个接口返回的跟居民端一样,所以暂时就调用居民端一样的接口了。 diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/LingShanAgentServiceService.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/LingShanAgentServiceService.java index 1f9e7093a5..14e83ec1a9 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/LingShanAgentServiceService.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/LingShanAgentServiceService.java @@ -17,4 +17,8 @@ public interface LingShanAgentServiceService { void workProcess(String id, Integer processType, String processDesc); void workClose(String id, String processDesc, List processAttachments); + + void resiWithDraw(String id); + + void resiEvaluate(String id, Integer satisfication); } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/LingShanAgentServiceServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/LingShanAgentServiceServiceImpl.java index b75d84f059..405e93721e 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/LingShanAgentServiceServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/LingShanAgentServiceServiceImpl.java @@ -3,8 +3,10 @@ package com.epmet.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.epmet.LingShanAgentServiceProcessStatusEnum; +import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.redis.common.CustomerOrgRedis; import com.epmet.commons.tools.redis.common.CustomerResiUserRedis; @@ -24,6 +26,7 @@ import com.epmet.service.LingShanAgentServiceService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -41,6 +44,11 @@ public class LingShanAgentServiceServiceImpl implements LingShanAgentServiceServ @Autowired private LingshanAgentServiceRecordDao agentServiceRecordDao; + @Autowired + private DistributedLock distributedLock; + + public static final String AGENT_SERVICE_LOCK_PREFIX = "lingshan:agentservice:statuschange:"; + @Override public void resiSubmit(AgentServiceResiSubmitFormDTO form) { @@ -104,19 +112,30 @@ public class LingShanAgentServiceServiceImpl implements LingShanAgentServiceServ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "【代办服务】未找到指定的服务信息,ID:" + id); } - // 执行状态变更校验 - statusChangeValid(service.getProcessStatus(), processType); - - Date now = new Date(); - - LingshanAgentServiceRecordEntity e2Update = new LingshanAgentServiceRecordEntity(); - e2Update.setId(id); - // 处理,处理受理状态和描述,以及处理时间 - e2Update.setProcessStatus(processType); - e2Update.setProcessDesc(processDesc); - e2Update.setProcessTime(now); - - agentServiceRecordDao.updateById(e2Update); + RLock lock = distributedLock.getLock(AGENT_SERVICE_LOCK_PREFIX + id); + try { + // 执行状态变更校验 + statusChangeCheck(service.getProcessStatus(), processType); + + Date now = new Date(); + + LingshanAgentServiceRecordEntity e2Update = new LingshanAgentServiceRecordEntity(); + e2Update.setId(id); + // 处理,处理受理状态和描述,以及处理时间 + e2Update.setProcessStatus(processType); + e2Update.setProcessDesc(processDesc); + e2Update.setProcessTime(now); + + agentServiceRecordDao.updateById(e2Update); + } catch (Exception e) { + log.error("【待办服务】办结:分布式锁错误:" + ExceptionUtils.getErrorStackTrace(e)); + throw e; + } finally { + // 释放锁 + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } } @Override @@ -126,20 +145,32 @@ public class LingShanAgentServiceServiceImpl implements LingShanAgentServiceServ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "【代办服务】未找到指定的服务信息,ID:" + id); } - // 执行状态变更校验 - LingShanAgentServiceProcessStatusEnum closeStatusEnum = LingShanAgentServiceProcessStatusEnum.CLOSED; - statusChangeValid(service.getProcessStatus(), closeStatusEnum.getStatusCode()); - - Date now = new Date(); - - LingshanAgentServiceRecordEntity e2Update = new LingshanAgentServiceRecordEntity(); - e2Update.setId(id); - // 办结,设置处理状态,办结描述,办结时间 - e2Update.setProcessStatus(closeStatusEnum.getStatusCode()); - e2Update.setCloseDesc(processDesc); - e2Update.setCloseTime(now); - - agentServiceRecordDao.updateById(e2Update); + RLock lock = distributedLock.getLock(AGENT_SERVICE_LOCK_PREFIX + id); + + try { + // 执行状态变更校验 + LingShanAgentServiceProcessStatusEnum closeStatusEnum = LingShanAgentServiceProcessStatusEnum.CLOSED; + statusChangeCheck(service.getProcessStatus(), closeStatusEnum.getStatusCode()); + + Date now = new Date(); + + LingshanAgentServiceRecordEntity e2Update = new LingshanAgentServiceRecordEntity(); + e2Update.setId(id); + // 办结,设置处理状态,办结描述,办结时间 + e2Update.setProcessStatus(closeStatusEnum.getStatusCode()); + e2Update.setCloseDesc(processDesc); + e2Update.setCloseTime(now); + + agentServiceRecordDao.updateById(e2Update); + } catch (Exception e) { + log.error("【待办服务】办结:分布式锁错误:" + ExceptionUtils.getErrorStackTrace(e)); + throw e; + } finally { + // 释放锁 + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } } /** @@ -150,7 +181,7 @@ public class LingShanAgentServiceServiceImpl implements LingShanAgentServiceServ * @author: WangXianZhang * @date: 2023/5/9 1:57 PM */ - private void statusChangeValid(Integer oldStatus, Integer newStatus) { + private void statusChangeCheck(Integer oldStatus, Integer newStatus) { if (newStatus.intValue() == LingShanAgentServiceProcessStatusEnum.WITHDRAW.getStatusCode() && oldStatus.intValue() != LingShanAgentServiceProcessStatusEnum.WAIT_ACCEPT.getStatusCode()) { // 只有待处理状态,才能撤回 @@ -170,4 +201,50 @@ public class LingShanAgentServiceServiceImpl implements LingShanAgentServiceServ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, String.format("【代办服务】当前状态为'%s',不允许操作", LingShanAgentServiceProcessStatusEnum.getByStatus(oldStatus).getStatusName())); } } + + @Override + public void resiWithDraw(String id) { + LingshanAgentServiceRecordEntity service; + if ((service = agentServiceRecordDao.selectById(id)) == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "【代办服务】未找到指定的服务信息,ID:" + id); + } + + RLock lock = distributedLock.getLock(AGENT_SERVICE_LOCK_PREFIX + id); + + try { + // 状态检查 + statusChangeCheck(service.getProcessStatus(), LingShanAgentServiceProcessStatusEnum.WITHDRAW.getStatusCode()); + + LingshanAgentServiceRecordEntity e2update = new LingshanAgentServiceRecordEntity(); + e2update.setId(id); + e2update.setProcessStatus(LingShanAgentServiceProcessStatusEnum.WITHDRAW.getStatusCode()); + agentServiceRecordDao.updateById(e2update); + } catch (Exception e) { + log.error("【待办服务】撤回:分布式锁错误:" + ExceptionUtils.getErrorStackTrace(e)); + throw e; + } finally { + // 释放锁 + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + } + + @Override + public void resiEvaluate(String id, Integer satisfication) { + LingshanAgentServiceRecordEntity service; + if ((service = agentServiceRecordDao.selectById(id)) == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, "【代办服务】未找到指定的服务信息,ID:" + id); + } + + if (! service.getProcessStatus().equals(LingShanAgentServiceProcessStatusEnum.CLOSED.getStatusCode())) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), null, + "【代办服务】只有办结的服务才能进行评价,当前状态为:" + LingShanAgentServiceProcessStatusEnum.getByStatus(service.getProcessStatus()).getStatusName()); + } + + LingshanAgentServiceRecordEntity e2update = new LingshanAgentServiceRecordEntity(); + e2update.setId(id); + e2update.setSatisfication(satisfication); + agentServiceRecordDao.updateById(e2update); + } }