Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
luolm 2025-02-13 22:44:02 +08:00
commit 25f6282920
15 changed files with 178 additions and 58 deletions

View File

@ -3,7 +3,7 @@ package com.nflg.mobilebroken.admin.controller;
import com.nflg.mobilebroken.admin.annotation.ApiMark; import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.exception.NflgException;
import com.nflg.mobilebroken.starter.service.impl.AdminSSEManagerService; import com.nflg.mobilebroken.starter.service.impl.APPSSEManagerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -20,8 +20,9 @@ import java.io.IOException;
@RequestMapping("/sse") @RequestMapping("/sse")
public class SSEController extends ControllerBase { public class SSEController extends ControllerBase {
@Resource @Resource
private AdminSSEManagerService adminSSEManagerService; private APPSSEManagerService sseManagerService;
/** /**
* 建立sse连接 * 建立sse连接
@ -31,7 +32,7 @@ public class SSEController extends ControllerBase {
@GetMapping(value = "connect", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @GetMapping(value = "connect", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@ApiMark(moduleName = "连接", apiName = "SSE", isPublic = true) @ApiMark(moduleName = "连接", apiName = "SSE", isPublic = true)
public SseEmitter connect(@RequestParam String userId) { public SseEmitter connect(@RequestParam String userId) {
SseEmitter sse = adminSSEManagerService.connect(Integer.valueOf(userId)); SseEmitter sse = sseManagerService.connect(Integer.valueOf(userId));
try { try {
sse.send("您已连接"); sse.send("您已连接");
} catch (IOException e) { } catch (IOException e) {

View File

@ -13,10 +13,7 @@ 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.*; import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO; import com.nflg.mobilebroken.common.pojo.vo.*;
import com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO;
import com.nflg.mobilebroken.common.pojo.vo.TicketInfoVO;
import com.nflg.mobilebroken.common.pojo.vo.TicketPdfVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.EecExcelUtil; import com.nflg.mobilebroken.common.util.EecExcelUtil;
import com.nflg.mobilebroken.common.util.PageUtil; import com.nflg.mobilebroken.common.util.PageUtil;
@ -119,7 +116,15 @@ public class TicketController extends ControllerBase {
d.setHandleBy(adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList())); d.setHandleBy(adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList()));
} }
AppUser primaryUser = appUserService.getPrimaryByCompanyId(d.getCompanyId()); AppUser primaryUser = appUserService.getPrimaryByCompanyId(d.getCompanyId());
d.setPrimaryUserName(primaryUser.getName()); if (Objects.nonNull(primaryUser)) {
d.setPrimaryUserName(primaryUser.getName());
}
if (StrUtil.isNotBlank(d.getCqm())) {
AdminUser adminUser = adminUserService.getById(Integer.valueOf(d.getCqm()));
if (Objects.nonNull(adminUser)) {
d.setCqm(adminUser.getUserName());
}
}
return d; return d;
})); }));
} }
@ -313,7 +318,7 @@ public class TicketController extends ControllerBase {
**/ **/
@GetMapping("getChatMessages") @GetMapping("getChatMessages")
@ApiMark(moduleName = "工单管理", apiName = "获取工单聊天记录") @ApiMark(moduleName = "工单管理", apiName = "获取工单聊天记录")
public ApiResult<List<ChatMessageDTO>> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) { public ApiResult<List<ChatMessageVO>> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) {
return ApiResult.success(ticketChatService.getMessages(ticketId)); return ApiResult.success(ticketChatService.getMessages(ticketId));
} }

View File

@ -9,15 +9,14 @@ import com.nflg.mobilebroken.common.pojo.request.AreaSearchRequest;
import com.nflg.mobilebroken.common.pojo.request.EnableRequest; import com.nflg.mobilebroken.common.pojo.request.EnableRequest;
import com.nflg.mobilebroken.common.pojo.vo.AreaSimpleVO; import com.nflg.mobilebroken.common.pojo.vo.AreaSimpleVO;
import com.nflg.mobilebroken.common.pojo.vo.AreaVO; import com.nflg.mobilebroken.common.pojo.vo.AreaVO;
import com.nflg.mobilebroken.common.util.AppUserUtil;
import com.nflg.mobilebroken.repository.entity.AppArea; import com.nflg.mobilebroken.repository.entity.AppArea;
import com.nflg.mobilebroken.repository.service.IAppAreaService; import com.nflg.mobilebroken.repository.service.IAppAreaService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* 区域相关接口 * 区域相关接口
@ -60,9 +59,10 @@ public class AreaController extends ControllerBase {
**/ **/
@PostMapping("saveArea") @PostMapping("saveArea")
public ApiResult<Boolean> saveArea(@Valid @RequestBody AreaSaveRequest request){ public ApiResult<Boolean> saveArea(@Valid @RequestBody AreaSaveRequest request){
AppArea area=new AppArea().setId(request.getId()) AppArea area = new AppArea()
.setId(request.getId())
.setName(request.getName()) .setName(request.getName())
.setParentId(request.getParentId()); .setParentId(Optional.ofNullable(request.getParentId()).orElse(0));
return ApiResult.success(appAreaService.saveOrUpdate(area)); return ApiResult.success(appAreaService.saveOrUpdate(area));
} }
@ -80,12 +80,8 @@ public class AreaController extends ControllerBase {
* @param request 请求信息 * @param request 请求信息
**/ **/
@PostMapping("changeAreaEnable") @PostMapping("changeAreaEnable")
public ApiResult<Boolean> changeAreaEnable(@Valid @RequestBody EnableRequest request){ public ApiResult<Void> changeAreaEnable(@Valid @RequestBody EnableRequest request) {
AppArea area=new AppArea() appAreaService.enable(request);
.setId(request.getId()) return ApiResult.success();
.setEnable(request.getEnable())
.setUpdateBy(AppUserUtil.getUserName())
.setUpdateTime(LocalDateTime.now());
return ApiResult.success(appAreaService.updateById(area));
} }
} }

View File

@ -2,7 +2,7 @@ package com.nflg.mobilebroken.cfs.controller;
import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.exception.NflgException;
import com.nflg.mobilebroken.starter.service.impl.APPSSEManagerService; import com.nflg.mobilebroken.starter.service.impl.AdminSSEManagerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -25,7 +25,7 @@ import java.io.IOException;
public class SSEController extends ControllerBase { public class SSEController extends ControllerBase {
@Resource @Resource
private APPSSEManagerService sseManagerService; private AdminSSEManagerService adminSSEManagerService;
/** /**
* 建立sse连接 * 建立sse连接
@ -34,7 +34,7 @@ public class SSEController extends ControllerBase {
*/ */
@GetMapping(value = "connect",produces = MediaType.TEXT_EVENT_STREAM_VALUE) @GetMapping(value = "connect",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter connect(@RequestParam Integer userId) { public SseEmitter connect(@RequestParam Integer userId) {
SseEmitter sse=sseManagerService.connect(userId); SseEmitter sse = adminSSEManagerService.connect(userId);
try { try {
sse.send("您已连接"); sse.send("您已连接");
} catch (IOException e) { } catch (IOException e) {

View File

@ -209,7 +209,6 @@ public class TiketController extends ControllerBase {
.setAreaName(appArea.getName()) .setAreaName(appArea.getName())
.setCompanyName(company.getAgencyCompanyName()) .setCompanyName(company.getAgencyCompanyName())
.setHandle(handle); .setHandle(handle);
;
return ApiResult.success(vo); return ApiResult.success(vo);
} }
@ -219,7 +218,7 @@ public class TiketController extends ControllerBase {
* @return 聊天记录 * @return 聊天记录
**/ **/
@GetMapping("getChatMessages") @GetMapping("getChatMessages")
public ApiResult<List<ChatMessageDTO>> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) { public ApiResult<List<ChatMessageVO>> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) {
return ApiResult.success(ticketChatService.getMessages(ticketId)); return ApiResult.success(ticketChatService.getMessages(ticketId));
} }

View File

@ -3,7 +3,6 @@ package com.nflg.mobilebroken.common.pojo.request;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data @Data
public class AreaSaveRequest { public class AreaSaveRequest {
@ -11,8 +10,7 @@ public class AreaSaveRequest {
//区域id //区域id
private Integer id; private Integer id;
//上级区域id如果没有上级则填0 //上级区域id如果为空则是一级区域
@NotNull(message = "上级区域id不能为空")
private Integer parentId; private Integer parentId;
//区域名称 //区域名称

View File

@ -0,0 +1,40 @@
package com.nflg.mobilebroken.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class ChatMessageVO {
private Long id;
//来源
private String from;
// 发送者id
private Integer senderId;
// 发送者名称
private String senderName;
// 发送者头像
private String senderAvatar;
// 消息内容
private String content;
// 附件列表
private List<String> attachments;
//图片列表
private List<String> images;
// 创建时间
private String createTime;
// 引用的消息
private ChatMessageVO quote;
}

View File

@ -3,6 +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.request.AreaSearchRequest; import com.nflg.mobilebroken.common.pojo.request.AreaSearchRequest;
import com.nflg.mobilebroken.common.pojo.request.EnableRequest;
import com.nflg.mobilebroken.common.pojo.vo.AreaVO; import com.nflg.mobilebroken.common.pojo.vo.AreaVO;
import com.nflg.mobilebroken.repository.entity.AppArea; import com.nflg.mobilebroken.repository.entity.AppArea;
@ -21,4 +22,6 @@ public interface IAppAreaService extends IService<AppArea> {
IPage<AreaVO> search(AreaSearchRequest request); IPage<AreaVO> search(AreaSearchRequest request);
List<Integer> getAllhildrens(Integer areaId); List<Integer> getAllhildrens(Integer areaId);
void enable(EnableRequest request);
} }

View File

@ -1,7 +1,10 @@
package com.nflg.mobilebroken.repository.service; package com.nflg.mobilebroken.repository.service;
import cn.hutool.core.date.DatePattern;
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO; import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.pojo.dto.TicketChatDTO; import com.nflg.mobilebroken.common.pojo.dto.TicketChatDTO;
import com.nflg.mobilebroken.common.pojo.vo.ChatMessageVO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
@ -9,9 +12,12 @@ import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
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;
@Service @Service
public class TicketChatService { public class TicketChatService {
@ -23,13 +29,37 @@ public class TicketChatService {
mongoTemplate.save(ticketChatDTO); mongoTemplate.save(ticketChatDTO);
} }
public List<ChatMessageDTO> getMessages(Integer ticketId) { public List<ChatMessageVO> getMessages(Integer ticketId) {
Query query = new Query(Criteria.where("ticketId").is(ticketId)); Query query = new Query(Criteria.where("ticketId").is(ticketId));
TicketChatDTO ticketChatDTO = mongoTemplate.findOne(query, TicketChatDTO.class); TicketChatDTO ticketChatDTO = mongoTemplate.findOne(query, TicketChatDTO.class);
if (Objects.isNull(ticketChatDTO)) { if (Objects.isNull(ticketChatDTO)) {
return Collections.emptyList(); return Collections.emptyList();
} else { } else {
return ticketChatDTO.getMessages(); String zone = MultilingualUtil.getZone();
ZoneId zoneId = ZoneId.of(Objects.isNull(zone) ? "Asia/Shanghai" : zone);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN).withZone(zoneId);
List<ChatMessageDTO> messages = ticketChatDTO.getMessages();
return messages.stream().map(m -> new ChatMessageVO()
.setId(m.getId())
.setFrom(m.getFrom())
.setSenderId(m.getSenderId())
.setSenderName(m.getSenderName())
.setSenderAvatar(m.getSenderAvatar())
.setContent(m.getContent())
.setAttachments(m.getAttachments())
.setImages(m.getImages())
.setCreateTime(formatter.format(m.getCreateTime()))
.setQuote(Objects.isNull(m.getQuote()) ? null : new ChatMessageVO()
.setId(m.getId())
.setFrom(m.getFrom())
.setSenderId(m.getSenderId())
.setSenderName(m.getSenderName())
.setSenderAvatar(m.getSenderAvatar())
.setContent(m.getContent())
.setAttachments(m.getAttachments())
.setImages(m.getImages()))
.setCreateTime(formatter.format(m.getCreateTime())))
.collect(Collectors.toList());
} }
} }

View File

@ -8,12 +8,14 @@ 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;
import com.nflg.mobilebroken.common.pojo.request.AreaSearchRequest; import com.nflg.mobilebroken.common.pojo.request.AreaSearchRequest;
import com.nflg.mobilebroken.common.pojo.request.EnableRequest;
import com.nflg.mobilebroken.common.pojo.vo.AreaVO; import com.nflg.mobilebroken.common.pojo.vo.AreaVO;
import com.nflg.mobilebroken.common.util.AppUserUtil; import com.nflg.mobilebroken.common.util.AppUserUtil;
import com.nflg.mobilebroken.repository.entity.AppArea; import com.nflg.mobilebroken.repository.entity.AppArea;
import com.nflg.mobilebroken.repository.mapper.AppAreaMapper; import com.nflg.mobilebroken.repository.mapper.AppAreaMapper;
import com.nflg.mobilebroken.repository.service.IAppAreaService; import com.nflg.mobilebroken.repository.service.IAppAreaService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
@ -98,6 +100,27 @@ public class AppAreaServiceImpl extends ServiceImpl<AppAreaMapper, AppArea> impl
return list; return list;
} }
@Transactional
@Override
public void enable(EnableRequest request) {
if (request.getEnable()) {
lambdaUpdate()
.set(AppArea::getEnable, true)
.set(AppArea::getUpdateBy, AppUserUtil.getUserName())
.set(AppArea::getUpdateTime, LocalDateTime.now())
.eq(AppArea::getId, request.getId())
.update();
} else {
List<Integer> childrens = getAllhildrens(request.getId());
lambdaUpdate()
.set(AppArea::getEnable, false)
.set(AppArea::getUpdateBy, AppUserUtil.getUserName())
.set(AppArea::getUpdateTime, LocalDateTime.now())
.in(AppArea::getId, childrens)
.update();
}
}
private List<AppArea> getChildrens(Integer areaId) { private List<AppArea> getChildrens(Integer areaId) {
List<AppArea> areas = lambdaQuery() List<AppArea> areas = lambdaQuery()
.eq(AppArea::getEnable, true) .eq(AppArea::getEnable, true)

View File

@ -12,6 +12,7 @@ import com.nflg.mobilebroken.common.pojo.vo.AppUserApplyforInfoVO;
import com.nflg.mobilebroken.common.pojo.vo.AppUserApplyforVO; import com.nflg.mobilebroken.common.pojo.vo.AppUserApplyforVO;
import com.nflg.mobilebroken.common.pojo.vo.AppUserVO; import com.nflg.mobilebroken.common.pojo.vo.AppUserVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.AppUserUtil;
import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.AppArea; import com.nflg.mobilebroken.repository.entity.AppArea;
import com.nflg.mobilebroken.repository.entity.AppUser; import com.nflg.mobilebroken.repository.entity.AppUser;
@ -73,7 +74,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setCompanyId(request.getCompanyId()) .setCompanyId(request.getCompanyId())
.setTitleId(request.getTitleId()) .setTitleId(request.getTitleId())
.setType(AppUserApplyforType.ADD.getState().byteValue()) .setType(AppUserApplyforType.ADD.getState().byteValue())
.setCreateBy(AdminUserUtil.getUserId()) .setCreateBy(AppUserUtil.getUserId())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
save(applyfor); save(applyfor);
} }
@ -85,7 +86,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setReason(request.getReason()) .setReason(request.getReason())
.setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()) .setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.setType(AppUserApplyforType.ENABLE.getState().byteValue()) .setType(AppUserApplyforType.ENABLE.getState().byteValue())
.setCreateBy(AdminUserUtil.getUserId()) .setCreateBy(AppUserUtil.getUserId())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
save(applyfor); save(applyfor);
} }
@ -97,7 +98,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setReason(request.getReason()) .setReason(request.getReason())
.setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()) .setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.setType(AppUserApplyforType.EXTENSION.getState().byteValue()) .setType(AppUserApplyforType.EXTENSION.getState().byteValue())
.setCreateBy(AdminUserUtil.getUserId()) .setCreateBy(AppUserUtil.getUserId())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
save(applyfor); save(applyfor);
} }

View File

@ -77,7 +77,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
public void disable(Integer userId) { public void disable(Integer userId) {
AppUser user=new AppUser() AppUser user=new AppUser()
.setId(userId) .setId(userId)
.setUpdateBy(AdminUserUtil.getUserId()) .setUpdateBy(AppUserUtil.getUserId())
.setUpdateTime(LocalDateTime.now()); .setUpdateTime(LocalDateTime.now());
updateById(user); updateById(user);
} }
@ -248,12 +248,31 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
@Override @Override
public void enable(EnableAppUserRequest request) { public void enable(EnableAppUserRequest request) {
lambdaUpdate() if (request.getEnable()) {
.set(AppUser::getState, request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState()) lambdaUpdate()
// .set(AppUser::getUpdateBy, AdminUserUtil.getUserId()) .set(AppUser::getState, UserState.Activated.getState())
.set(AppUser::getUpdateTime, LocalDateTime.now()) .set(AppUser::getUpdateTime, LocalDateTime.now())
.in(AppUser::getId, request.getIds()) .in(AppUser::getId, request.getIds())
.update(); .update();
} else {
lambdaUpdate()
.set(AppUser::getState, UserState.Disabled.getState())
.set(AppUser::getUpdateTime, LocalDateTime.now())
.in(AppUser::getId, request.getIds())
.update();
//禁用子账号
List<String> companyIds = listByIds(request.getIds())
.stream()
.filter(AppUser::getIsPrimary)
.flatMap(u -> Arrays.stream(u.getCompanyId().split(",")))
.collect(Collectors.toList());
lambdaUpdate()
.set(AppUser::getState, UserState.Disabled.getState())
.set(AppUser::getUpdateTime, LocalDateTime.now())
.eq(AppUser::getIsPrimary, false)
.in(AppUser::getCompanyId, companyIds)
.update();
}
} }
@Override @Override

View File

@ -8,7 +8,7 @@
INNER JOIN ticket t ON m.ticket_id=t.id INNER JOIN ticket t ON m.ticket_id=t.id
INNER JOIN app_user u ON t.user_id=u.id INNER JOIN app_user u ON t.user_id=u.id
WHERE m.is_read=0 AND m.user_id=#{userId} WHERE m.is_read=0 AND m.user_id=#{userId}
ORDER BY m.id ORDER BY m.create_time DESC
</select> </select>
<select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.AppMessageVO"> <select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.AppMessageVO">
SELECT m.id,t.id AS 'ticketId',t.`no` AS 'ticketNo',t.title AS 'ticketTitle',m.content,m.create_time AS 'createTime',u.`name` AS 'ticketCreateBy',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleBy',m.is_read AS 'isRead' SELECT m.id,t.id AS 'ticketId',t.`no` AS 'ticketNo',t.title AS 'ticketTitle',m.content,m.create_time AS 'createTime',u.`name` AS 'ticketCreateBy',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleBy',m.is_read AS 'isRead'
@ -19,6 +19,6 @@
<if test="title != null and title != ''"> <if test="title != null and title != ''">
AND (t.title LIKE CONCAT('%',#{title},'%') OR t.no LIKE CONCAT('%',#{title},'%')) AND (t.title LIKE CONCAT('%',#{title},'%') OR t.no LIKE CONCAT('%',#{title},'%'))
</if> </if>
ORDER BY m.id ORDER BY m.create_time DESC
</select> </select>
</mapper> </mapper>

View File

@ -52,19 +52,17 @@
<foreach collection="companyIds" open="(" close=")" item="companyId" separator=","> <foreach collection="companyIds" open="(" close=")" item="companyId" separator=",">
#{companyId} #{companyId}
</foreach> </foreach>
<where> <if test="request.deviceNo!=null and request.deviceNo!=''">
<if test="request.deviceNo!=null and request.deviceNo!=''"> and d.device_no LIKE concat('%', #{request.deviceNo}, '%')
and d.device_no LIKE concat('%', #{request.deviceNo}, '%') </if>
</if> <if test="request.modelNo!=null and request.modelNo!=''">
<if test="request.modelNo!=null and request.modelNo!=''"> and d.model_no LIKE concat('%', #{request.modelNo}, '%')
and d.model_no LIKE concat('%', #{request.modelNo}, '%') </if>
</if> <if test="request.startTime!=null and request.startTime!=''">
<if test="request.startTime!=null and request.startTime!=''"> and d.shipment_date >= #{request.startTime}
and d.shipment_date >= #{request.startTime} </if>
</if> <if test="request.endTime!=null and request.endTime!=''">
<if test="request.endTime!=null and request.endTime!=''"> and d.shipment_date &lt;= #{request.endTime}
and d.shipment_date &lt;= #{request.endTime} </if>
</if>
</where>
</select> </select>
</mapper> </mapper>

View File

@ -78,6 +78,7 @@
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=0 LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=0
WHERE t.user_id=#{userId} WHERE t.user_id=#{userId}
<include refid="searchWhereCondition"/> <include refid="searchWhereCondition"/>
ORDER BY t.create_time DESC
</select> </select>
<select id="searchFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO"> <select id="searchFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
@ -88,6 +89,7 @@
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0 LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0
WHERE tf.user_id=#{userId} WHERE tf.user_id=#{userId}
<include refid="searchWhereCondition"/> <include refid="searchWhereCondition"/>
ORDER BY t.create_time DESC
</select> </select>
<select id="searchArea" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO"> <select id="searchArea" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
@ -100,13 +102,14 @@
#{companyId} #{companyId}
</foreach> </foreach>
<include refid="searchWhereCondition"/> <include refid="searchWhereCondition"/>
ORDER BY t.create_time DESC
</select> </select>
<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'
,d.customer_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,d.customer_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',d.device_type AS 'deviceType' ,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' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',t.cqm
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
@ -115,6 +118,7 @@
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 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"/>
ORDER BY t.create_time DESC
</select> </select>
<select id="completeTicket"> <select id="completeTicket">
@ -137,13 +141,14 @@
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
<include refid="adminSearchWhereCondition"/> <include refid="adminSearchWhereCondition"/>
ORDER BY t.create_time DESC
</select> </select>
<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'
,d.customer_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,d.customer_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',d.device_type AS 'deviceType' ,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' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',t.cqm
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
@ -152,6 +157,7 @@
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
<include refid="adminSearchWhereCondition"/> <include refid="adminSearchWhereCondition"/>
ORDER BY t.create_time DESC
</select> </select>
<select id="searchAllFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO"> <select id="searchAllFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
@ -166,5 +172,6 @@
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
<include refid="adminSearchWhereCondition"/> <include refid="adminSearchWhereCondition"/>
ORDER BY t.create_time DESC
</select> </select>
</mapper> </mapper>