feat: 一些调整
This commit is contained in:
parent
1f7e2ca89d
commit
95dcd856e3
|
|
@ -12,10 +12,7 @@ import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||||
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
|
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
|
||||||
import com.nflg.mobilebroken.common.pojo.dto.SSEMessageDTO;
|
import com.nflg.mobilebroken.common.pojo.dto.SSEMessageDTO;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AddChatMessageRequest;
|
import com.nflg.mobilebroken.common.pojo.request.*;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AdminTicketSearchRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AssignmentTicketRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.request.FollowRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO;
|
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO;
|
import com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.TicketInfoVO;
|
import com.nflg.mobilebroken.common.pojo.vo.TicketInfoVO;
|
||||||
|
|
@ -84,6 +81,9 @@ public class TicketController extends ControllerBase {
|
||||||
@Resource
|
@Resource
|
||||||
private IAppAreaService appAreaService;
|
private IAppAreaService appAreaService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IDictionaryItemService dictionaryItemService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取问题类型
|
* 获取问题类型
|
||||||
*
|
*
|
||||||
|
|
@ -114,8 +114,16 @@ public class TicketController extends ControllerBase {
|
||||||
*/
|
*/
|
||||||
@PostMapping("searchTicket")
|
@PostMapping("searchTicket")
|
||||||
@ApiMark(moduleName = "工单管理", apiName = "搜索工单")
|
@ApiMark(moduleName = "工单管理", apiName = "搜索工单")
|
||||||
public ApiResult<PageData<AdminTicketVO>> searchTicket(@RequestBody AdminTicketSearchRequest request) {
|
public ApiResult<PageData<AdminTicketVO>> searchTicket(@Valid @RequestBody AdminTicketSearchRequest request) {
|
||||||
return ApiResult.success(PageUtil.convert(ticketService.searchPage(request), d -> d));
|
return ApiResult.success(PageUtil.convert(ticketService.searchPage(request), d -> {
|
||||||
|
if (StrUtil.isNotBlank(d.getHandle())) {
|
||||||
|
List<AdminUser> adminUsers = adminUserService.listByIds(StrUtil.split(d.getHandle(), ",").stream().map(Integer::parseInt).collect(Collectors.toList()));
|
||||||
|
d.setHandleBy(adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
AppUser primaryUser = appUserService.getPrimaryByCompanyId(d.getCompanyId());
|
||||||
|
d.setPrimaryUserName(primaryUser.getName());
|
||||||
|
return d;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -155,13 +163,13 @@ public class TicketController extends ControllerBase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭工单
|
* 关闭工单
|
||||||
* @param ids 工单id列表
|
* @param request 请求参数
|
||||||
*/
|
*/
|
||||||
@PostMapping("closeTicket")
|
@PostMapping("closeTicket")
|
||||||
@MethodInfoMark(value = "关闭工单", menuName = "工单管理")
|
@MethodInfoMark(value = "关闭工单", menuName = "工单管理")
|
||||||
@ApiMark(moduleName = "工单管理", apiName = "关闭工单")
|
@ApiMark(moduleName = "工单管理", apiName = "关闭工单")
|
||||||
public ApiResult<Void> closeTicket(@Valid @RequestBody @NotEmpty List<Integer> ids) {
|
public ApiResult<Void> closeTicket(@Valid @RequestBody TicketCloseRequest request) {
|
||||||
ticketService.closeTicket(ids);
|
ticketService.closeTicket(request);
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -248,7 +256,6 @@ public class TicketController extends ControllerBase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取工单详情
|
* 获取工单详情
|
||||||
*
|
|
||||||
* @param id 工单编号
|
* @param id 工单编号
|
||||||
* @return 工单详情
|
* @return 工单详情
|
||||||
**/
|
**/
|
||||||
|
|
@ -259,20 +266,35 @@ public class TicketController extends ControllerBase {
|
||||||
AppArea appArea = appAreaService.getById(user.getAreaId());
|
AppArea appArea = appAreaService.getById(user.getAreaId());
|
||||||
TBaseCustomer company = customerService.getById(Integer.valueOf(user.getCompanyId()));
|
TBaseCustomer company = customerService.getById(Integer.valueOf(user.getCompanyId()));
|
||||||
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
|
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
|
||||||
|
String warrantyStateDesc = "";
|
||||||
|
if (Objects.nonNull(device.getWarrantyState())) {
|
||||||
|
DictionaryItem warrantyState = dictionaryItemService.getById(device.getWarrantyState());
|
||||||
|
warrantyStateDesc = warrantyState.getName();
|
||||||
|
}
|
||||||
String handle = ticket.getHandle();
|
String handle = ticket.getHandle();
|
||||||
if (StrUtil.isNotBlank(handle)) {
|
if (StrUtil.isNotBlank(handle)) {
|
||||||
List<AdminUser> adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
|
List<AdminUser> adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
|
||||||
handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(","));
|
handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(","));
|
||||||
}
|
}
|
||||||
|
AppUser primaryUser = appUserService.getPrimaryByCompanyId(user.getCompanyId());
|
||||||
TicketInfoVO vo = new TicketInfoVO()
|
TicketInfoVO vo = new TicketInfoVO()
|
||||||
.setId(ticket.getId())
|
.setId(ticket.getId())
|
||||||
.setTitle(ticket.getTitle())
|
.setTitle(ticket.getTitle())
|
||||||
.setDeviceNo(ticket.getDeviceNo())
|
.setDeviceNo(ticket.getDeviceNo())
|
||||||
.setModelNo(device.getModelNo())
|
.setModelNo(device.getModelNo())
|
||||||
|
.setDeviceType(device.getDeviceType())
|
||||||
.setComponent(ticket.getComponent())
|
.setComponent(ticket.getComponent())
|
||||||
.setUseTime(ticket.getUseTime())
|
.setUseTime(ticket.getUseTime())
|
||||||
.setDescription(ticket.getDescription())
|
.setDescription(ticket.getDescription())
|
||||||
.setState(ticket.getState())
|
.setState(ticket.getState())
|
||||||
|
.setShipmentDate(device.getShipmentDate())
|
||||||
|
.setStartWarrantyDate(device.getStartWarrantyDate())
|
||||||
|
.setWarrantyMonth(device.getWarrantyMonth())
|
||||||
|
.setQuestion(ticket.getQuestion())
|
||||||
|
.setWarrantyStateDesc(warrantyStateDesc)
|
||||||
|
.setUrgency(ticket.getUrgency())
|
||||||
|
.setDeviceTypeSub(device.getDeviceTypeSub())
|
||||||
|
.setPrimaryUserName(primaryUser.getName())
|
||||||
.setImages(StrUtil.isNotBlank(ticket.getImages()) ? StrUtil.split(ticket.getImages(), ",") : Collections.emptyList())
|
.setImages(StrUtil.isNotBlank(ticket.getImages()) ? StrUtil.split(ticket.getImages(), ",") : Collections.emptyList())
|
||||||
.setAttachments(StrUtil.isNotBlank(ticket.getAttachments()) ? StrUtil.split(ticket.getAttachments(), ",") : Collections.emptyList())
|
.setAttachments(StrUtil.isNotBlank(ticket.getAttachments()) ? StrUtil.split(ticket.getAttachments(), ",") : Collections.emptyList())
|
||||||
.setCreateUserId(ticket.getUserId())
|
.setCreateUserId(ticket.getUserId())
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.nflg.mobilebroken.common.pojo.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class TicketCloseRequest {
|
||||||
|
|
||||||
|
//工单id
|
||||||
|
private Integer ticketId;
|
||||||
|
|
||||||
|
//解决方案
|
||||||
|
private String solution;
|
||||||
|
|
||||||
|
//附件
|
||||||
|
private List<String> attachments;
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.nflg.mobilebroken.common.pojo.vo;
|
package com.nflg.mobilebroken.common.pojo.vo;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.nflg.mobilebroken.common.constant.TicketState;
|
import com.nflg.mobilebroken.common.constant.TicketState;
|
||||||
import com.nflg.mobilebroken.common.constant.TicketUrgency;
|
import com.nflg.mobilebroken.common.constant.TicketUrgency;
|
||||||
|
|
@ -63,11 +62,15 @@ public class AdminTicketVO {
|
||||||
|
|
||||||
//代理商名称
|
//代理商名称
|
||||||
@ExcelColumn("代理商")
|
@ExcelColumn("代理商")
|
||||||
private String companyName;
|
private String primaryUserName;
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@IgnoreExport
|
||||||
|
private String companyId;
|
||||||
|
|
||||||
//客户
|
//客户
|
||||||
@ExcelColumn("客户")
|
@ExcelColumn("客户")
|
||||||
private String createUserName;
|
private String companyName;
|
||||||
|
|
||||||
//设备编号
|
//设备编号
|
||||||
@ExcelColumn("设备编号")
|
@ExcelColumn("设备编号")
|
||||||
|
|
@ -144,10 +147,6 @@ public class AdminTicketVO {
|
||||||
return TicketUrgency.findByValue(urgency).getDescription();
|
return TicketUrgency.findByValue(urgency).getDescription();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getHandleBy() {
|
|
||||||
return StrUtil.split(handle, ",");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFollowedDesc() {
|
public String getFollowedDesc() {
|
||||||
return followed ? "已关注" : "未关注";
|
return followed ? "已关注" : "未关注";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ public class AppUserVO {
|
||||||
//头像
|
//头像
|
||||||
private String avatar;
|
private String avatar;
|
||||||
|
|
||||||
//是否启用
|
//状态,0:待激活,1-启用,2:禁用
|
||||||
private boolean enable;
|
private byte userState;
|
||||||
|
|
||||||
//创建人
|
//创建人
|
||||||
private String createBy;
|
private String createBy;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|
@ -17,6 +18,24 @@ public class DeviceInfoVO {
|
||||||
//设备机型
|
//设备机型
|
||||||
private String modelNo;
|
private String modelNo;
|
||||||
|
|
||||||
|
//设备类型
|
||||||
|
private String deviceType;
|
||||||
|
|
||||||
|
//设备细分类
|
||||||
|
private String deviceTypeSub;
|
||||||
|
|
||||||
|
//质保状态(关联字典项)
|
||||||
|
private Integer warrantyState;
|
||||||
|
|
||||||
|
//发货日期
|
||||||
|
private LocalDate shipmentDate;
|
||||||
|
|
||||||
|
//质保开始日期
|
||||||
|
private LocalDate startWarrantyDate;
|
||||||
|
|
||||||
|
//质保期(月)
|
||||||
|
private Integer warrantyMonth;
|
||||||
|
|
||||||
//机型部件
|
//机型部件
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private String component;
|
private String component;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.nflg.mobilebroken.common.pojo.vo;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -34,7 +35,10 @@ public class TicketInfoVO {
|
||||||
//工单状态
|
//工单状态
|
||||||
private Byte state;
|
private Byte state;
|
||||||
|
|
||||||
//所属公司
|
//代理商
|
||||||
|
private String primaryUserName;
|
||||||
|
|
||||||
|
//客户名称
|
||||||
private String companyName;
|
private String companyName;
|
||||||
|
|
||||||
//所属区域
|
//所属区域
|
||||||
|
|
@ -46,6 +50,24 @@ public class TicketInfoVO {
|
||||||
//设备机型
|
//设备机型
|
||||||
private String modelNo;
|
private String modelNo;
|
||||||
|
|
||||||
|
//设备类型
|
||||||
|
private String deviceType;
|
||||||
|
|
||||||
|
//设备细分类
|
||||||
|
private String deviceTypeSub;
|
||||||
|
|
||||||
|
//质保状态
|
||||||
|
private String warrantyStateDesc;
|
||||||
|
|
||||||
|
//发货日期
|
||||||
|
private LocalDate shipmentDate;
|
||||||
|
|
||||||
|
//质保开始日期
|
||||||
|
private LocalDate startWarrantyDate;
|
||||||
|
|
||||||
|
//质保期(月)
|
||||||
|
private Integer warrantyMonth;
|
||||||
|
|
||||||
//问题部位
|
//问题部位
|
||||||
private String component;
|
private String component;
|
||||||
|
|
||||||
|
|
@ -55,6 +77,12 @@ public class TicketInfoVO {
|
||||||
//处理人
|
//处理人
|
||||||
private String handle;
|
private String handle;
|
||||||
|
|
||||||
|
//问题类型
|
||||||
|
private String question;
|
||||||
|
|
||||||
|
//紧急程度,0:非紧急;1:普通;2:紧急
|
||||||
|
private Byte urgency;
|
||||||
|
|
||||||
//图片
|
//图片
|
||||||
private List<String> images;
|
private List<String> images;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,11 @@ public class Ticket implements Serializable {
|
||||||
*/
|
*/
|
||||||
private String solution;
|
private String solution;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解决方案附件
|
||||||
|
*/
|
||||||
|
private String solutionAttachments;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解决时间
|
* 解决时间
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -26,12 +26,10 @@ public interface TicketMapper extends BaseMapper<Ticket> {
|
||||||
|
|
||||||
IPage<TicketVO> searchArea(IPage<?> page, TicketSearchRequest request, List<Integer> companyIds);
|
IPage<TicketVO> searchArea(IPage<?> page, TicketSearchRequest request, List<Integer> companyIds);
|
||||||
|
|
||||||
IPage<AdminTicketVO> searchFromAdmin(AdminTicketSearchRequest request, IPage<?> page);
|
IPage<AdminTicketVO> searchFromAdmin(AdminTicketSearchRequest request, Integer userId, IPage<?> page);
|
||||||
|
|
||||||
void completeTicket(List<Integer> ids, Integer userId);
|
void completeTicket(List<Integer> ids, Integer userId);
|
||||||
|
|
||||||
void closeTicket(List<Integer> ids);
|
|
||||||
|
|
||||||
List<AdminTicketVO> searchAllFromAdmin(AdminTicketSearchRequest request);
|
List<AdminTicketVO> searchAllFromAdmin(AdminTicketSearchRequest request);
|
||||||
|
|
||||||
IPage<AdminTicketVO> searchFromAdminAndFollow(AdminTicketSearchRequest request, Integer userId, IPage<?> page);
|
IPage<AdminTicketVO> searchFromAdminAndFollow(AdminTicketSearchRequest request, Integer userId, IPage<?> page);
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,6 @@ public interface IAppUserService extends IService<AppUser> {
|
||||||
void activateUser(UserActivateRequest request);
|
void activateUser(UserActivateRequest request);
|
||||||
|
|
||||||
void forgetPassword(String email, String password);
|
void forgetPassword(String email, String password);
|
||||||
|
|
||||||
|
AppUser getPrimaryByCompanyId(String companyId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,7 @@ package com.nflg.mobilebroken.repository.service;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.nflg.mobilebroken.common.pojo.dto.UserDTO;
|
import com.nflg.mobilebroken.common.pojo.dto.UserDTO;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AdminTicketSearchRequest;
|
import com.nflg.mobilebroken.common.pojo.request.*;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AssignmentTicketRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.request.TicketAddRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.request.TicketSearchRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO;
|
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.TicketVO;
|
import com.nflg.mobilebroken.common.pojo.vo.TicketVO;
|
||||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||||
|
|
@ -33,7 +30,7 @@ public interface ITicketService extends IService<Ticket> {
|
||||||
|
|
||||||
void completeTicket(List<Integer> ids);
|
void completeTicket(List<Integer> ids);
|
||||||
|
|
||||||
void closeTicket(List<Integer> ids);
|
void closeTicket(TicketCloseRequest request);
|
||||||
|
|
||||||
List<AdminTicketVO> exportSearch(AdminTicketSearchRequest request);
|
List<AdminTicketVO> exportSearch(AdminTicketSearchRequest request);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package com.nflg.mobilebroken.repository.service.impl;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
|
@ -193,9 +192,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void migrate(MigrateAppUserRequest request) {
|
public void migrate(MigrateAppUserRequest request) {
|
||||||
QueryWrapper<AppUser> queryWrapper = new QueryWrapper<>();
|
AppUser appUser = getPrimaryByCompanyId(request.getCompanyId().toString());
|
||||||
queryWrapper.apply("FIND_IN_SET({0}, company_id)", request.getCompanyId());
|
|
||||||
AppUser appUser = appUserService.getBaseMapper().selectOne(queryWrapper);
|
|
||||||
VUtils.trueThrowBusinessError(Objects.isNull(appUser)).throwMessage("该公司还未设置主账号");
|
VUtils.trueThrowBusinessError(Objects.isNull(appUser)).throwMessage("该公司还未设置主账号");
|
||||||
lambdaUpdate()
|
lambdaUpdate()
|
||||||
.set(AppUser::getCompanyId, request.getCompanyId())
|
.set(AppUser::getCompanyId, request.getCompanyId())
|
||||||
|
|
@ -418,6 +415,14 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
|
||||||
updateById(user);
|
updateById(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AppUser getPrimaryByCompanyId(String companyId) {
|
||||||
|
LambdaQueryWrapper<AppUser> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(AppUser::getIsPrimary, true);
|
||||||
|
queryWrapper.apply("FIND_IN_SET({0}, company_id)>0", companyId);
|
||||||
|
return appUserService.getBaseMapper().selectOne(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
private List<AppUserVO> getByCompanyId(Long companyId) {
|
private List<AppUserVO> getByCompanyId(Long companyId) {
|
||||||
return lambdaQuery()
|
return lambdaQuery()
|
||||||
.eq(AppUser::getCompanyId, companyId.toString())
|
.eq(AppUser::getCompanyId, companyId.toString())
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.nflg.mobilebroken.repository.service.impl;
|
package com.nflg.mobilebroken.repository.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
|
@ -8,10 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.nflg.mobilebroken.common.constant.TicketState;
|
import com.nflg.mobilebroken.common.constant.TicketState;
|
||||||
import com.nflg.mobilebroken.common.constant.TicketUrgency;
|
import com.nflg.mobilebroken.common.constant.TicketUrgency;
|
||||||
import com.nflg.mobilebroken.common.pojo.dto.UserDTO;
|
import com.nflg.mobilebroken.common.pojo.dto.UserDTO;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AdminTicketSearchRequest;
|
import com.nflg.mobilebroken.common.pojo.request.*;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.AssignmentTicketRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.request.TicketAddRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.request.TicketSearchRequest;
|
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO;
|
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.TicketVO;
|
import com.nflg.mobilebroken.common.pojo.vo.TicketVO;
|
||||||
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
||||||
|
|
@ -28,7 +24,6 @@ import java.time.LocalDateTime;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
|
@ -85,7 +80,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
||||||
if (request.getType() == 2) {
|
if (request.getType() == 2) {
|
||||||
return baseMapper.searchFromAdminAndFollow(request, AdminUserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
|
return baseMapper.searchFromAdminAndFollow(request, AdminUserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
|
||||||
} else if (request.getType() == 4) {
|
} else if (request.getType() == 4) {
|
||||||
return baseMapper.searchFromAdmin(request, new Page<>(request.getPage(), request.getPageSize()));
|
return baseMapper.searchFromAdmin(request, AdminUserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
|
||||||
}
|
}
|
||||||
return new Page<>(request.getPage(), request.getPageSize(), 0);
|
return new Page<>(request.getPage(), request.getPageSize(), 0);
|
||||||
}
|
}
|
||||||
|
|
@ -113,12 +108,17 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void closeTicket(List<Integer> ids) {
|
public void closeTicket(TicketCloseRequest request) {
|
||||||
List<Ticket> tickets = listByIds(ids);
|
Ticket ticket = getById(request.getTicketId());
|
||||||
List<Integer> tids = tickets.stream().map(Ticket::getId).filter(cqm -> Objects.equals(AdminUserUtil.getUserId(), cqm)).collect(Collectors.toList());
|
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
|
||||||
if (CollectionUtil.isNotEmpty(tids)) {
|
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState()))
|
||||||
baseMapper.closeTicket(ids);
|
.throwMessage("工单状态不允许关闭");
|
||||||
}
|
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getCqm(), AdminUserUtil.getUserId()))
|
||||||
|
.throwMessage("当前工单未归属当前CQM负责人");
|
||||||
|
ticket.setState(TicketState.Closed.getState());
|
||||||
|
ticket.setSolutionAttachments(StrUtil.join(",", request.getAttachments()));
|
||||||
|
ticket.setSolveTime(LocalDateTime.now());
|
||||||
|
updateById(ticket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@
|
||||||
</foreach>
|
</foreach>
|
||||||
</select>
|
</select>
|
||||||
<select id="getInfo" resultType="com.nflg.mobilebroken.common.pojo.vo.AppUserVO">
|
<select id="getInfo" resultType="com.nflg.mobilebroken.common.pojo.vo.AppUserVO">
|
||||||
SELECT u.id,u.area_id AS 'areaId',c.agency_company_name AS 'companyName',u.`name`,u.email,u.avatar,a.`name` AS 'areaName',u.`enable`,uc.`name` AS 'createBy',u.create_time AS 'createTime',uu.`name` AS 'updateBy',u.update_time AS 'updateTime',u.last_login_time AS 'lastLoginTime',u.expire_time AS 'expireTime',u.is_primary AS 'isPrimary'
|
SELECT u.id,u.area_id AS 'areaId',c.agency_company_name AS 'companyName',u.`name`,u.email,u.avatar,a.`name` AS 'areaName',u.state AS 'userState',uc.`name` AS 'createBy',u.create_time AS 'createTime',uu.`name` AS 'updateBy',u.update_time AS 'updateTime',u.last_login_time AS 'lastLoginTime',u.expire_time AS 'expireTime',u.is_primary AS 'isPrimary'
|
||||||
FROM app_user u
|
FROM app_user u
|
||||||
INNER JOIN t_base_customer c ON u.company_id=c.id
|
INNER JOIN t_base_customer c ON u.company_id=c.id
|
||||||
INNER JOIN app_area a ON u.area_id=a.id
|
INNER JOIN app_area a ON u.area_id=a.id
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="searchByCompany" parameterType="com.nflg.mobilebroken.common.pojo.request.UserSearchRequest" resultType="com.nflg.mobilebroken.common.pojo.vo.AppUserVO">
|
<select id="searchByCompany" parameterType="com.nflg.mobilebroken.common.pojo.request.UserSearchRequest" resultType="com.nflg.mobilebroken.common.pojo.vo.AppUserVO">
|
||||||
SELECT u.id,u.phone,u.title_id AS 'titleId',u.area_id AS 'areaId',u.company_id AS 'companyId',p.position_name AS 'title',u.expire_time AS 'expireTime',c.agency_company_name AS 'companyName',u.login_name AS 'loginName',u.`name`,u.email,u.avatar,a.`name` AS 'areaName',u.`enable`,uc.`name` AS 'createBy',u.create_time AS 'createTime',uu.`name` AS 'updateBy',u.update_time AS 'updateTime',u.last_login_time AS 'lastLoginTime',u.expire_time AS 'expireTime',u.is_primary AS 'isPrimary',IF(u.expire_time>now(),1,2) AS 'state'
|
SELECT u.id,u.phone,u.state AS 'userState',u.title_id AS 'titleId',u.area_id AS 'areaId',u.company_id AS 'companyId',p.position_name AS 'title',u.expire_time AS 'expireTime',c.agency_company_name AS 'companyName',u.login_name AS 'loginName',u.`name`,u.email,u.avatar,a.`name` AS 'areaName',u.`enable`,uc.`name` AS 'createBy',u.create_time AS 'createTime',uu.`name` AS 'updateBy',u.update_time AS 'updateTime',u.last_login_time AS 'lastLoginTime',u.expire_time AS 'expireTime',u.is_primary AS 'isPrimary',IF(u.expire_time>now(),1,2) AS 'state'
|
||||||
FROM app_user u
|
FROM app_user u
|
||||||
INNER JOIN t_base_customer c ON u.company_id=c.id
|
INNER JOIN t_base_customer c ON u.company_id=c.id
|
||||||
INNER JOIN app_area a ON u.area_id=a.id
|
INNER JOIN app_area a ON u.area_id=a.id
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
UNION
|
UNION
|
||||||
SELECT u.id,u.user_phone AS 'phone',u.title_id AS 'titleId',u.area_id AS 'areaId',u.company_id AS 'companyId',p.position_name AS 'title',null AS 'expireTime',c.agency_company_name AS 'companyName',u.user_email AS 'loginName',u.user_name AS 'name',u.user_email AS 'email',u.user_avatar AS 'avatar',a.`name` AS 'areaName',false AS `enable`,uc.`name` AS 'createBy',u.create_time AS 'createTime',null AS 'updateBy',null AS 'updateTime',null AS 'lastLoginTime',null AS 'expireTime',false AS 'isPrimary',0 AS 'state'
|
SELECT u.id,u.user_phone AS 'phone',0 AS 'userState',u.title_id AS 'titleId',u.area_id AS 'areaId',u.company_id AS 'companyId',p.position_name AS 'title',null AS 'expireTime',c.agency_company_name AS 'companyName',u.user_email AS 'loginName',u.user_name AS 'name',u.user_email AS 'email',u.user_avatar AS 'avatar',a.`name` AS 'areaName',false AS `enable`,uc.`name` AS 'createBy',u.create_time AS 'createTime',null AS 'updateBy',null AS 'updateTime',null AS 'lastLoginTime',null AS 'expireTime',false AS 'isPrimary',0 AS 'state'
|
||||||
FROM app_user_applyfor u
|
FROM app_user_applyfor u
|
||||||
INNER JOIN t_base_customer c ON u.company_id=c.id
|
INNER JOIN t_base_customer c ON u.company_id=c.id
|
||||||
INNER JOIN app_area a ON u.area_id=a.id
|
INNER JOIN app_area a ON u.area_id=a.id
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,9 @@
|
||||||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.DeviceMapper">
|
<mapper namespace="com.nflg.mobilebroken.repository.mapper.DeviceMapper">
|
||||||
|
|
||||||
<select id="getByDeviceNo" resultType="com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO">
|
<select id="getByDeviceNo" resultType="com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO">
|
||||||
SELECT d.device_no AS 'deviceNo',d.model_no AS 'modelNo',dc.component AS 'component'
|
SELECT d.device_no AS 'deviceNo',d.model_no AS 'modelNo',dc.component AS 'component',d.device_type AS 'deviceType'
|
||||||
|
,d.device_type_sub AS 'deviceTypeSub',d.warranty_state AS 'warrantyState',d.shipment_date AS 'shipmentDate'
|
||||||
|
,d.start_warranty_date AS 'startWarrantyDate',d.warranty_month AS 'warrantyMonth'
|
||||||
FROM device d
|
FROM device d
|
||||||
LEFT JOIN device_component dc ON d.model_no=dc.model_no AND dc.`enable`=1
|
LEFT JOIN device_component dc ON d.model_no=dc.model_no AND dc.`enable`=1
|
||||||
WHERE d.device_no=#{deviceNo}
|
WHERE d.device_no=#{deviceNo}
|
||||||
|
|
|
||||||
|
|
@ -98,14 +98,16 @@
|
||||||
|
|
||||||
<select id="searchFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
<select id="searchFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
||||||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
||||||
,c.agency_company_name AS 'companyName',u.`name` AS 'createUserName',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
,c.agency_company_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc'
|
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',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'
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
LEFT JOIN app_user u ON t.user_id=u.id
|
LEFT JOIN app_user u ON t.user_id=u.id
|
||||||
LEFT JOIN t_base_customer c ON u.company_id=c.id
|
LEFT JOIN t_base_customer c ON u.company_id=c.id
|
||||||
LEFT JOIN app_area a ON u.area_id=a.id
|
LEFT JOIN app_area a ON u.area_id=a.id
|
||||||
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
|
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
|
||||||
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
|
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
|
||||||
|
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
|
||||||
<include refid="adminSearchWhereCondition"/>
|
<include refid="adminSearchWhereCondition"/>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
@ -118,18 +120,9 @@
|
||||||
</foreach>
|
</foreach>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="closeTicket">
|
|
||||||
UPDATE ticket
|
|
||||||
SET state=3,update_time=NOW()
|
|
||||||
WHERE state=2 AND id IN
|
|
||||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
|
||||||
#{id}
|
|
||||||
</foreach>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select id="searchAllFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
<select id="searchAllFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
||||||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
||||||
,c.agency_company_name AS 'companyName',u.`name` AS 'createUserName',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
,c.agency_company_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc'
|
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc'
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
LEFT JOIN app_user u ON t.user_id=u.id
|
LEFT JOIN app_user u ON t.user_id=u.id
|
||||||
|
|
@ -142,8 +135,9 @@
|
||||||
|
|
||||||
<select id="searchFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
<select id="searchFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
||||||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
||||||
,c.agency_company_name AS 'companyName',u.`name` AS 'createUserName',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
,c.agency_company_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',IF(tf.id IS NULL, false, true) AS 'followed'
|
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',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'
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
LEFT JOIN app_user u ON t.user_id=u.id
|
LEFT JOIN app_user u ON t.user_id=u.id
|
||||||
LEFT JOIN t_base_customer c ON u.company_id=c.id
|
LEFT JOIN t_base_customer c ON u.company_id=c.id
|
||||||
|
|
@ -156,7 +150,7 @@
|
||||||
|
|
||||||
<select id="searchAllFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
<select id="searchAllFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
||||||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
||||||
,c.agency_company_name AS 'companyName',u.`name` AS 'createUserName',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
,c.agency_company_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',IF(tf.id IS NULL, false, true) AS 'followed'
|
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',IF(tf.id IS NULL, false, true) AS 'followed'
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
LEFT JOIN app_user u ON t.user_id=u.id
|
LEFT JOIN app_user u ON t.user_id=u.id
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue