diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java index 47305a84..6909e0d9 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java @@ -18,6 +18,7 @@ import com.nflg.mobilebroken.common.pojo.dto.DevComponentExcel; import com.nflg.mobilebroken.common.pojo.dto.DevComponentImportExcel; import com.nflg.mobilebroken.common.pojo.query.DeviceComponentQuery; import com.nflg.mobilebroken.common.pojo.vo.DeviceComponentDetailVO; +import com.nflg.mobilebroken.common.pojo.vo.DeviceComponentPartGroupVO; import com.nflg.mobilebroken.common.pojo.vo.DeviceComponentVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.EecExcelUtil; @@ -70,7 +71,12 @@ public class DeviceComponentController extends ControllerBase { Page result = deviceComponentService.selectListByPage(query); result.getRecords().forEach(u->{ List detail = deviceComponentDetailService.getDevicePartDetail(u.getId()); - u.setPartList(Convert.toList(DeviceComponentDetailVO.class,detail)); + Map> collect=detail.stream().collect(Collectors.groupingBy(DeviceComponentDetailVO::getTypeAttr)); + List vos=new ArrayList<>(); + collect.forEach((k,v)->{ + vos.add(new DeviceComponentPartGroupVO().setTypeAttr(k).setItems(v)); + }); + u.setPartList(vos); }); return ApiResult.success(result.getRecords(),query,result.getTotal()); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java index e3cf849c..fd47d07e 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java @@ -64,18 +64,26 @@ public class TicketCompleteEvent extends ApplicationEvent implements Application .setCreateTime(LocalDateTime.now())); //我的待办 //CQM - AdminUser cqmUser = adminUserService.getById(ticket.getCqm()); - adminMessageService.add( - new AdminMessage() - .setNo(ticket.getNo()) - .setTitle(ticket.getTitle()) - .setUserId(cqmUser.getId()) - .setSourceId(ticket.getId()) - .setSource(0) - .setType(MessageType.WorkOrderAssignment.getState()) - .setSubType(MessageSubType.TicketCompletion.getState()) - .setIsRead(false) - .setCreateTime(LocalDateTime.now())); + List cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()); + if (CollectionUtil.isEmpty(cqms)){ + log.warn("该设备尚未设置CQM负责人:{}", ticket.getDeviceNo()); + }else { + List cqmUsers = adminUserService.listByIds(cqms); + if (CollectionUtil.isNotEmpty(cqmUsers)) { + cqmUsers.forEach(c -> adminMessageService.add( + new AdminMessage() + .setNo(ticket.getNo()) + .setTitle(ticket.getTitle()) + .setUserId(c.getId()) + .setSourceId(ticket.getId()) + .setSource(0) + .setType(MessageType.WorkOrderAssignment.getState()) + .setSubType(MessageSubType.TicketCompletion.getState()) + .setIsRead(false) + .setCreateTime(LocalDateTime.now())) + ); + } + } } private void sendEmail(){ diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java index 326e805b..d7fb0eaa 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java @@ -90,6 +90,9 @@ public class TicketScheduledTasks { @Resource private SsePushService ssePushService; + @Resource + private ITBaseDeviceTypeService deviceTypeService; + /** * 工单评论邀请邮件 * 每天午夜12点执行一次 @@ -252,7 +255,8 @@ public class TicketScheduledTasks { //处理人 Set adminUserIds = StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toSet()); //CQM - adminUserIds.add(ticket.getCqm()); + List cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()); + adminUserIds.addAll(cqms); //管理端关注人 List followUserIds=ticketFollowService.lambdaQuery() .eq(TicketFollow::getTicketId, ticket.getId()) diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java index 36ad0277..09b7736c 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java @@ -188,11 +188,14 @@ public class TiketController extends ControllerBase { Ticket ticket = ticketService.getById(id); VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单"); AppUser user = appUserService.getById(ticket.getUserId()); - String areaName; + String areaName = ""; if (user.getIsPrimary()){ areaName=StrUtil.join(",",customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); - }else { - areaName = appAreaService.getById(user.getAreaId()).getName(); + }else if (Objects.nonNull(user.getAreaId())){ + AppArea area = appAreaService.getById(user.getAreaId()); + if (Objects.nonNull(area)) { + areaName = area.getName(); + } } List companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); @@ -382,7 +385,7 @@ public class TiketController extends ControllerBase { Ticket ticket=ticketService.reopen(id); ticketEventPublisher.publishTicketReopenEvent(ticket, MultilingualUtil.getLanguage(), MultilingualUtil.getZone()); ChatMessageDTO message = new ChatMessageDTO() - .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) + .setId(IdUtil.getSnowflakeNextIdStr()) .setFrom("system") .setTicketState(ticket.getState()) .setSenderId(0) @@ -412,9 +415,9 @@ public class TiketController extends ControllerBase { @PostMapping("addTicketEvaluate") public ApiResult addTicketEvaluate(@Valid @RequestBody TicketEvaluateAddRequest request) { Ticket ticket=ticketEvaluateService.add(request); - ticketEventPublisher.publishTicketEvaluateEvent(ticket, MultilingualUtil.getLanguage(), MultilingualUtil.getZone()); +// ticketEventPublisher.publishTicketEvaluateEvent(ticket, MultilingualUtil.getLanguage(), MultilingualUtil.getZone()); ChatMessageDTO message = new ChatMessageDTO() - .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) + .setId(IdUtil.getSnowflakeNextIdStr()) .setFrom("system") .setTicketState(ticket.getState()) .setSenderId(0) @@ -428,7 +431,7 @@ public class TiketController extends ControllerBase { if (ticketService.close(ticket)){ ticketEventPublisher.publishTicketCloseEvent(ticket); message = new ChatMessageDTO() - .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) + .setId(IdUtil.getSnowflakeNextIdStr()) .setFrom("system") .setTicketState(ticket.getState()) .setSenderId(0) diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketReopenEvent.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketReopenEvent.java index be4bd4c2..6d21662f 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketReopenEvent.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketReopenEvent.java @@ -1,6 +1,8 @@ package com.nflg.mobilebroken.cfs.event; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.util.StrUtil; import com.nflg.mobilebroken.common.constant.MessageSubType; import com.nflg.mobilebroken.common.constant.MessageType; import com.nflg.mobilebroken.repository.entity.AdminMessage; @@ -18,6 +20,8 @@ import org.springframework.context.ApplicationEvent; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.stream.Collectors; @Slf4j public class TicketReopenEvent extends ApplicationEvent implements ApplicationContextAware { @@ -54,18 +58,35 @@ public class TicketReopenEvent extends ApplicationEvent implements ApplicationCo private void sendUserMessage(){ //我的待办 - //CQM - AdminUser cqmUser = adminUserService.getById(ticket.getCqm()); - adminMessageService.add( - new AdminMessage() - .setNo(ticket.getNo()) - .setTitle(ticket.getTitle()) - .setUserId(cqmUser.getId()) - .setSourceId(ticket.getId()) - .setSource(0) - .setType(MessageType.WorkOrderAssignment.getState()) - .setSubType(MessageSubType.TicketReopen.getState()) - .setIsRead(false) - .setCreateTime(LocalDateTime.now())); +// CQM +// AdminUser cqmUser = adminUserService.getById(ticket.getCqm()); +// adminMessageService.add( +// new AdminMessage() +// .setNo(ticket.getNo()) +// .setTitle(ticket.getTitle()) +// .setUserId(cqmUser.getId()) +// .setSourceId(ticket.getId()) +// .setSource(0) +// .setType(MessageType.WorkOrderAssignment.getState()) +// .setSubType(MessageSubType.TicketReopen.getState()) +// .setIsRead(false) +// .setCreateTime(LocalDateTime.now())); + //处理人 + List userIds = StrUtil.split(ticket.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList()); + List adminUsers = adminUserService.listByIds(userIds); + if (CollectionUtil.isNotEmpty(adminUsers)) { + adminUsers.forEach(c -> adminMessageService.add( + new AdminMessage() + .setNo(ticket.getNo()) + .setTitle(ticket.getTitle()) + .setUserId(c.getId()) + .setSourceId(ticket.getId()) + .setSource(0) + .setType(MessageType.WorkOrderAssignment.getState()) + .setSubType(MessageSubType.TicketReopen.getState()) + .setIsRead(false) + .setCreateTime(LocalDateTime.now()) + )); + } } } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketRevokeEvent.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketRevokeEvent.java index fcb86b22..bcc99312 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketRevokeEvent.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketRevokeEvent.java @@ -8,10 +8,7 @@ import com.nflg.mobilebroken.common.constant.MessageType; import com.nflg.mobilebroken.repository.entity.AdminMessage; import com.nflg.mobilebroken.repository.entity.AdminUser; import com.nflg.mobilebroken.repository.entity.Ticket; -import com.nflg.mobilebroken.repository.service.IAdminMessageService; -import com.nflg.mobilebroken.repository.service.IAdminUserService; -import com.nflg.mobilebroken.repository.service.IAppUserService; -import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService; +import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.starter.service.EmailService; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; @@ -33,6 +30,7 @@ public class TicketRevokeEvent extends ApplicationEvent implements ApplicationCo private IDictionaryItemTranslateService dictionaryItemTranslateService; private IAppUserService appUserService; private EmailService emailService; + private ITBaseDeviceTypeService deviceTypeService; private IAdminUserService adminUserService; private IAdminMessageService adminMessageService; @@ -49,6 +47,7 @@ public class TicketRevokeEvent extends ApplicationEvent implements ApplicationCo this.emailService = applicationContext.getBean(EmailService.class); this.adminUserService = applicationContext.getBean(IAdminUserService.class); this.adminMessageService = applicationContext.getBean(IAdminMessageService.class); + this.deviceTypeService = applicationContext.getBean(ITBaseDeviceTypeService.class); } @@ -59,34 +58,44 @@ public class TicketRevokeEvent extends ApplicationEvent implements ApplicationCo private void sendUserMessage(){ //我的待办 //CQM - AdminUser cqmUser = adminUserService.getById(ticket.getCqm()); - adminMessageService.add( - new AdminMessage() - .setNo(ticket.getNo()) - .setTitle(ticket.getTitle()) - .setUserId(cqmUser.getId()) - .setSourceId(ticket.getId()) - .setSource(0) - .setType(MessageType.WorkOrderAssignment.getState()) - .setSubType(MessageSubType.TicketRevoke.getState()) - .setIsRead(false) - .setCreateTime(LocalDateTime.now())); + List cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()); + if (CollectionUtil.isEmpty(cqms)){ + log.warn("该设备尚未设置CQM负责人:{}", ticket.getDeviceNo()); + }else { + List cqmUsers = adminUserService.listByIds(cqms); + if (CollectionUtil.isNotEmpty(cqmUsers)) { + cqmUsers.forEach(c -> adminMessageService.add( + new AdminMessage() + .setNo(ticket.getNo()) + .setTitle(ticket.getTitle()) + .setUserId(c.getId()) + .setSourceId(ticket.getId()) + .setSource(0) + .setType(MessageType.WorkOrderAssignment.getState()) + .setSubType(MessageSubType.TicketRevoke.getState()) + .setIsRead(false) + .setCreateTime(LocalDateTime.now())) + ); + } + } //处理人 List userIds= StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList()); - List adminUsers=adminUserService.listByIds(userIds); - if (CollectionUtil.isNotEmpty(adminUsers)){ - adminUsers.forEach(c -> adminMessageService.add( - new AdminMessage() - .setNo(ticket.getNo()) - .setTitle(ticket.getTitle()) - .setUserId(c.getId()) - .setSourceId(ticket.getId()) - .setSource(0) - .setType(MessageType.WorkOrderAssignment.getState()) - .setSubType(MessageSubType.TicketRevoke.getState()) - .setIsRead(false) - .setCreateTime(LocalDateTime.now())) - ); + if (CollectionUtil.isNotEmpty(userIds)) { + List adminUsers = adminUserService.listByIds(userIds); + if (CollectionUtil.isNotEmpty(adminUsers)) { + adminUsers.forEach(c -> adminMessageService.add( + new AdminMessage() + .setNo(ticket.getNo()) + .setTitle(ticket.getTitle()) + .setUserId(c.getId()) + .setSourceId(ticket.getId()) + .setSource(0) + .setType(MessageType.WorkOrderAssignment.getState()) + .setSubType(MessageSubType.TicketRevoke.getState()) + .setIsRead(false) + .setCreateTime(LocalDateTime.now())) + ); + } } } } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentDetailVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentDetailVO.java index e7f30530..35a07087 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentDetailVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentDetailVO.java @@ -61,4 +61,9 @@ public class DeviceComponentDetailVO implements Serializable { * 部件编码 */ private String partNo; + + /** + * 类别属性 + */ + private String typeAttr; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentPartGroupVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentPartGroupVO.java new file mode 100644 index 00000000..f65eaff5 --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentPartGroupVO.java @@ -0,0 +1,21 @@ +package com.nflg.mobilebroken.common.pojo.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Accessors(chain = true) +public class DeviceComponentPartGroupVO { + + /** + * 类别属性 + */ + private String typeAttr; + + /** + * 部件列表 + */ + private List items; +} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentVO.java index 918fb574..f1e80c64 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/DeviceComponentVO.java @@ -48,5 +48,6 @@ public class DeviceComponentVO { * 最后更新时间 */ private LocalDateTime updateTime; - List partList; + + private List partList; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java index 6bf279de..ff6b68a6 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java @@ -1,6 +1,7 @@ package com.nflg.mobilebroken.common.pojo.vo; import com.nflg.mobilebroken.common.constant.TicketState; +import com.nflg.mobilebroken.common.constant.TicketUrgency; import lombok.Data; import lombok.experimental.Accessors; @@ -65,7 +66,7 @@ public class TicketPdfVO { if (Objects.isNull(urgency)) { return ""; } else { - return TicketState.findByValue(urgency).getDescription(); + return TicketUrgency.findByValue(urgency).getDescription(); } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java index 74b97f8c..f09656de 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java @@ -87,10 +87,10 @@ public class Ticket implements Serializable { */ private LocalDateTime createTime; - /** - * 所属CQM - */ - private Integer cqm; +// /** +// * 所属CQM +// */ +// private Integer cqm; /** * 紧急程度,0:非紧急;1:普通;2:紧急 diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java index 8847a80e..d83f92eb 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java @@ -172,7 +172,7 @@ public class TicketServiceImpl extends ServiceImpl impleme ticket.setRemark(request.getRemark()); ticket.setHandle(StrUtil.join(",", request.getUserIds())); ticket.setHandleName(StrUtil.join(",", adminUserService.listByIds(request.getUserIds()).stream().map(AdminUser::getUserName).collect(Collectors.toList()))); - ticket.setCqm(AdminUserUtil.getUserId()); +// ticket.setCqm(AdminUserUtil.getUserId()); ticket.setCurrentHandle(AdminUserUtil.getUserId()); ticket.setUpdateTime(LocalDateTime.now()); updateById(ticket); diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceComponentDetailMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceComponentDetailMapper.xml index acd94a9a..209d3f86 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceComponentDetailMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/DeviceComponentDetailMapper.xml @@ -15,7 +15,7 @@