fix(ticket): 修复工单相关功能和消息推送问题
- 完善AdminMessage中来源字段注释,新增来源类型派工单、工服工单 - 优化用户登录时账号过期判断,支持不同用户类型的过期处理 - 派工单获取接口添加派工单不存在异常抛出 - 文件上传接口修正参数类型,完善文件路径构建格式及异常处理 - GongfuTicketAreaService新增根据语言获取区域名功能 - 调整GongfuTicketMapper中的时间字段映射,修正完成时间、关闭时间字段一致性问题 - GongfuTicket服务中设置工单紧急程度,完善完成工单权限校验及完成时间设置 - 统一工单管理员获取方法,修正工单操作权限判断 - 将TicketEvaluate返回类型改为TicketDTO,统一DTO使用 - 调整SsePushService部分接口ticketId参数类型为Long,修正消息推送参数 - TicketCallBeginEvent和TicketCallEndEvent中修正ticketId传递类型 - TicketCloseEvent使用TicketDTO替代Ticket,完善消息推送中来源类型及来源ID设置 - TicketController获取工单详情时支持多语言区域名显示并修正公司名称获取逻辑 - 修正TicketController工单信息返回部分字段,新增客户名称和工单类型字段返回 - 其他若干代码格式和异常信息细节优化提升代码规范性和稳定性
This commit is contained in:
parent
ced5b87a67
commit
a24d588be4
|
|
@ -73,10 +73,15 @@ public class AppController extends ControllerBase {
|
|||
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_DISABLED, user.getLanguageCode()));
|
||||
VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState()))
|
||||
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_NOT_ACTIVATED, user.getLanguageCode()));
|
||||
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())) && user.getIsPrimary())
|
||||
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED_PRIMARY, user.getLanguageCode()));
|
||||
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())) && !user.getIsPrimary())
|
||||
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED, user.getLanguageCode()));
|
||||
if (user.getType() == 0) {
|
||||
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())) && user.getIsPrimary())
|
||||
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED_PRIMARY, user.getLanguageCode()));
|
||||
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())) && !user.getIsPrimary())
|
||||
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED, user.getLanguageCode()));
|
||||
} else if (user.getType() == 1) {
|
||||
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())))
|
||||
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED_ENDUSER, user.getLanguageCode()));
|
||||
}
|
||||
SaTokenAppUtil.login(user.getId(), SaLoginConfig
|
||||
.setExtra("from", Constant.FROM_APP)
|
||||
.setExtra("name", user.getName())
|
||||
|
|
|
|||
|
|
@ -43,59 +43,59 @@ public class FileController extends ControllerBase {
|
|||
@Resource
|
||||
private IFileUploadRecordService fileUploadRecordService;
|
||||
|
||||
private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||
|
||||
/**
|
||||
* 上传单个文件
|
||||
* @param file 要上传的文件
|
||||
* @param source 文件来源 0:工单,1:代理商,2:管理端账户;3:匿名工单
|
||||
* @param file 要上传的文件
|
||||
* @param source 文件来源 0:工单,1:代理商,2:管理端账户;3:匿名工单
|
||||
* @param sourceId 文件来源id 对应来源的数据id,比如工单id,代理商id,管理端账户id
|
||||
* @return 可访问的文件url
|
||||
*/
|
||||
@PostMapping("uploadSingleFile")
|
||||
public ApiResult<FileUploadVO> uploadSingleFile(@Valid @NotNull @RequestParam("file") MultipartFile file
|
||||
,@Valid @NotNull @RequestParam("source") Byte source
|
||||
,@Valid @NotNull @RequestParam("sourceId") Integer sourceId) {
|
||||
, @Valid @NotNull @RequestParam("source") Byte source
|
||||
, @Valid @NotNull @RequestParam("sourceId") Long sourceId) {
|
||||
try {
|
||||
String fileName=file.getOriginalFilename();
|
||||
String fileType=getFileType(fileName);
|
||||
String url=fileUploadService.upload(buildFilePath(fileType), file);
|
||||
FileUploadRecord record=buildFileUploadRecord(source,sourceId,fileName,fileType,url);
|
||||
String fileName = file.getOriginalFilename();
|
||||
String fileType = getFileType(fileName);
|
||||
String url = fileUploadService.upload(buildFilePath(fileType), file);
|
||||
FileUploadRecord record = buildFileUploadRecord(source, sourceId, fileName, fileType, url);
|
||||
fileUploadRecordService.save(record);
|
||||
return ApiResult.success(new FileUploadVO(record.getId(), fileName, url, file.getSize()));
|
||||
}catch (Exception ex){
|
||||
throw new NflgException(STATE.BusinessError,"上传文件失败:"+ex.getMessage());
|
||||
} catch (Exception ex) {
|
||||
throw new NflgException(STATE.BusinessError, "上传文件失败:" + ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private String buildFilePath(String fileType) {
|
||||
if (SaTokenAppUtil.isLogin()){
|
||||
if (SaTokenAppUtil.isLogin()) {
|
||||
return StrUtil.format("cfs/{}/{}/{}/{}{}", LocalDateTime.now().format(FORMATTER)
|
||||
, AppUserUtil.getUserId(), RandomUtil.randomString(4), IdUtil.fastUUID(),fileType);
|
||||
}else {
|
||||
, AppUserUtil.getUserId(), RandomUtil.randomString(4), IdUtil.fastUUID(), fileType);
|
||||
} else {
|
||||
return StrUtil.format("cfs/{}/temp/{}/{}{}", LocalDateTime.now().format(FORMATTER)
|
||||
,RandomUtil.randomString(4), IdUtil.fastUUID(),fileType);
|
||||
, RandomUtil.randomString(4), IdUtil.fastUUID(), fileType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传多个文件
|
||||
* @param files 要上传的文件列表
|
||||
* @param source 文件来源 0:工单,1:代理商,2:管理端账户;3:匿名工单
|
||||
* @param files 要上传的文件列表
|
||||
* @param source 文件来源 0:工单,1:代理商,2:管理端账户;3:匿名工单
|
||||
* @param sourceId 文件来源id 对应来源的数据id,比如工单id,代理商id,管理端账户id
|
||||
* @return 可访问的文件url列表
|
||||
*/
|
||||
@PostMapping("uploadMultipleFiles")
|
||||
public ApiResult<List<FileUploadVO>> uploadMultipleFiles(@Valid @RequestParam("files") @NotEmpty List<MultipartFile> files
|
||||
,@Valid @NotNull @RequestParam("source") Byte source
|
||||
,@Valid @NotNull @RequestParam("sourceId") Integer sourceId) {
|
||||
, @Valid @NotNull @RequestParam("source") Byte source
|
||||
, @Valid @NotNull @RequestParam("sourceId") Long sourceId) {
|
||||
try {
|
||||
List<FileUploadVO> list = new ArrayList<>();
|
||||
for (MultipartFile file : files) {
|
||||
String fileName=file.getOriginalFilename();
|
||||
String fileType=getFileType(fileName);
|
||||
String url=fileUploadService.upload(buildFilePath(fileType), file);
|
||||
FileUploadRecord record=buildFileUploadRecord(source,sourceId,fileName,fileType,url);
|
||||
String fileName = file.getOriginalFilename();
|
||||
String fileType = getFileType(fileName);
|
||||
String url = fileUploadService.upload(buildFilePath(fileType), file);
|
||||
FileUploadRecord record = buildFileUploadRecord(source, sourceId, fileName, fileType, url);
|
||||
fileUploadRecordService.save(record);
|
||||
list.add(new FileUploadVO(record.getId(), fileName, url, file.getSize()));
|
||||
}
|
||||
|
|
@ -113,28 +113,28 @@ public class FileController extends ControllerBase {
|
|||
@PostMapping("uploadSingleFile1")
|
||||
public ApiResult<FileUploadVO> uploadSingleFile1(@Valid @NotNull @RequestParam("file") MultipartFile file) {
|
||||
try {
|
||||
String fileName=file.getOriginalFilename();
|
||||
String fileType=getFileType(fileName);
|
||||
String url=fileUploadService.upload(buildFilePath(fileType), file);
|
||||
String fileName = file.getOriginalFilename();
|
||||
String fileType = getFileType(fileName);
|
||||
String url = fileUploadService.upload(buildFilePath(fileType), file);
|
||||
return ApiResult.success(new FileUploadVO(0, fileName, url, file.getSize()));
|
||||
}catch (Exception ex){
|
||||
throw new NflgException(STATE.BusinessError,"上传文件失败:"+ex.getMessage());
|
||||
} catch (Exception ex) {
|
||||
throw new NflgException(STATE.BusinessError, "上传文件失败:" + ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private String getFileType(String fileName){
|
||||
return "."+FilenameUtils.getExtension(fileName);
|
||||
private String getFileType(String fileName) {
|
||||
return "." + FilenameUtils.getExtension(fileName);
|
||||
}
|
||||
|
||||
private FileUploadRecord buildFileUploadRecord(Byte source,Integer sourceId,String fileName,String fileType,String url){
|
||||
private FileUploadRecord buildFileUploadRecord(Byte source, Long sourceId, String fileName, String fileType, String url) {
|
||||
return new FileUploadRecord()
|
||||
.setFileName(fileName)
|
||||
.setFileType(fileType)
|
||||
.setFrom("app")
|
||||
.setCreateTime(LocalDateTime.now())
|
||||
.setSource(source)
|
||||
.setSourceId(Long.valueOf(sourceId))
|
||||
.setSourceId(sourceId)
|
||||
.setUrl(url)
|
||||
.setCreateBy(SaTokenAppUtil.isLogin()?AppUserUtil.getUserName():"");
|
||||
.setCreateBy(SaTokenAppUtil.isLogin() ? AppUserUtil.getUserName() : "");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.nflg.mobilebroken.cfs.publisher.GongFuTicketEventPublisher;
|
|||
import com.nflg.mobilebroken.cfs.publisher.TicketEventPublisher;
|
||||
import com.nflg.mobilebroken.cfs.service.ShengWangService;
|
||||
import com.nflg.mobilebroken.cfs.service.SsePushService;
|
||||
import com.nflg.mobilebroken.cfs.service.TicketUnionService;
|
||||
import com.nflg.mobilebroken.common.constant.Constant;
|
||||
import com.nflg.mobilebroken.common.constant.TicketState;
|
||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||
|
|
@ -52,6 +53,9 @@ public class TicketController extends ControllerBase {
|
|||
@Resource
|
||||
private IGongfuTicketService ticket1Service;
|
||||
|
||||
@Resource
|
||||
private TicketUnionService ticketUnionService;
|
||||
|
||||
@Resource
|
||||
private ITicketFollowService ticketFollowService;
|
||||
|
||||
|
|
@ -110,7 +114,7 @@ public class TicketController extends ControllerBase {
|
|||
private ITicketSolutionAuditService ticketSolutionAuditService;
|
||||
|
||||
@Resource
|
||||
private ITBaseAreaService baseAreaService;
|
||||
private IGongfuTicketAreaService gongfuTicketAreaService;
|
||||
|
||||
/**
|
||||
* 搜索设备
|
||||
|
|
@ -232,9 +236,9 @@ public class TicketController extends ControllerBase {
|
|||
public ApiResult<TicketInfoVO> getTicket(@Valid @RequestParam @NotNull Long id) {
|
||||
TicketDTO ticket = ticketService.getDto(id);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
|
||||
String areaName = "";
|
||||
List<TBaseCustomer> companys = new ArrayList<>();
|
||||
String areaName = "", companyName = "";
|
||||
String userName, userAvatar;
|
||||
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
|
||||
if (StrUtil.equals(ticket.getUserPlatform(), "app")) {
|
||||
AppUser user = appUserService.getById(ticket.getUserId());
|
||||
userName = user.getName();
|
||||
|
|
@ -248,21 +252,17 @@ public class TicketController extends ControllerBase {
|
|||
areaName = area.getName();
|
||||
}
|
||||
}
|
||||
companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()));
|
||||
companyName = StrUtil.join(",", customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))
|
||||
.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList()));
|
||||
} else if (user.getType() == 1) {
|
||||
if (Objects.nonNull(user.getAreaId())) {
|
||||
TBaseArea area = baseAreaService.getById(user.getAreaId());
|
||||
if (Objects.nonNull(area)) {
|
||||
areaName = area.getAreaName();
|
||||
}
|
||||
}
|
||||
areaName = gongfuTicketAreaService.getAreaName(ticket.getAreaId(), MultilingualUtil.getLanguage());
|
||||
companyName = device.getAgentName();
|
||||
}
|
||||
} else {
|
||||
AdminUser adminUser = adminUserService.getById(ticket.getUserId());
|
||||
userName = adminUser.getUserName();
|
||||
userAvatar = adminUser.getAvatar();
|
||||
}
|
||||
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
|
||||
String handle = ticket.getHandle();
|
||||
if (StrUtil.isNotBlank(handle)) {
|
||||
List<AdminUser> adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
|
||||
|
|
@ -286,9 +286,11 @@ public class TicketController extends ControllerBase {
|
|||
.setCreateTime(ticket.getCreateTime())
|
||||
.setAreaName(areaName)
|
||||
.setSolveTime(ticket.getSolveTime())
|
||||
.setCompanyName(StrUtil.join(",", companys.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList())))
|
||||
.setCompanyName(companyName)
|
||||
.setHandle(handle)
|
||||
.setSolution(ticket.getReason())
|
||||
.setCustomerName(ticket.getCustomerName())
|
||||
.setType(ticket.getType())
|
||||
.setEvaluate(getTicketEvaluate(ticket.getId()));
|
||||
|
||||
if (Objects.equals(ticket.getType(), 0)) {
|
||||
|
|
@ -400,7 +402,7 @@ public class TicketController extends ControllerBase {
|
|||
**/
|
||||
@PostMapping("addChatMessage")
|
||||
public ApiResult<Void> addChatMessage(@Valid @RequestBody AddChatMessageRequest request) {
|
||||
TicketVO ticket = ticketService.getFromView(request.getTicketId());
|
||||
TicketDTO ticket = ticketService.getDto(request.getTicketId());
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.Processing.getState()) > 1)
|
||||
.throwMessage("当前工单状态不允许发送消息");
|
||||
|
|
@ -452,8 +454,8 @@ public class TicketController extends ControllerBase {
|
|||
* @param id 工单编号
|
||||
**/
|
||||
@GetMapping("revokedTicket")
|
||||
public ApiResult<Void> revokedTicket(@Valid @RequestParam @NotNull Integer id) {
|
||||
Ticket ticket = ticketService.revoked(id);
|
||||
public ApiResult<Void> revokedTicket(@Valid @RequestParam @NotNull Long id) {
|
||||
TicketDTO ticket = ticketUnionService.revoked(id);
|
||||
ticketEventPublisher.publishTicketRevokeEvent(ticket, MultilingualUtil.getLanguage(), MultilingualUtil.getZone());
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
|
@ -463,8 +465,8 @@ public class TicketController extends ControllerBase {
|
|||
* @param id 工单编号
|
||||
**/
|
||||
@GetMapping
|
||||
public ApiResult<Void> reopenTicket(@Valid @RequestParam @NotNull Integer id) {
|
||||
Ticket ticket = ticketService.reopen(id);
|
||||
public ApiResult<Void> reopenTicket(@Valid @RequestParam @NotNull Long id) {
|
||||
TicketDTO ticket = ticketUnionService.reopen(id);
|
||||
ticketEventPublisher.publishTicketReopenEvent(ticket, MultilingualUtil.getLanguage(), MultilingualUtil.getZone());
|
||||
ChatMessageDTO message = new ChatMessageDTO()
|
||||
.setId(IdUtil.getSnowflakeNextIdStr())
|
||||
|
|
@ -474,10 +476,10 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderName("服务助手")
|
||||
.setContent("<b>重启议题</b><br/>用户重启议题,请继续关注此工单信息。")
|
||||
.setCreateTime(Instant.now());
|
||||
ticketChatService.addMessage(Long.valueOf(id), message);
|
||||
ticketChatService.addMessage(id, message);
|
||||
//推送消息
|
||||
ssePushService.sendTicketMessageToAdmin(Long.valueOf(id), message);
|
||||
ssePushService.sendTicketMessageToApp(Long.valueOf(id), message);
|
||||
ssePushService.sendTicketMessageToAdmin(id, message);
|
||||
ssePushService.sendTicketMessageToApp(id, message);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
|
|
@ -496,7 +498,7 @@ public class TicketController extends ControllerBase {
|
|||
**/
|
||||
@PostMapping("addTicketEvaluate")
|
||||
public ApiResult<Void> addTicketEvaluate(@Valid @RequestBody TicketEvaluateAddRequest request) {
|
||||
Ticket ticket = ticketEvaluateService.add(request);
|
||||
TicketDTO ticket = ticketEvaluateService.add(request);
|
||||
// ticketEventPublisher.publishTicketEvaluateEvent(ticket, MultilingualUtil.getLanguage(), MultilingualUtil.getZone());
|
||||
ChatMessageDTO message = new ChatMessageDTO()
|
||||
.setId(IdUtil.getSnowflakeNextIdStr())
|
||||
|
|
@ -508,9 +510,9 @@ public class TicketController extends ControllerBase {
|
|||
.setCreateTime(Instant.now());
|
||||
ticketChatService.addMessage(request.getTicketId(), message);
|
||||
//推送消息
|
||||
ssePushService.sendTicketMessageToAdmin(Long.valueOf(ticket.getId()), message);
|
||||
ssePushService.sendTicketMessageToApp(Long.valueOf(ticket.getId()), message);
|
||||
if (ticketService.close(ticket)) {
|
||||
ssePushService.sendTicketMessageToAdmin(ticket.getId(), message);
|
||||
ssePushService.sendTicketMessageToApp(ticket.getId(), message);
|
||||
if (ticketUnionService.close(ticket)) {
|
||||
ticketEventPublisher.publishTicketCloseEvent(ticket);
|
||||
message = new ChatMessageDTO()
|
||||
.setId(IdUtil.getSnowflakeNextIdStr())
|
||||
|
|
@ -553,7 +555,7 @@ public class TicketController extends ControllerBase {
|
|||
*/
|
||||
@GetMapping("call")
|
||||
public ApiResult<Void> call(@Valid @RequestParam @NotNull Long ticketId) {
|
||||
Ticket ticket = ticketService.getById(ticketId);
|
||||
TicketDTO ticket = ticketService.getDto(ticketId);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState()))
|
||||
.throwMessage("当前工单状态不允许请求通话");
|
||||
|
|
@ -591,8 +593,8 @@ public class TicketController extends ControllerBase {
|
|||
* @param ticketId 工单编号
|
||||
*/
|
||||
@GetMapping("call/joinChannel")
|
||||
public ApiResult<Void> joinChannel(@Valid @RequestParam @NotNull Integer ticketId) throws IOException, InterruptedException {
|
||||
Ticket ticket = ticketService.getById(ticketId);
|
||||
public ApiResult<Void> joinChannel(@Valid @RequestParam @NotNull Long ticketId) throws IOException, InterruptedException {
|
||||
TicketDTO ticket = ticketService.getDto(ticketId);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState()))
|
||||
.throwMessage("当前工单状态不允许通话");
|
||||
|
|
@ -607,7 +609,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSendData(new UniPushMessageBody()
|
||||
.setTitle("视频通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTicketId(Long.valueOf(ticketId))
|
||||
.setTicketId(ticketId)
|
||||
.setUserId(AppUserUtil.getUserId())
|
||||
.setCategory("ticketCallJoined")
|
||||
.setFrom("app")
|
||||
|
|
@ -633,7 +635,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSendData(new UniPushMessageBody()
|
||||
.setTitle("视频通话结束")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTicketId(Long.valueOf(request.getTicketId()))
|
||||
.setTicketId(request.getTicketId())
|
||||
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(1)))
|
||||
.setCategory("ticketCallEnd")
|
||||
.setFrom("app")
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ import com.nflg.mobilebroken.common.pojo.ApiResult;
|
|||
import com.nflg.mobilebroken.common.util.AppUserUtil;
|
||||
import com.nflg.mobilebroken.starter.service.impl.DeepSeekTranslate;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
|
@ -26,7 +26,7 @@ public class TranslateController extends ControllerBase {
|
|||
* @return 翻译结果
|
||||
*/
|
||||
@PostMapping("deepseek")
|
||||
public ApiResult<String> deepseek(@RequestParam String text) {
|
||||
public ApiResult<String> deepseek(@RequestBody String text) {
|
||||
return ApiResult.success(deepSeekTranslate.translateWord(text, "auto", AppUserUtil.getLanguageName(), "html"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
|
|||
.setSenderName("通话助手")
|
||||
.setContent(userName+"发起了视频通话")
|
||||
.setCreateTime(Instant.now());
|
||||
ticketChatService.addMessage(Long.valueOf(ticketId), message);
|
||||
ticketChatService.addMessage(ticketId, message);
|
||||
//推送消息
|
||||
ssePushService.sendTicketMessageToAdmin(ticketId,message);
|
||||
ssePushService.sendTicketMessageToApp(ticketId,message);
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
|
|||
.setSenderName("通话助手")
|
||||
.setContent("视频通话已结束")
|
||||
.setCreateTime(Instant.now());
|
||||
ticketChatService.addMessage(Long.valueOf(ticketId), message);
|
||||
ticketChatService.addMessage(ticketId, message);
|
||||
//推送消息
|
||||
ssePushService.sendTicketMessageToAdmin(ticketId, message);
|
||||
ssePushService.sendTicketMessageToApp(ticketId, message);
|
||||
|
|
|
|||
|
|
@ -1,66 +1,55 @@
|
|||
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.common.pojo.dto.TicketDTO;
|
||||
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.*;
|
||||
import com.nflg.mobilebroken.starter.service.EmailService;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminMessageService;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminUserService;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class TicketCloseEvent extends ApplicationEvent implements ApplicationContextAware {
|
||||
|
||||
private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
|
||||
private final Ticket ticket;
|
||||
private IDictionaryItemTranslateService dictionaryItemTranslateService;
|
||||
private IAppUserService appUserService;
|
||||
private EmailService emailService;
|
||||
private ITBaseDeviceTypeService deviceTypeService;
|
||||
private final TicketDTO ticket;
|
||||
private IAdminUserService adminUserService;
|
||||
private IAdminMessageService adminMessageService;
|
||||
|
||||
public TicketCloseEvent(Object source,Ticket ticket) {
|
||||
public TicketCloseEvent(Object source, TicketDTO ticket) {
|
||||
super(source);
|
||||
this.ticket = ticket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.dictionaryItemTranslateService = applicationContext.getBean(IDictionaryItemTranslateService.class);
|
||||
this.appUserService = applicationContext.getBean(IAppUserService.class);
|
||||
this.emailService = applicationContext.getBean(EmailService.class);
|
||||
this.adminUserService = applicationContext.getBean(IAdminUserService.class);
|
||||
this.adminMessageService = applicationContext.getBean(IAdminMessageService.class);
|
||||
this.deviceTypeService = applicationContext.getBean(ITBaseDeviceTypeService.class);
|
||||
}
|
||||
|
||||
public void send(){
|
||||
public void send() {
|
||||
sendUserMessage();
|
||||
}
|
||||
|
||||
private void sendUserMessage(){
|
||||
private void sendUserMessage() {
|
||||
//我的待办
|
||||
List<Integer> userIds= StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
List<AdminUser> adminUsers=adminUserService.listByIds(userIds);
|
||||
if (CollectionUtil.isNotEmpty(adminUsers)){
|
||||
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(Long.valueOf(ticket.getId()))
|
||||
.setSource(0)
|
||||
.setSourceId(ticket.getId())
|
||||
.setSource(ticket.getType() == 0 ? 0 : 3)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketClosed.getState())
|
||||
.setIsRead(false)
|
||||
|
|
|
|||
|
|
@ -4,11 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||
import cn.hutool.core.date.DatePattern;
|
||||
import com.nflg.mobilebroken.common.constant.MessageSubType;
|
||||
import com.nflg.mobilebroken.common.constant.MessageType;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
|
||||
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.*;
|
||||
import com.nflg.mobilebroken.starter.service.EmailService;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminMessageService;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminUserService;
|
||||
import com.nflg.mobilebroken.repository.service.IGongfuDeviceTypeService;
|
||||
import com.nflg.mobilebroken.repository.service.ITBaseDeviceTypeService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
|
|
@ -21,45 +23,40 @@ import java.util.List;
|
|||
@Slf4j
|
||||
public class TicketEvaluateEvent extends ApplicationEvent implements ApplicationContextAware {
|
||||
|
||||
private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
|
||||
private final Ticket ticket;
|
||||
private final String language;
|
||||
private final String zone;
|
||||
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
|
||||
private final TicketDTO ticket;
|
||||
|
||||
private IDictionaryItemTranslateService dictionaryItemTranslateService;
|
||||
private IAppUserService appUserService;
|
||||
private EmailService emailService;
|
||||
private ITBaseDeviceTypeService deviceTypeService;
|
||||
private IGongfuDeviceTypeService gongfuDeviceTypeService;
|
||||
private IAdminUserService adminUserService;
|
||||
private IAdminMessageService adminMessageService;
|
||||
|
||||
public TicketEvaluateEvent(Object source, Ticket ticket,String language,String zone) {
|
||||
public TicketEvaluateEvent(Object source, TicketDTO ticket, String language, String zone) {
|
||||
super(source);
|
||||
this.ticket = ticket;
|
||||
this.language = language;
|
||||
this.zone = zone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.dictionaryItemTranslateService = applicationContext.getBean(IDictionaryItemTranslateService.class);
|
||||
this.appUserService = applicationContext.getBean(IAppUserService.class);
|
||||
this.emailService = applicationContext.getBean(EmailService.class);
|
||||
this.adminUserService = applicationContext.getBean(IAdminUserService.class);
|
||||
this.adminMessageService = applicationContext.getBean(IAdminMessageService.class);
|
||||
this.deviceTypeService = applicationContext.getBean(ITBaseDeviceTypeService.class);
|
||||
}
|
||||
|
||||
public void send(){
|
||||
sendUserMessage();
|
||||
public void send() {
|
||||
if (ticket.getType() == 0) {
|
||||
sendUserMessage();
|
||||
} else {
|
||||
sendUserMessage1();
|
||||
}
|
||||
}
|
||||
|
||||
private void sendUserMessage(){
|
||||
private void sendUserMessage() {
|
||||
//我的待办
|
||||
List<Integer> cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo());
|
||||
if (CollectionUtil.isEmpty(cqms)){
|
||||
List<Integer> cqms = deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo());
|
||||
if (CollectionUtil.isEmpty(cqms)) {
|
||||
log.warn("该设备尚未设置CQM负责人:{}", ticket.getDeviceNo());
|
||||
}else {
|
||||
} else {
|
||||
List<AdminUser> cqmUsers = adminUserService.listByIds(cqms);
|
||||
if (CollectionUtil.isNotEmpty(cqmUsers)) {
|
||||
cqmUsers.forEach(c -> adminMessageService.add(
|
||||
|
|
@ -67,7 +64,7 @@ public class TicketEvaluateEvent extends ApplicationEvent implements Application
|
|||
.setNo(ticket.getNo())
|
||||
.setTitle(ticket.getTitle())
|
||||
.setUserId(c.getId())
|
||||
.setSourceId(Long.valueOf(ticket.getId()))
|
||||
.setSourceId(ticket.getId())
|
||||
.setSource(0)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketCompletion.getState())
|
||||
|
|
@ -77,4 +74,28 @@ public class TicketEvaluateEvent extends ApplicationEvent implements Application
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendUserMessage1() {
|
||||
//我的待办
|
||||
List<Integer> cqms = gongfuDeviceTypeService.getCqms(ticket.getDeviceNo());
|
||||
if (CollectionUtil.isEmpty(cqms)) {
|
||||
log.warn("该设备尚未设置负责人:{}", 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(3)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketCompletion.getState())
|
||||
.setIsRead(false)
|
||||
.setCreateTime(LocalDateTime.now()))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,76 +1,46 @@
|
|||
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.common.pojo.dto.TicketDTO;
|
||||
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.starter.service.EmailService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
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 {
|
||||
|
||||
private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
|
||||
private final Ticket ticket;
|
||||
private final String language;
|
||||
private final String zone;
|
||||
private IDictionaryItemTranslateService dictionaryItemTranslateService;
|
||||
private IAppUserService appUserService;
|
||||
private EmailService emailService;
|
||||
private final TicketDTO ticket;
|
||||
private IAdminUserService adminUserService;
|
||||
private IAdminMessageService adminMessageService;
|
||||
|
||||
public TicketReopenEvent(Object source,Ticket ticket, String language, String zone) {
|
||||
public TicketReopenEvent(Object source, TicketDTO ticket, String language, String zone) {
|
||||
super(source);
|
||||
this.ticket = ticket;
|
||||
this.language = language;
|
||||
this.zone = zone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.dictionaryItemTranslateService = applicationContext.getBean(IDictionaryItemTranslateService.class);
|
||||
this.appUserService = applicationContext.getBean(IAppUserService.class);
|
||||
this.emailService = applicationContext.getBean(EmailService.class);
|
||||
this.adminUserService = applicationContext.getBean(IAdminUserService.class);
|
||||
this.adminMessageService = applicationContext.getBean(IAdminMessageService.class);
|
||||
}
|
||||
|
||||
public void send(){
|
||||
public void send() {
|
||||
sendUserMessage();
|
||||
}
|
||||
|
||||
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()));
|
||||
private void sendUserMessage() {
|
||||
//处理人
|
||||
List<Integer> userIds = StrUtil.split(ticket.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
List<AdminUser> adminUsers = adminUserService.listByIds(userIds);
|
||||
|
|
@ -80,8 +50,8 @@ public class TicketReopenEvent extends ApplicationEvent implements ApplicationCo
|
|||
.setNo(ticket.getNo())
|
||||
.setTitle(ticket.getTitle())
|
||||
.setUserId(c.getId())
|
||||
.setSourceId(Long.valueOf(ticket.getId()))
|
||||
.setSource(0)
|
||||
.setSourceId(ticket.getId())
|
||||
.setSource(ticket.getType() == 0 ? 0 : 3)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketReopen.getState())
|
||||
.setIsRead(false)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import cn.hutool.core.util.StrUtil;
|
|||
import com.nflg.mobilebroken.common.constant.Constant;
|
||||
import com.nflg.mobilebroken.common.constant.MessageSubType;
|
||||
import com.nflg.mobilebroken.common.constant.MessageType;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.TicketVO;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
|
||||
import com.nflg.mobilebroken.repository.entity.AdminMessage;
|
||||
import com.nflg.mobilebroken.repository.entity.AdminUser;
|
||||
import com.nflg.mobilebroken.repository.entity.AppUser;
|
||||
|
|
@ -31,8 +31,8 @@ import java.util.stream.Collectors;
|
|||
@Slf4j
|
||||
public class TicketReplyEvent extends ApplicationEvent implements ApplicationContextAware {
|
||||
|
||||
private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
|
||||
private final TicketVO ticket;
|
||||
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
|
||||
private final TicketDTO ticket;
|
||||
private final String language;
|
||||
private final String zone;
|
||||
private IDictionaryItemTranslateService dictionaryItemTranslateService;
|
||||
|
|
@ -41,7 +41,7 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon
|
|||
private IAdminUserService adminUserService;
|
||||
private IAdminMessageService adminMessageService;
|
||||
|
||||
public TicketReplyEvent(Object source, TicketVO ticket, String language, String zone) {
|
||||
public TicketReplyEvent(Object source, TicketDTO ticket, String language, String zone) {
|
||||
super(source);
|
||||
this.ticket = ticket;
|
||||
this.language = language;
|
||||
|
|
@ -57,15 +57,15 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon
|
|||
this.adminMessageService = applicationContext.getBean(IAdminMessageService.class);
|
||||
}
|
||||
|
||||
public void send(){
|
||||
public void send() {
|
||||
sendUserMessage();
|
||||
// sendEmail();
|
||||
}
|
||||
|
||||
private void sendUserMessage(){
|
||||
private void sendUserMessage() {
|
||||
//我的待办
|
||||
if(StrUtil.isNotBlank(ticket.getHandle())) {
|
||||
List<Integer> userIds = StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
if (StrUtil.isNotBlank(ticket.getHandle())) {
|
||||
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(
|
||||
|
|
@ -74,7 +74,7 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon
|
|||
.setTitle(ticket.getTitle())
|
||||
.setUserId(c.getId())
|
||||
.setSourceId(ticket.getId())
|
||||
.setSource(0)
|
||||
.setSource(ticket.getType() == 0 ? 0 : 3)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketNewMessage.getState())
|
||||
.setIsRead(false)
|
||||
|
|
@ -86,7 +86,7 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon
|
|||
|
||||
private void sendEmail() {
|
||||
try {
|
||||
List<Integer> userIds = StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
List<Integer> userIds = StrUtil.split(ticket.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
List<AdminUser> adminUsers = adminUserService.listByIds(userIds);
|
||||
if (CollectionUtil.isNotEmpty(adminUsers)) {
|
||||
AppUser appUser = appUserService.getById(ticket.getUserId());
|
||||
|
|
@ -106,15 +106,15 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon
|
|||
}
|
||||
}
|
||||
|
||||
private void sendEmail(List<AdminUser> adminUsers,String subject,String content) throws MessagingException {
|
||||
if (CollectionUtil.isNotEmpty(adminUsers)){
|
||||
for (AdminUser adminUser:adminUsers) {
|
||||
emailService.sendEmail(adminUser.getEmail(),subject,content);
|
||||
private void sendEmail(List<AdminUser> adminUsers, String subject, String content) throws MessagingException {
|
||||
if (CollectionUtil.isNotEmpty(adminUsers)) {
|
||||
for (AdminUser adminUser : adminUsers) {
|
||||
emailService.sendEmail(adminUser.getEmail(), subject, content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String toTimeString(LocalDateTime time){
|
||||
private String toTimeString(LocalDateTime time) {
|
||||
return time.atZone(ZoneOffset.UTC)
|
||||
.withZoneSameInstant(ZoneId.of(zone))
|
||||
.toLocalDateTime()
|
||||
|
|
|
|||
|
|
@ -1,85 +1,60 @@
|
|||
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.common.pojo.dto.TicketDTO;
|
||||
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.*;
|
||||
import com.nflg.mobilebroken.starter.service.EmailService;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminMessageService;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminUserService;
|
||||
import com.nflg.mobilebroken.repository.service.IGongfuDeviceTypeService;
|
||||
import com.nflg.mobilebroken.repository.service.ITBaseDeviceTypeService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
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 TicketRevokeEvent extends ApplicationEvent implements ApplicationContextAware {
|
||||
|
||||
private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
|
||||
private final Ticket ticket;
|
||||
private final String language;
|
||||
private final String zone;
|
||||
private IDictionaryItemTranslateService dictionaryItemTranslateService;
|
||||
private IAppUserService appUserService;
|
||||
private EmailService emailService;
|
||||
private final TicketDTO ticket;
|
||||
private ITBaseDeviceTypeService deviceTypeService;
|
||||
private IGongfuDeviceTypeService gongfuDeviceTypeService;
|
||||
private IAdminUserService adminUserService;
|
||||
private IAdminMessageService adminMessageService;
|
||||
|
||||
public TicketRevokeEvent(Object source,Ticket ticket, String language, String zone) {
|
||||
public TicketRevokeEvent(Object source, TicketDTO ticket, String language, String zone) {
|
||||
super(source);
|
||||
this.ticket = ticket;
|
||||
this.language = language;
|
||||
this.zone = zone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.dictionaryItemTranslateService = applicationContext.getBean(IDictionaryItemTranslateService.class);
|
||||
this.appUserService = applicationContext.getBean(IAppUserService.class);
|
||||
this.emailService = applicationContext.getBean(EmailService.class);
|
||||
this.adminUserService = applicationContext.getBean(IAdminUserService.class);
|
||||
this.adminMessageService = applicationContext.getBean(IAdminMessageService.class);
|
||||
this.deviceTypeService = applicationContext.getBean(ITBaseDeviceTypeService.class);
|
||||
this.gongfuDeviceTypeService = applicationContext.getBean(IGongfuDeviceTypeService.class);
|
||||
}
|
||||
|
||||
|
||||
public void send(){
|
||||
sendUserMessage();
|
||||
}
|
||||
|
||||
private void sendUserMessage(){
|
||||
//我的待办
|
||||
//CQM
|
||||
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(Long.valueOf(ticket.getId()))
|
||||
.setSource(0)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketRevoke.getState())
|
||||
.setIsRead(false)
|
||||
.setCreateTime(LocalDateTime.now()))
|
||||
);
|
||||
}
|
||||
public void send() {
|
||||
if (ticket.getType() == 0) {
|
||||
sendToCqm();
|
||||
} else {
|
||||
sendToCqm1();
|
||||
}
|
||||
sendToHandler();
|
||||
}
|
||||
|
||||
private void sendToHandler() {
|
||||
//处理人
|
||||
List<Integer> userIds= StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
List<Integer> userIds = StrUtil.split(ticket.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList());
|
||||
if (CollectionUtil.isNotEmpty(userIds)) {
|
||||
List<AdminUser> adminUsers = adminUserService.listByIds(userIds);
|
||||
if (CollectionUtil.isNotEmpty(adminUsers)) {
|
||||
|
|
@ -88,7 +63,7 @@ public class TicketRevokeEvent extends ApplicationEvent implements ApplicationCo
|
|||
.setNo(ticket.getNo())
|
||||
.setTitle(ticket.getTitle())
|
||||
.setUserId(c.getId())
|
||||
.setSourceId(Long.valueOf(ticket.getId()))
|
||||
.setSourceId(ticket.getId())
|
||||
.setSource(0)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketRevoke.getState())
|
||||
|
|
@ -98,4 +73,54 @@ public class TicketRevokeEvent extends ApplicationEvent implements ApplicationCo
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendToCqm() {
|
||||
//我的待办
|
||||
//CQM
|
||||
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()))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendToCqm1() {
|
||||
//我的待办
|
||||
//CQM
|
||||
List<Integer> cqms = gongfuDeviceTypeService.getCqms(ticket.getDeviceNo());
|
||||
if (CollectionUtil.isEmpty(cqms)) {
|
||||
log.warn("该设备尚未设置负责人:{}", 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(3)
|
||||
.setType(MessageType.WorkOrderAssignment.getState())
|
||||
.setSubType(MessageSubType.TicketRevoke.getState())
|
||||
.setIsRead(false)
|
||||
.setCreateTime(LocalDateTime.now()))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.nflg.mobilebroken.cfs.publisher;
|
||||
|
||||
import com.nflg.mobilebroken.cfs.event.*;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.TicketVO;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
|
||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
|
|
@ -24,31 +24,31 @@ public class TicketEventPublisher {
|
|||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketReplyEvent(TicketVO ticket, String language, String zone) {
|
||||
public void publishTicketReplyEvent(TicketDTO ticket, String language, String zone) {
|
||||
TicketReplyEvent event = new TicketReplyEvent(this, ticket, language, zone);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketRevokeEvent(Ticket ticket, String language, String zone) {
|
||||
public void publishTicketRevokeEvent(TicketDTO ticket, String language, String zone) {
|
||||
TicketRevokeEvent event = new TicketRevokeEvent(this, ticket, language, zone);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketReopenEvent(Ticket ticket, String language, String zone) {
|
||||
public void publishTicketReopenEvent(TicketDTO ticket, String language, String zone) {
|
||||
TicketReopenEvent event = new TicketReopenEvent(this, ticket, language, zone);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketEvaluateEvent(Ticket ticket, String language, String zone) {
|
||||
public void publishTicketEvaluateEvent(TicketDTO ticket, String language, String zone) {
|
||||
TicketEvaluateEvent event = new TicketEvaluateEvent(this, ticket, language, zone);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketCloseEvent(Ticket ticket) {
|
||||
public void publishTicketCloseEvent(TicketDTO ticket) {
|
||||
TicketCloseEvent event = new TicketCloseEvent(this, ticket);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
|
|
|
|||
|
|
@ -174,17 +174,17 @@ public class SsePushService {
|
|||
return restTemplate.postForObject(sseUrl + "/sse/" + to + "/push/user/message", request, ApiResult.class);
|
||||
}
|
||||
|
||||
public void sendTicketCallHangUpToAdmin(@NotNull Integer ticketId, @NotNull Integer userId, AppUser user) {
|
||||
public void sendTicketCallHangUpToAdmin(@NotNull Long ticketId, @NotNull Integer userId, AppUser user) {
|
||||
try {
|
||||
PushUserMessageRequest request = new PushUserMessageRequest()
|
||||
.setUserId(userId)
|
||||
.setMessage(new PushMessageDTO()
|
||||
.setType("ticketCallHangUp")
|
||||
.setData(new PushMessageDataBody()
|
||||
.setTargetId(Long.valueOf(ticketId))
|
||||
.setTargetId(ticketId)
|
||||
.setType("ticketCallHangUp")
|
||||
.setData(new UniPushMessageCallPayload()
|
||||
.setTicketId(Long.valueOf(ticketId))
|
||||
.setTicketId(ticketId)
|
||||
.setUserId(user.getId())
|
||||
.setUserName(user.getName())
|
||||
.setUserAvatar(user.getAvatar())
|
||||
|
|
@ -199,17 +199,17 @@ public class SsePushService {
|
|||
}
|
||||
}
|
||||
|
||||
public void sendTicketCallCancelToAdmin(@NotNull Integer ticketId, @NotNull Integer userId, AppUser user) {
|
||||
public void sendTicketCallCancelToAdmin(@NotNull Long ticketId, @NotNull Integer userId, AppUser user) {
|
||||
try {
|
||||
PushUserMessageRequest request = new PushUserMessageRequest()
|
||||
.setUserId(userId)
|
||||
.setMessage(new PushMessageDTO()
|
||||
.setType("ticketCallCancel")
|
||||
.setData(new PushMessageDataBody()
|
||||
.setTargetId(Long.valueOf(ticketId))
|
||||
.setTargetId(ticketId)
|
||||
.setType("ticketCallCancel")
|
||||
.setData(new UniPushMessageCallPayload()
|
||||
.setTicketId(Long.valueOf(ticketId))
|
||||
.setTicketId(ticketId)
|
||||
.setUserId(user.getId())
|
||||
.setUserName(user.getName())
|
||||
.setUserAvatar(user.getAvatar())
|
||||
|
|
@ -224,17 +224,17 @@ public class SsePushService {
|
|||
}
|
||||
}
|
||||
|
||||
public void sendTicketCallJoinedToApp(Integer userId,@NotNull Integer ticketId) {
|
||||
public void sendTicketCallJoinedToApp(Integer userId, @NotNull Long ticketId) {
|
||||
try {
|
||||
PushUserMessageRequest request = new PushUserMessageRequest()
|
||||
.setUserId(userId)
|
||||
.setMessage(new PushMessageDTO()
|
||||
.setType("ticketCallJoined")
|
||||
.setData(new PushMessageDataBody()
|
||||
.setTargetId(Long.valueOf(ticketId))
|
||||
.setTargetId(ticketId)
|
||||
.setType("ticketCallJoined")
|
||||
.setData(new UniPushMessageCallPayload()
|
||||
.setTicketId(Long.valueOf(ticketId))
|
||||
.setTicketId(ticketId)
|
||||
.setFrom("app")
|
||||
)
|
||||
)
|
||||
|
|
@ -246,17 +246,17 @@ public class SsePushService {
|
|||
}
|
||||
}
|
||||
|
||||
public void sendTicketCallJoined(Integer userId, @Valid @NotNull Integer ticketId, String to) {
|
||||
public void sendTicketCallJoined(Integer userId, @Valid @NotNull Long ticketId, String to) {
|
||||
try {
|
||||
PushUserMessageRequest request = new PushUserMessageRequest()
|
||||
.setUserId(userId)
|
||||
.setMessage(new PushMessageDTO()
|
||||
.setType("ticketCallJoined")
|
||||
.setData(new PushMessageDataBody()
|
||||
.setTargetId(Long.valueOf(ticketId))
|
||||
.setTargetId(ticketId)
|
||||
.setType("ticketCallJoined")
|
||||
.setData(new UniPushMessageCallPayload()
|
||||
.setTicketId(Long.valueOf(ticketId))
|
||||
.setTicketId(ticketId)
|
||||
.setFrom("app")
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
package com.nflg.mobilebroken.cfs.service;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
|
||||
import com.nflg.mobilebroken.repository.entity.GongfuTicket;
|
||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||
import com.nflg.mobilebroken.repository.service.IGongfuTicketService;
|
||||
import com.nflg.mobilebroken.repository.service.ITicketService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Component
|
||||
public class TicketUnionService {
|
||||
|
||||
@Resource
|
||||
private ITicketService ticketService;
|
||||
|
||||
@Resource
|
||||
private IGongfuTicketService gongfuTicketService;
|
||||
|
||||
public TicketDTO reopen(Long id) {
|
||||
if (id < Integer.MAX_VALUE) {
|
||||
Ticket ticket = ticketService.reopen(Math.toIntExact(id));
|
||||
TicketDTO dto = Convert.convert(TicketDTO.class, ticket);
|
||||
dto.setType(0);
|
||||
return dto;
|
||||
} else {
|
||||
GongfuTicket ticket = gongfuTicketService.reopen(id);
|
||||
TicketDTO dto = Convert.convert(TicketDTO.class, ticket);
|
||||
dto.setType(1);
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
|
||||
public TicketDTO revoked(Long id) {
|
||||
if (id < Integer.MAX_VALUE) {
|
||||
Ticket ticket = ticketService.revoked(Math.toIntExact(id));
|
||||
TicketDTO dto = Convert.convert(TicketDTO.class, ticket);
|
||||
dto.setType(0);
|
||||
return dto;
|
||||
} else {
|
||||
GongfuTicket ticket = gongfuTicketService.revoked(id);
|
||||
TicketDTO dto = Convert.convert(TicketDTO.class, ticket);
|
||||
dto.setType(1);
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean close(TicketDTO ticket) {
|
||||
if (ticket.getType() == 0) {
|
||||
return ticketService.close(Convert.convert(Ticket.class, ticket));
|
||||
} else {
|
||||
return gongfuTicketService.close(Convert.convert(GongfuTicket.class, ticket));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -110,6 +110,8 @@ public class Constant {
|
|||
|
||||
public static final String DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED="AccountHasExpired";
|
||||
|
||||
public static final String DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED_ENDUSER = "EndUserAccountHasExpired";
|
||||
|
||||
public static final String DICTIONARY_SOLUTION_MEASURES = "SolutionMeasures";
|
||||
|
||||
public static final String DICTIONARY_SOLUTION_REVIEW_DEPARTMENT = "SolutionReviewDepartment";
|
||||
|
|
|
|||
|
|
@ -143,4 +143,9 @@ public class TicketDTO {
|
|||
* 类型:0:移动破;1:工服
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 区域id,仅工服工单
|
||||
*/
|
||||
private Long areaId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
package com.nflg.mobilebroken.common.pojo.request;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class LanguageDataRequest {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public class TicketAddRequest {
|
|||
/**
|
||||
* 紧急程度,0:非紧急;1:普通;2:紧急
|
||||
*/
|
||||
private Integer urgency;
|
||||
private Byte urgency;
|
||||
|
||||
/**
|
||||
* 处理人id
|
||||
|
|
|
|||
|
|
@ -142,4 +142,14 @@ public class TicketInfoVO {
|
|||
* 区域
|
||||
*/
|
||||
private String area;
|
||||
|
||||
/**
|
||||
* 客户名称
|
||||
*/
|
||||
private String customerName;
|
||||
|
||||
/**
|
||||
* 类型:0:移动破;1:工服
|
||||
*/
|
||||
private Integer type;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@ public class DispatchController extends ControllerBase {
|
|||
@GetMapping("/getInfo")
|
||||
public ApiResult<DispatchVO> getInfo(@RequestParam Long id) {
|
||||
DispatchVO vo = dispatchService.getInfo(id);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(vo)).throwMessage("派工单不存在");
|
||||
vo.setFiles(Convert.toList(GongfuFileVO.class, fileService.lambdaQuery()
|
||||
.eq(GongfuFile::getNo, vo.getNo())
|
||||
.eq(GongfuFile::getType, 0)
|
||||
|
|
|
|||
|
|
@ -131,9 +131,6 @@ public class TicketController extends ControllerBase {
|
|||
@Resource
|
||||
private IGongfuTicketAreaService ticketAreaService;
|
||||
|
||||
@Resource
|
||||
private ITBaseAreaService baseAreaService;
|
||||
|
||||
/**
|
||||
* 获取问题类型
|
||||
* @return 问题类型列表
|
||||
|
|
@ -557,12 +554,7 @@ public class TicketController extends ControllerBase {
|
|||
areaName = appAreaService.getById(user.getAreaId()).getName();
|
||||
}
|
||||
} else if (user.getType() == 1) {
|
||||
if (Objects.nonNull(user.getAreaId())) {
|
||||
TBaseArea area = baseAreaService.getById(user.getAreaId());
|
||||
if (Objects.nonNull(area)) {
|
||||
areaName = area.getAreaName();
|
||||
}
|
||||
}
|
||||
areaName = ticketAreaService.getAreaName(ticket.getAreaId(), MultilingualUtil.getLanguage());
|
||||
}
|
||||
}
|
||||
// TBaseCustomer company = customerService.getById(Integer.valueOf(user.getCompanyId()));
|
||||
|
|
@ -639,7 +631,9 @@ public class TicketController extends ControllerBase {
|
|||
.setUserPlatform(ticket.getUserPlatform())
|
||||
.setCanSendMessage(adminUsers.contains(AdminUserUtil.getUserId()))
|
||||
.setEvaluate(getTicketEvaluate(ticket.getId()))
|
||||
.setArea(area);
|
||||
.setArea(area)
|
||||
.setType(1)
|
||||
.setCustomerName(ticket.getCustomerName());
|
||||
return ApiResult.success(vo);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public class AdminMessage implements Serializable {
|
|||
private String title;
|
||||
|
||||
/**
|
||||
* 来源,0:工单;1:代理商账户
|
||||
* 来源,0:工单表;1:代理商账户审核表;2:派工单;3:工服工单
|
||||
*/
|
||||
private Integer source;
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,4 @@ public interface TicketMapper extends BaseMapper<Ticket> {
|
|||
IPage<AdminTicketVO> searchByFavouritesId(Integer userId, Integer favouritesId, Page<?> page);
|
||||
|
||||
TicketDTO getDto(Long id);
|
||||
|
||||
TicketVO getById(Long id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.nflg.mobilebroken.repository.service;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.GongfuTicketArea;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.nflg.mobilebroken.repository.entity.GongfuTicketArea;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -12,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||
*/
|
||||
public interface IGongfuTicketAreaService extends IService<GongfuTicketArea> {
|
||||
|
||||
String getAreaName(Long areaId, String language);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
package com.nflg.mobilebroken.repository.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
|
||||
import com.nflg.mobilebroken.common.pojo.request.TicketEvaluateAddRequest;
|
||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||
import com.nflg.mobilebroken.repository.entity.TicketEvaluate;
|
||||
|
||||
/**
|
||||
|
|
@ -15,5 +15,5 @@ import com.nflg.mobilebroken.repository.entity.TicketEvaluate;
|
|||
*/
|
||||
public interface ITicketEvaluateService extends IService<TicketEvaluate> {
|
||||
|
||||
Ticket add(TicketEvaluateAddRequest request);
|
||||
TicketDTO add(TicketEvaluateAddRequest request);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,4 @@ public interface ITicketService extends IService<Ticket> {
|
|||
boolean close(Ticket ticket);
|
||||
|
||||
TicketDTO getDto(Long id);
|
||||
|
||||
TicketVO getFromView(Long ticketId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
package com.nflg.mobilebroken.repository.service.impl;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.mobilebroken.common.pojo.request.LanguageDataRequest;
|
||||
import com.nflg.mobilebroken.repository.entity.GongfuTicketArea;
|
||||
import com.nflg.mobilebroken.repository.mapper.GongfuTicketAreaMapper;
|
||||
import com.nflg.mobilebroken.repository.service.IGongfuTicketAreaService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
|
|
@ -16,4 +20,17 @@ import org.springframework.stereotype.Service;
|
|||
@Service
|
||||
public class GongfuTicketAreaServiceImpl extends ServiceImpl<GongfuTicketAreaMapper, GongfuTicketArea> implements IGongfuTicketAreaService {
|
||||
|
||||
@Override
|
||||
public String getAreaName(Long areaId, String language) {
|
||||
GongfuTicketArea area = getById(areaId);
|
||||
if (Objects.isNull(area)) {
|
||||
return null;
|
||||
}
|
||||
return JSONUtil.toList(area.getLanguageData(), LanguageDataRequest.class)
|
||||
.stream()
|
||||
.filter(item -> item.getCode().equals(language))
|
||||
.findFirst()
|
||||
.orElse(new LanguageDataRequest().setLanguageValue(area.getName()))
|
||||
.getLanguageValue();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
|
|||
ticket.setCurrentHandle(request.getHandlerUserId());
|
||||
ticket.setHandle(String.valueOf(request.getHandlerUserId()));
|
||||
ticket.setHandleName(request.getHandlerUserName());
|
||||
ticket.setUrgency(request.getUrgency());
|
||||
ticket.setState(TicketState.Processing.getState());
|
||||
}
|
||||
ticket.setCustomerName(AppUserUtil.getCustomerName());
|
||||
|
|
@ -207,44 +208,12 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
|
|||
return ticket;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void completeTicket(List<Integer> ids) {
|
||||
|
||||
/// / baseMapper.completeTicket(ids, AdminUserUtil.getUserId());
|
||||
// List<Ticket> tickets=listByIds(ids);
|
||||
// List<String> stateErrors=new ArrayList<>();
|
||||
// List<String> handleErrors=new ArrayList<>();
|
||||
// for (Ticket ticket : tickets) {
|
||||
// if (!Objects.equals(ticket.getState(), TicketState.Processing.getState())){
|
||||
// stateErrors.add(ticket.getTitle());
|
||||
// }else if(Arrays.stream(ticket.getHandle().split(","))
|
||||
// .noneMatch(uid->StrUtil.equals(uid, AdminUserUtil.getUserId().toString()))
|
||||
// ){
|
||||
// handleErrors.add(ticket.getTitle());
|
||||
// }
|
||||
// }
|
||||
// StringBuilder sb=new StringBuilder();
|
||||
// if (!stateErrors.isEmpty()){
|
||||
// sb.append("以下工单状态不允许完成:").append(StrUtil.join(",", stateErrors));
|
||||
// }
|
||||
// if (!handleErrors.isEmpty()){
|
||||
// sb.append("以下工单你无权操作:").append(StrUtil.join(",", handleErrors));
|
||||
// }
|
||||
// String msg=sb.toString();
|
||||
// VUtils.trueThrowBusinessError(StrUtil.isNotBlank(msg))
|
||||
// .throwMessage(msg);
|
||||
// lambdaUpdate()
|
||||
// .in(Ticket::getId, ids)
|
||||
// .set(Ticket::getState, TicketState.ProcessingCompleted.getState())
|
||||
// .set(Ticket::getUpdateTime, LocalDateTime.now())
|
||||
// .update();
|
||||
// }
|
||||
@Override
|
||||
public GongfuTicket completeTicket(Long id) {
|
||||
GongfuTicket ticket = getById(id);
|
||||
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState()))
|
||||
.throwMessage("非处理中状态不允许完成");
|
||||
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
|
||||
List<Integer> tickerMangagers = adminUserService.getGongfuTickerMangagers();
|
||||
tickerMangagers.addAll(StrUtil.split(ticket.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList()));
|
||||
VUtils.trueThrowBusinessError(tickerMangagers.stream().noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId())))
|
||||
.throwMessage("你无权完成工单");
|
||||
|
|
@ -252,40 +221,19 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
|
|||
.throwMessage("工单“" + ticket.getTitle() + "”还未填写解决方案");
|
||||
ticket.setState(TicketState.ProcessingCompleted.getState());
|
||||
ticket.setCurrentHandle(AdminUserUtil.getUserId());
|
||||
ticket.setSolveTime(LocalDateTime.now());
|
||||
ticket.setUpdateTime(LocalDateTime.now());
|
||||
updateById(ticket);
|
||||
return ticket;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public Ticket closeTicket(TicketCloseRequest request) {
|
||||
// Ticket ticket = getById(request.getTicketId());
|
||||
// VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
|
||||
// VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState()))
|
||||
// .throwMessage("非处理完成状态不允许关闭");
|
||||
// VUtils.trueThrowBusinessError(!ticketEvaluateService.lambdaQuery()
|
||||
// .eq(TicketEvaluate::getTicketId, request.getTicketId())
|
||||
// .exists())
|
||||
// .throwMessage("工单尚未评价,不能关闭");
|
||||
// List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
|
||||
// tickerMangagers.addAll(Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).collect(Collectors.toList()));
|
||||
// VUtils.trueThrowBusinessError(tickerMangagers.stream().noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId())))
|
||||
// .throwMessage("你无权关闭工单");
|
||||
// ticket.setState(TicketState.Closed.getState());
|
||||
// ticket.setReason(request.getSolution());
|
||||
// ticket.setSolveTime(LocalDateTime.now());
|
||||
// ticket.setCurrentHandle(AdminUserUtil.getUserId());
|
||||
// updateById(ticket);
|
||||
// return ticket;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public List<AdminTicketVO> exportSearch(AdminTicketSearchRequest request) {
|
||||
if (request.getType() == 2) {
|
||||
return baseMapper.searchAllFromAdminAndFollow(request, AdminUserUtil.getUserId());
|
||||
} else if (request.getType() == 4) {
|
||||
Integer userId = AdminUserUtil.getUserId();
|
||||
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
|
||||
List<Integer> tickerMangagers = adminUserService.getGongfuTickerMangagers();
|
||||
request.setTicketManager(tickerMangagers.stream().anyMatch(uid -> Objects.equals(uid, userId)));
|
||||
return baseMapper.searchAllFromAdmin(request, userId);
|
||||
}
|
||||
|
|
@ -353,7 +301,7 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
|
|||
GongfuTicket ticket = getById(request.getTicketId());
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
|
||||
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())).throwMessage("工单状态异常");
|
||||
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
|
||||
List<Integer> tickerMangagers = adminUserService.getGongfuTickerMangagers();
|
||||
tickerMangagers.addAll(StrUtil.split(ticket.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList()));
|
||||
VUtils.trueThrowBusinessError(tickerMangagers.stream().noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId())))
|
||||
.throwMessage("你无权添加处理人");
|
||||
|
|
@ -394,7 +342,7 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
|
|||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
|
||||
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState()))
|
||||
.throwMessage("工单状态不允许驳回");
|
||||
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
|
||||
List<Integer> tickerMangagers = adminUserService.getGongfuTickerMangagers();
|
||||
VUtils.trueThrowBusinessError(tickerMangagers.stream().noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId())))
|
||||
.throwMessage("你无权驳回工单");
|
||||
ticket.setState(TicketState.Processing.getState());
|
||||
|
|
@ -426,7 +374,7 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
|
|||
}
|
||||
return lambdaUpdate()
|
||||
.set(GongfuTicket::getState, TicketState.Closed.getState())
|
||||
.set(GongfuTicket::getSolveTime, LocalDateTime.now())
|
||||
// .set(GongfuTicket::getSolveTime, LocalDateTime.now())
|
||||
.set(GongfuTicket::getUpdateTime, LocalDateTime.now())
|
||||
.eq(GongfuTicket::getId, ticket.getId())
|
||||
.eq(GongfuTicket::getState, TicketState.ProcessingCompleted.getState())
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ package com.nflg.mobilebroken.repository.service.impl;
|
|||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.mobilebroken.common.constant.TicketState;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
|
||||
import com.nflg.mobilebroken.common.pojo.request.TicketEvaluateAddRequest;
|
||||
import com.nflg.mobilebroken.common.util.VUtils;
|
||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||
import com.nflg.mobilebroken.repository.entity.TicketEvaluate;
|
||||
import com.nflg.mobilebroken.repository.mapper.TicketEvaluateMapper;
|
||||
import com.nflg.mobilebroken.repository.service.ITicketEvaluateService;
|
||||
|
|
@ -31,8 +31,8 @@ public class TicketEvaluateServiceImpl extends ServiceImpl<TicketEvaluateMapper,
|
|||
private ITicketService ticketService;
|
||||
|
||||
@Override
|
||||
public Ticket add(TicketEvaluateAddRequest request) {
|
||||
Ticket ticket = ticketService.getById(request.getTicketId());
|
||||
public TicketDTO add(TicketEvaluateAddRequest request) {
|
||||
TicketDTO ticket = ticketService.getDto(request.getTicketId());
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState())
|
||||
&& !Objects.equals(ticket.getState(), TicketState.Closed.getState())).throwMessage("工单状态异常");
|
||||
|
|
|
|||
|
|
@ -242,6 +242,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
|||
.throwMessage("工单“" + ticket.getTitle() + "”还未填写解决方案");
|
||||
ticket.setState(TicketState.ProcessingCompleted.getState());
|
||||
ticket.setCurrentHandle(AdminUserUtil.getUserId());
|
||||
ticket.setSolveTime(LocalDateTime.now());
|
||||
ticket.setUpdateTime(LocalDateTime.now());
|
||||
updateById(ticket);
|
||||
return ticket;
|
||||
|
|
@ -365,7 +366,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
|||
|
||||
@Override
|
||||
public List<AdminUserSimpleVO> getTicketHandle(Long id) {
|
||||
TicketVO ticket = baseMapper.getById(id);
|
||||
TicketDTO ticket = baseMapper.getDto(id);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
|
||||
List<Integer> handles = StrUtil.split(ticket.getHandle(), ",")
|
||||
.stream()
|
||||
|
|
@ -432,9 +433,4 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
|||
public TicketDTO getDto(Long id) {
|
||||
return baseMapper.getDto(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TicketVO getFromView(Long ticketId) {
|
||||
return baseMapper.getById(ticketId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -240,12 +240,11 @@ public class TicketSolutionServiceImpl extends ServiceImpl<TicketSolutionMapper,
|
|||
List<TicketSolution> ts = forUpdate.stream().filter(s -> !Objects.equals(s.getCreateUserId(), userId)).sorted(Comparator.comparing(TicketSolution::getId)).collect(Collectors.toList());
|
||||
VUtils.trueThrowBusinessError(!ts.equals(solutions1)).throwMessage("不能修改他人创建的措施");
|
||||
}
|
||||
ticketService.lambdaUpdate()
|
||||
.set(Ticket::getReason, request.getReason())
|
||||
.set(Ticket::getAccidentLevel, request.getAccidentLevel())
|
||||
.set(Ticket::getState, 2)
|
||||
.set(Ticket::getSolveTime, LocalDateTime.now())
|
||||
.eq(Ticket::getId, request.getTicketId())
|
||||
ticket1Service.lambdaUpdate()
|
||||
.set(GongfuTicket::getReason, request.getReason())
|
||||
.set(GongfuTicket::getQuestion, request.getQuestion())
|
||||
.set(GongfuTicket::getAccidentLevel, request.getAccidentLevel())
|
||||
.eq(GongfuTicket::getId, request.getTicketId())
|
||||
.update();
|
||||
if (CollectionUtil.isNotEmpty(idForReserve)) {
|
||||
baseMapper.delete(new LambdaQueryWrapper<TicketSolution>()
|
||||
|
|
|
|||
|
|
@ -155,9 +155,9 @@
|
|||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
|
||||
,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',d.agent_name AS 'agentName'
|
||||
,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed'
|
||||
,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,auc.user_name AS 'cqm',t.update_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,t.handle_name AS 'handle',t.description
|
||||
FROM gongfu_ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
|
|
@ -178,9 +178,9 @@
|
|||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
|
||||
,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',d.agent_name AS 'agentName'
|
||||
,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed'
|
||||
,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,auc.user_name AS 'cqm',t.update_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,t.handle_name AS 'handle',t.description
|
||||
FROM gongfu_ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
|
|
@ -201,9 +201,9 @@
|
|||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
|
||||
,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',d.agent_name AS 'agentName'
|
||||
,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm'
|
||||
,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,t.update_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,t.handle_name AS 'handle',t.description
|
||||
FROM gongfu_ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
|
|
@ -224,8 +224,8 @@
|
|||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
|
||||
,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',d.agent_name AS 'agentName'
|
||||
,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',true AS 'followed'
|
||||
,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle'
|
||||
,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',true AS 'followed'
|
||||
,auc.user_name AS 'cqm',t.update_time AS 'closeTime',auh.user_name AS 'currentHandle'
|
||||
,dt.cqm_person_name AS 'cqms',t.handle_name AS 'handle',t.description
|
||||
FROM gongfu_ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
|
|
@ -256,9 +256,9 @@
|
|||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
|
||||
,a1.area_name AS 'areaName','' AS 'agentAreaName',d.customer_name AS 'customerName',d.agent_name AS 'agentName'
|
||||
,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,t.create_time AS 'createTime',t.solve_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
|
||||
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm'
|
||||
,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,t.update_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
|
||||
,t.handle_name AS 'handle',t.description
|
||||
FROM gongfu_ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
|
|
|
|||
|
|
@ -281,12 +281,6 @@
|
|||
</select>
|
||||
|
||||
<select id="getDto" resultType="com.nflg.mobilebroken.common.pojo.dto.TicketDTO">
|
||||
select *
|
||||
from v_all_ticket
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="getById" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
|
||||
select * from v_all_ticket where id = #{id}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue