Merge branch 'feature/202504' into feature/202504-1
This commit is contained in:
commit
c381492d9f
|
|
@ -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<DeviceComponentVO> result = deviceComponentService.selectListByPage(query);
|
||||
result.getRecords().forEach(u->{
|
||||
List<DeviceComponentDetailVO> detail = deviceComponentDetailService.getDevicePartDetail(u.getId());
|
||||
u.setPartList(Convert.toList(DeviceComponentDetailVO.class,detail));
|
||||
Map<String, List<DeviceComponentDetailVO>> collect=detail.stream().collect(Collectors.groupingBy(DeviceComponentDetailVO::getTypeAttr));
|
||||
List<DeviceComponentPartGroupVO> 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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Integer> cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo());
|
||||
if (CollectionUtil.isEmpty(cqms)){
|
||||
log.warn("该设备尚未设置CQM负责人:{}", ticket.getDeviceNo());
|
||||
}else {
|
||||
List<AdminUser> 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(){
|
||||
|
|
|
|||
|
|
@ -90,6 +90,9 @@ public class TicketScheduledTasks {
|
|||
@Resource
|
||||
private SsePushService ssePushService;
|
||||
|
||||
@Resource
|
||||
private ITBaseDeviceTypeService deviceTypeService;
|
||||
|
||||
/**
|
||||
* 工单评论邀请邮件
|
||||
* 每天午夜12点执行一次
|
||||
|
|
@ -252,7 +255,8 @@ public class TicketScheduledTasks {
|
|||
//处理人
|
||||
Set<Integer> adminUserIds = StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toSet());
|
||||
//CQM
|
||||
adminUserIds.add(ticket.getCqm());
|
||||
List<Integer> cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo());
|
||||
adminUserIds.addAll(cqms);
|
||||
//管理端关注人
|
||||
List<Integer> followUserIds=ticketFollowService.lambdaQuery()
|
||||
.eq(TicketFollow::getTicketId, ticket.getId())
|
||||
|
|
|
|||
|
|
@ -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<TBaseCustomer> 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<Void> 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)
|
||||
|
|
|
|||
|
|
@ -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<Integer> userIds = StrUtil.split(ticket.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
List<AdminUser> 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())
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Integer> cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo());
|
||||
if (CollectionUtil.isEmpty(cqms)){
|
||||
log.warn("该设备尚未设置CQM负责人:{}", ticket.getDeviceNo());
|
||||
}else {
|
||||
List<AdminUser> 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<Integer> userIds= StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
List<AdminUser> 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<AdminUser> 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()))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,4 +61,9 @@ public class DeviceComponentDetailVO implements Serializable {
|
|||
* 部件编码
|
||||
*/
|
||||
private String partNo;
|
||||
|
||||
/**
|
||||
* 类别属性
|
||||
*/
|
||||
private String typeAttr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<DeviceComponentDetailVO> items;
|
||||
}
|
||||
|
|
@ -48,5 +48,6 @@ public class DeviceComponentVO {
|
|||
* 最后更新时间
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
List<DeviceComponentDetailVO> partList;
|
||||
|
||||
private List<DeviceComponentPartGroupVO> partList;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -87,10 +87,10 @@ public class Ticket implements Serializable {
|
|||
*/
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 所属CQM
|
||||
*/
|
||||
private Integer cqm;
|
||||
// /**
|
||||
// * 所属CQM
|
||||
// */
|
||||
// private Integer cqm;
|
||||
|
||||
/**
|
||||
* 紧急程度,0:非紧急;1:普通;2:紧急
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> 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);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
</delete>
|
||||
|
||||
<select id="getDevicePartDetail" resultType="com.nflg.mobilebroken.common.pojo.vo.DeviceComponentDetailVO">
|
||||
select a.* ,b.part_no from device_component_detail a
|
||||
select a.* ,b.part_no,iFNULL(b.type_attr,'未设置') AS 'typeAttr' from device_component_detail a
|
||||
join t_base_part b on a.model_part_id=b.id
|
||||
where a.device_component_id=#{deviceComponentId}
|
||||
</select>
|
||||
|
|
|
|||
Loading…
Reference in New Issue