diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java index e30678da3..edb0532ab 100755 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java @@ -37,6 +37,7 @@ import com.elink.esua.epdc.dto.result.KpiItemHandleAmountResultDTO; import com.elink.esua.epdc.modules.item.excel.ItemExcel; import com.elink.esua.epdc.modules.item.excel.ItemTimeoutNewExcel; import com.elink.esua.epdc.modules.item.excel.StayItemExcel; +import com.elink.esua.epdc.modules.item.redis.ItemAutoProcessRedis; import com.elink.esua.epdc.modules.item.service.ItemService; import com.elink.esua.epdc.modules.item.service.ItemTimeoutService; import org.springframework.beans.factory.annotation.Autowired; @@ -61,6 +62,8 @@ public class ItemController { private ItemService itemService; @Autowired private ItemTimeoutService itemTimeoutService; + @Autowired + private ItemAutoProcessRedis itemAutoProcessRedis; /** * 项目列表 @@ -524,5 +527,14 @@ public class ItemController { return itemService.feedback(formDto); } + /** + * 定时任务:评价超24小时的自动结案 + */ + @PostMapping("itemautoclosed") + public Result itemAutoClosed() { + itemAutoProcessRedis.consuming(); + return new Result(); + } + } diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/redis/ItemAutoProcessRedis.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/redis/ItemAutoProcessRedis.java index 087ef98b6..3e4998166 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/redis/ItemAutoProcessRedis.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/redis/ItemAutoProcessRedis.java @@ -18,6 +18,7 @@ package com.elink.esua.epdc.modules.item.redis; import com.elink.esua.epdc.commons.tools.redis.RedisUtils; +import com.elink.esua.epdc.modules.item.service.ItemService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.InitializingBean; @@ -29,6 +30,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.io.IOException; import java.util.Date; import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; @@ -51,6 +53,8 @@ public class ItemAutoProcessRedis{ @Resource private StringRedisTemplate stringRedisTemplate; + @Autowired + private ItemService itemService; /** * 生成诉求信息,用于延时任务达到时效后进行操作 @@ -88,8 +92,12 @@ public class ItemAutoProcessRedis{ if (!CollectionUtils.isEmpty(itemSerialNos)) { for (ZSetOperations.TypedTuple itemSerialNo : itemSerialNos) { log.info("诉求" + itemSerialNo.getValue() + "开始处理"); - //TODO 上报网格化平台,初验申请 - + try{ + itemService.itemClosed(itemSerialNo.getValue()); + } + catch(Exception ex){ + ex.printStackTrace(); + } log.info("诉求" + itemSerialNo.getValue() + "开始结束"); //订单关闭之后,将订单延时任务从队列中删除 stringRedisTemplate.opsForZSet().remove(ITEM_TASK_KEY, itemSerialNo.getValue()); diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/ItemService.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/ItemService.java index ca3334046..dc0204f38 100755 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/ItemService.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/ItemService.java @@ -721,6 +721,6 @@ public interface ItemService extends BaseService { /** * 定时任务:是否可以结案处理 */ - void ItemClosed(String itemId); + void itemClosed(String itemId); } diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java index 58d6c5002..b42a6cee2 100755 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java @@ -968,6 +968,16 @@ public class ItemServiceImpl extends BaseServiceImpl implem itemEntity.setEvaluationScore(evaluationFormDTO.getEvaluationScore()); itemEntity.setEvaluationContent(evaluationFormDTO.getEvaluationContent()); itemEntity.setEvaluationTime(new Date()); + //2022.10.24 评价接口增加第一次评价不管第二次为满意时不管为不满意时将数据推到难点堵点的逻辑 + if(evaluationFormDTO.getEvaluationScore()==0){ + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("item_id", evaluationFormDTO.getItemId()); + wrapper.eq("del_flag", "0"); + List iEntityList = itemCommentFeedbackDao.selectList(wrapper); + if (CollUtil.isNotEmpty(iEntityList)) { + itemEntity.setIsDifficulty("1"); + } + } baseDao.updateById(itemEntity); //内容审核接口异常,保存至待审核信息 @@ -4192,17 +4202,19 @@ public class ItemServiceImpl extends BaseServiceImpl implem * 定时任务:是否可以结案处理 */ @Override - public void ItemClosed(String itemId) { + public void itemClosed(String itemId) { //1.获取项目基础数据 ItemEntity entity = baseDao.selectById(itemId); if (null == entity) { throw new RenException("获取项目数据失败,项目Id->" + itemId); } - //2.判断是否已结案(第二次可以评价了,没超过24小时用户评价了,此时就是已结案了) - if ("10".equals(entity.getItemState())) { + //2.判断是发展、执法诉求的不作处理(这两个诉求项目必须走诉求初验终验逻辑);判断是已结案的不做处理(第二次可以评价了,没超过24小时用户评价了,此时就是已结案了) + if (!"0".equals(entity.getPeopleFlag()) || "10".equals(entity.getItemState())) { + logger.info("当前诉求不做结案处理,原因:诉求分类PeopleFlag->" + entity.getPeopleFlag() + ",诉求状态itemState->" + entity.getItemState()); return; } //3.判断评价结果,未评价的赋值为满意并且结案给网格化平台推送结果;已评价的结果为满意直接结案给网格化推结果,不满意直接给网格化推结果 + ItemHandleProcessDTO processDTO = new ItemHandleProcessDTO(); if (null == entity.getEvaluationScore() || 0 != entity.getEvaluationScore()) { //3-1.未评价的或评价结果不是不满意的则需要结案 QueryWrapper wrapper = new QueryWrapper<>(); @@ -4243,10 +4255,7 @@ public class ItemServiceImpl extends BaseServiceImpl implem dto.setCantoncode(hEntity.getGridCantoncode()); dto.setImages(imgUrlList); dto.setCreatedTime(hEntity.getCreatedTime()); - Result result = pushItemProcess(dto); - if (!result.success()) { - throw new RenException("结案操作失败,项目id->" + itemId); - } + processDTO = closedItem(dto); //3-2.未评价的赋值默认评价结果为满意 if (null == entity.getEvaluationScore()) { entity.setEvaluationScore(2); @@ -4257,9 +4266,108 @@ public class ItemServiceImpl extends BaseServiceImpl implem updateById(entity); } - //4.推送评价结果给网格化平台 - //TODO + //4.市平台推送数据 + //4-1.诉求评价 + pushToCityGridService.evaluation(itemId); + //4-2.诉求结案 + pushToCityGridService.caseClosedSentoCity(processDTO.getId()); + } + + @Transactional(rollbackFor = Exception.class) + public ItemHandleProcessDTO closedItem(AcceptPlantformProcessDTO formDto) { + String successFlag = YesOrNoEnum.NO.value(); + String returnMsgBody = ""; + ItemGridPlatformDTO itemPlat = itemGridPlatformService.getInfoByTaskId(formDto.getP_recId()); + if (null == itemPlat) { + // 保存接口调用日志 + this.saveInterfaceLog("", InterfaceLogBusinessTypeEnum.ACCEPT_ITEM_PROCESS.getValue(), + ApiConstants.acceptItemProcess, successFlag, formDto.getP_recId(), returnMsgBody); + logger.error("未查到相关事件信息"); + } + // 插入项目处理进度表 + String firstHandleId = ""; + ItemHandleProcessDTO itemHandleProcessDto = new ItemHandleProcessDTO(); + itemHandleProcessDto.setId(UUID.randomUUID().toString().replaceAll("-", "")); + itemHandleProcessDto.setItemId(itemPlat.getReferenceId()); + //组装处理人及部门相关字段 + itemHandleProcessDto.setGridPartyid(formDto.getGridPartyid()); + itemHandleProcessDto.setGridPartyname(formDto.getGridPartyname()); + itemHandleProcessDto.setGridUnitid(formDto.getGridUnitid()); + itemHandleProcessDto.setGridUnitname(formDto.getGridUnitname()); + itemHandleProcessDto.setGridCantoncode(formDto.getCantoncode()); + //根据网格化区域编码获取对应的市中心区域编码 + if (StringUtils.isNotBlank(itemHandleProcessDto.getGridCantoncode())) { + Result result = adminFeignClient.getZoneCode(itemHandleProcessDto.getGridCantoncode()); + SysDeptAreaCodeResultDTO dept = result.getData(); + if (dept != null) { + String zoneCode = dept.getDisCenterZoningCode(); + itemHandleProcessDto.setDisCenterZoningCode(zoneCode); + } + } + if ("0".equals(formDto.getState())) { + ItemEntity item = baseDao.selectById(itemPlat.getReferenceId()); + log.info("根据id查询数据"); + itemHandleProcessDto.setState(ItemGridPlatformHandleStatusEnum.HANDLE_JA.getValue()); + //判断最后一条处理进展是吹哨还是结案,结案:取第一条处置意见;吹哨:取平台处置意见 + if ("1".equals(item.getPeopleFlag()) || "2".equals(item.getPeopleFlag())) { + //执法和发展填写网格化平台的意见 + itemHandleProcessDto.setOutHandleAdvice(formDto.getHandleAdvice()); + } else if (getItemIsCs(itemPlat.getReferenceId())) { + //吹哨 + itemHandleProcessDto.setOutHandleAdvice(formDto.getHandleAdvice() + "h_s办理人:" + item.getHandlePeopleName() + ",联系电话:" + item.getHandlePeopleMobile()); + } else { + //内容组成:第一个发起结案申请+办理人:XXX+办理电话:XXX。换行(前端处理) 感谢您的支持,“北尚诉办”全程为您服务!没有结案申请就取网格化结案状态流程数据 + ItemHandleProcessEntity firsthandleProcess = baseDao.selectFirstHandleProcessByItemId(itemPlat.getReferenceId(), ItemGridPlatformHandleStatusEnum.HANDLE_SQ.getValue()); + if (firsthandleProcess == null) { + firsthandleProcess = baseDao.selectFirstHandleProcessByItemId(itemPlat.getReferenceId(), ItemGridPlatformHandleStatusEnum.HANDLE_JA.getValue()); + if (firsthandleProcess == null) { + itemHandleProcessDto.setOutHandleAdvice("办理人:" + item.getHandlePeopleName() + ",联系电话:" + item.getHandlePeopleMobile()); + } else { + firstHandleId = firsthandleProcess.getId(); + itemHandleProcessDto.setOutHandleAdvice(firsthandleProcess.getHandleAdvice() + "h_s办理人:" + item.getHandlePeopleName() + ",联系电话:" + item.getHandlePeopleMobile()); + } + } else { + firstHandleId = firsthandleProcess.getId(); + itemHandleProcessDto.setOutHandleAdvice(firsthandleProcess.getHandleAdvice() + "h_s办理人:" + item.getHandlePeopleName() + ",联系电话:" + item.getHandlePeopleMobile()); + } + + } + itemHandleProcessDto.setGridPartyname("结案"); + itemHandleProcessDto.setGridTaskcnname("区中心"); + item.setItemState(ItemHandleCategoryEnum.HANDLE_CLOSING_CASE.getValue()); + // 可以进行评价了,默认评分-满意 + item.setEvaluationScore(ItemEvaluationLevel.LEVALUATION_LEVEL_BETTER); + item.setEvaluationState(NumConstant.ONE_STR); + updateById(item); + } + itemHandleProcessDto.setHandleAdvice(formDto.getHandleAdvice()); + itemHandleProcessDto.setHandlerDept("网格化平台"); + itemHandleProcessDto.setCreatedTime(null == formDto.getCreatedTime() ? new Date() : formDto.getCreatedTime()); + itemHandleProcessDto.setUpdatedTime(new Date()); + itemHandleProcessService.saveItemHandleProcess(itemHandleProcessDto); + + if(StringUtils.isNotBlank(firstHandleId)){ + // 插入第一级结案申请时的图片 + List imageList = imgDao.selectListByRefeId(firstHandleId); + for(ImgEntity imgEntity : imageList){ + imgEntity.setId(null); + imgEntity.setReferenceId(itemHandleProcessDto.getId()); + imgDao.insert(imgEntity); + } + } + + //项目处理意见图片保存 + if (formDto.getImages() != null && formDto.getImages().size() > 0) { + imgService.saveImages(formDto.getImages(), itemHandleProcessDto.getId(), ImageConstant.TYPE_IMAGE_ITEM_OUT_HANDLE); + } + successFlag = YesOrNoEnum.YES.value(); + // 保存接口调用日志 + String message = formDto.getP_recId(); + message = message + ":" + formDto; + this.saveInterfaceLog(itemPlat.getReferenceId(), InterfaceLogBusinessTypeEnum.ACCEPT_ITEM_PROCESS.getValue(), + ApiConstants.acceptItemProcess, successFlag, message, returnMsgBody); + return itemHandleProcessDto; } diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml index 3c05f2b6d..d04de2beb 100755 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/item/ItemDao.xml @@ -640,12 +640,6 @@ AND item.MOBILE like concat('%', #{mobile}, '%') - - - AND item.item_state = '0' - AND item.evaluation_score = '0' - AND item.evaluation_time ( NOW() - interval 24 HOUR ) - ORDER BY item.CREATED_TIME DESC diff --git a/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/ItemFeignClient.java b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/ItemFeignClient.java index 3bfc57908..95097dede 100644 --- a/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/ItemFeignClient.java +++ b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/ItemFeignClient.java @@ -63,4 +63,10 @@ public interface ItemFeignClient { @PostMapping("events/itemstatis/meta/dept") Result metaDept(); + /** + * @Description 定时任务:评价超24小时的项目判断是否需要自动结案 + **/ + @PostMapping("events/item/itemautoclosed") + Result itemAutoClosed(); + } diff --git a/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/fallback/ItemFeignClientFallback.java b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/fallback/ItemFeignClientFallback.java index 300cc132c..a8f36ef4d 100644 --- a/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/fallback/ItemFeignClientFallback.java +++ b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/feign/fallback/ItemFeignClientFallback.java @@ -48,4 +48,9 @@ public class ItemFeignClientFallback implements ItemFeignClient { return ModuleUtils.feignConError(ServiceConstant.EPDC_EVENTS_SERVER, "metaDept"); } + @Override + public Result itemAutoClosed() { + return ModuleUtils.feignConError(ServiceConstant.EPDC_EVENTS_SERVER, "itemAutoClosed"); + } + } diff --git a/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/task/events/ItemAutoClosedTask.java b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/task/events/ItemAutoClosedTask.java new file mode 100644 index 000000000..3d11f3ed3 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/task/events/ItemAutoClosedTask.java @@ -0,0 +1,10 @@ +package com.elink.esua.epdc.task.events; + +/** + * 定时任务:评价超24小时的项目判断是否需要自动结案 + */ +public interface ItemAutoClosedTask { + + void run(); + +} diff --git a/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/task/events/ItemAutoClosedTaskImpl.java b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/task/events/ItemAutoClosedTaskImpl.java new file mode 100644 index 000000000..ef1329407 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-job/epdc-job-server/src/main/java/com/elink/esua/epdc/task/events/ItemAutoClosedTaskImpl.java @@ -0,0 +1,35 @@ +package com.elink.esua.epdc.task.events; + +import com.elink.esua.epdc.commons.tools.utils.DateUtils; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.feign.ItemFeignClient; +import com.elink.esua.epdc.task.screen.CalenderInitTask; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * 定时任务(每天晚上12.05执行):评价超24小时的项目判断是否需要自动结案 + */ +@Component("ItemAutoClosedTask") +@Slf4j +public class ItemAutoClosedTaskImpl implements ItemAutoClosedTask { + + @Autowired + private ItemFeignClient itemFeignClient; + + @Override + public void run() { + log.info("ItemAutoClosedTask定时任务开始执行"); + Result result = itemFeignClient.itemAutoClosed(); + if (result.success()) { + log.info("{}定时任务执行成功", getClass().getSimpleName()); + } else { + log.error("{}定时任务执行失败:{}", getClass().getSimpleName(), result.getMsg()); + } + } + +} \ No newline at end of file