diff --git a/nflg-mobilebroken-admin/pom.xml b/nflg-mobilebroken-admin/pom.xml index fc778042..2a39765d 100644 --- a/nflg-mobilebroken-admin/pom.xml +++ b/nflg-mobilebroken-admin/pom.xml @@ -98,6 +98,11 @@ org.apache.commons commons-pool2 + + com.github.promeg + tinypinyin + 2.0.3 + diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java index 4b9219d5..fa0eae01 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java @@ -1,5 +1,7 @@ package com.nflg.mobilebroken.admin.controller; +import cn.hutool.core.util.StrUtil; +import com.github.promeg.pinyinhelper.Pinyin; import com.nflg.mobilebroken.admin.annotation.ApiMark; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; @@ -48,6 +50,9 @@ public class RoleController extends ControllerBase { @MethodInfoMark(value = "新增角色", menuName = "角色管理") @ApiMark(moduleName = "角色管理", apiName = "新增角色") public ApiResult addRole(@Valid @RequestBody RoleAddRequest request) { + if (StrUtil.isBlank(request.getCode())){ + request.setCode(toPinYin(request.getName())); + } adminRoleService.add(request); return ApiResult.success(); } @@ -60,10 +65,25 @@ public class RoleController extends ControllerBase { @MethodInfoMark(value = "更新角色", menuName = "角色管理") @ApiMark(moduleName = "角色管理", apiName = "更新角色") public ApiResult updateRole(@Valid @RequestBody RoleUpdateRequest request) { + if (StrUtil.isBlank(request.getCode())){ + request.setCode(toPinYin(request.getName())); + } adminRoleService.update(request); return ApiResult.success(); } + private String toPinYin(String str){ + StringBuilder pinyin = new StringBuilder(); + for (char c : str.toCharArray()) { + if (Pinyin.isChinese(c)) { + pinyin.append(Pinyin.toPinyin(c)); + } else { + pinyin.append(c); + } + } + return pinyin.toString(); + } + /** * 搜索角色 * @param request 请求参数 diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 711c26e4..839eca84 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java @@ -125,23 +125,7 @@ public class TicketController extends ControllerBase { @PostMapping("searchTicket") @ApiMark(moduleName = "工单管理", apiName = "搜索工单") public ApiResult> searchTicket(@Valid @RequestBody AdminTicketSearchRequest request) { - return ApiResult.success(PageUtil.convert(ticketService.searchPage(request), d -> { - if (StrUtil.isNotBlank(d.getHandle())) { - List 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()); - 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 ApiResult.success(PageUtil.convert(ticketService.searchPage(request), d -> d)); } /** @@ -150,7 +134,8 @@ public class TicketController extends ControllerBase { */ @PostMapping("exportSearchTicket") @ApiMark(moduleName = "工单管理", apiName = "导出搜索工单") - public void exportSearchTicket(HttpServletResponse response, @RequestBody AdminTicketSearchRequest request) throws IOException { + public void exportSearchTicket(HttpServletResponse response,@Valid @RequestBody AdminTicketSearchRequest request) throws IOException { + request.setPageSize(Integer.MAX_VALUE); List datas = ticketService.exportSearch(request); EecExcelUtil.export("工单", "sheet1", datas, response); } @@ -309,7 +294,7 @@ public class TicketController extends ControllerBase { response.setContentType(MediaType.APPLICATION_PDF_VALUE); String encode = URLEncoder.encode(ticket.getTitle() + ".pdf", StandardCharsets.UTF_8); - response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" +encode ); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" +encode ); // 生成PDF try { ConverterProperties converterProperties = new ConverterProperties(); @@ -455,6 +440,8 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.Processing.getState()) > 1) .throwMessage("当前工单状态不允许发送消息"); + ticket.setCurrentHandle(AdminUserUtil.getUserId()); + ticketService.updateById(ticket); AdminUser user = adminUserService.getById(AdminUserUtil.getUserId()); ChatMessageDTO message = new ChatMessageDTO() .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextId()) diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AdminTicketSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AdminTicketSearchRequest.java index 850857fd..1fc9afa6 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AdminTicketSearchRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AdminTicketSearchRequest.java @@ -21,4 +21,7 @@ public class AdminTicketSearchRequest extends TicketSearchRequest { //客户名称 private String createUserName; + + //质保状态 + private Integer warrantyStatus; } \ No newline at end of file diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RoleAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RoleAddRequest.java index ef30dab5..48d7b611 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RoleAddRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/RoleAddRequest.java @@ -2,6 +2,9 @@ package com.nflg.mobilebroken.common.pojo.request; import lombok.Data; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + @Data public class RoleAddRequest { @@ -9,8 +12,10 @@ public class RoleAddRequest { private String code; // 角色名称 + @NotBlank private String name; // 是否启用 + @NotNull private Boolean enable; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java index 9ba3a703..9aecb66c 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java @@ -8,7 +8,6 @@ import org.ttzero.excel.annotation.ExcelColumn; import org.ttzero.excel.annotation.IgnoreExport; import java.time.LocalDateTime; -import java.util.List; import java.util.Objects; @Data @@ -106,24 +105,23 @@ public class AdminTicketVO { //所属CQM @ExcelColumn("所属CQM") + private String cqms; + + //工单负责人 + @ExcelColumn("工单负责人") private String cqm; - //处理人 - @JsonIgnore - @IgnoreExport + //被分配人 + @ExcelColumn("被分配人") private String handle; - //处理人 - @ExcelColumn("处理人") - private List handleBy; - //当前处理人 @ExcelColumn("当前处理人") - private List currentProcessor; + private String currentHandle; //处理完成时间 @ExcelColumn("处理完成时间") - private LocalDateTime solveTime; + private LocalDateTime completeTime; //关闭时间 @ExcelColumn("关闭时间") diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java index 33a9ccac..5a3fc646 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java @@ -122,6 +122,16 @@ public class Ticket implements Serializable { */ private String handle; + /** + * 处理人姓名 + */ + private String handleName; + + /** + * 当前处理人 + */ + private Integer currentHandle; + /** * 最后更新时间 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java index 4fe6b61e..e752a12c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java @@ -30,7 +30,7 @@ public interface TicketMapper extends BaseMapper { // void completeTicket(List ids, Integer userId); - List searchAllFromAdmin(AdminTicketSearchRequest request); + List searchAllFromAdmin(AdminTicketSearchRequest request, Integer userId); IPage searchFromAdminAndFollow(AdminTicketSearchRequest request, Integer userId, IPage page); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java index 676010c0..7af6282e 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java @@ -28,8 +28,6 @@ public interface ITicketService extends IService { Ticket assignmentTicket(AssignmentTicketRequest request); - void completeTicket(List ids); - Ticket completeTicket(Integer id); Ticket closeTicket(TicketCloseRequest request); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index 8c200266..8ae11ef8 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -126,8 +126,9 @@ public class AdminUserServiceImpl extends ServiceImpl - new AdminUserVO() + pageData.setItems(page.getRecords().stream().map(u ->{ + AdminUser userCreate=getById(u.getCreateBy()); + return new AdminUserVO() .setId(u.getId()) .setUserCode(u.getUserCode()) .setLoginName(u.getLoginName()) @@ -136,12 +137,17 @@ public class AdminUserServiceImpl extends ServiceImpl getSimpleDepartments() { List datas = lambdaQuery() .eq(TBaseDepartment::getDataValidStatus, 1) + .eq(TBaseDepartment::getDeptStatus, 1) .eq(TBaseDepartment::getDeptParentId, 0) .list(); List vos = convert(datas); @@ -57,6 +58,7 @@ public class TBaseDepartmentServiceImpl extends ServiceImpl datas = lambdaQuery() .eq(TBaseDepartment::getDataValidStatus, 1) + .eq(TBaseDepartment::getDeptStatus, 1) .eq(TBaseDepartment::getDeptParentId, parent.getId()) .list(); List vos = convert(datas); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java index 45934067..9f17d638 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java @@ -14,9 +14,11 @@ import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AppUserUtil; import com.nflg.mobilebroken.common.util.TicketUtl; import com.nflg.mobilebroken.common.util.VUtils; +import com.nflg.mobilebroken.repository.entity.AdminUser; import com.nflg.mobilebroken.repository.entity.Ticket; import com.nflg.mobilebroken.repository.entity.TicketEvaluate; import com.nflg.mobilebroken.repository.mapper.TicketMapper; +import com.nflg.mobilebroken.repository.service.IAdminUserService; import com.nflg.mobilebroken.repository.service.IAppAreaService; import com.nflg.mobilebroken.repository.service.ITicketEvaluateService; import com.nflg.mobilebroken.repository.service.ITicketService; @@ -24,7 +26,11 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -43,6 +49,9 @@ public class TicketServiceImpl extends ServiceImpl impleme @Resource private ITicketEvaluateService ticketEvaluateService; + @Resource + private IAdminUserService adminUserService; + @Override public Ticket add(TicketAddRequest request, Integer userId) { Ticket lastTicket=lambdaQuery() @@ -87,6 +96,9 @@ public class TicketServiceImpl extends ServiceImpl impleme @Override public IPage searchPage(AdminTicketSearchRequest request) { + if (Objects.nonNull(request.getEndTime())){ + request.setEndTime(request.getEndTime().plusDays(1)); + } if (request.getType() == 2) { return baseMapper.searchFromAdminAndFollow(request, AdminUserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize())); } else if (request.getType() == 4) { @@ -107,43 +119,45 @@ public class TicketServiceImpl extends ServiceImpl impleme ticket.setState(TicketState.Processing.getState()); ticket.setRemark(request.getRemark()); ticket.setHandle(StrUtil.join(",", request.getUserIds())); + ticket.setHandleName(StrUtil.join(",", adminUserService.listByIds(request.getUserIds()).stream().map(AdminUser::getUserName).collect(Collectors.toList()))); ticket.setCqm(AdminUserUtil.getUserId()); + ticket.setCurrentHandle(AdminUserUtil.getUserId()); ticket.setUpdateTime(LocalDateTime.now()); updateById(ticket); return ticket; } - @Override - public void completeTicket(List ids) { -// baseMapper.completeTicket(ids, AdminUserUtil.getUserId()); - List tickets=listByIds(ids); - List stateErrors=new ArrayList<>(); - List 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 void completeTicket(List ids) { +//// baseMapper.completeTicket(ids, AdminUserUtil.getUserId()); +// List tickets=listByIds(ids); +// List stateErrors=new ArrayList<>(); +// List 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 Ticket completeTicket(Integer id) { @@ -155,6 +169,7 @@ public class TicketServiceImpl extends ServiceImpl impleme .throwMessage("你无权操作该工单"); ticket.setState(TicketState.ProcessingCompleted.getState()); ticket.setSolveTime(LocalDateTime.now()); + ticket.setCurrentHandle(AdminUserUtil.getUserId()); ticket.setUpdateTime(LocalDateTime.now()); updateById(ticket); return ticket; @@ -172,6 +187,7 @@ public class TicketServiceImpl extends ServiceImpl impleme ticket.setSolution(request.getSolution()); ticket.setSolutionAttachments(StrUtil.join(",", request.getAttachments())); ticket.setSolveTime(LocalDateTime.now()); + ticket.setCurrentHandle(AdminUserUtil.getUserId()); updateById(ticket); return ticket; } @@ -181,7 +197,7 @@ public class TicketServiceImpl extends ServiceImpl impleme if (request.getType() == 2) { return baseMapper.searchAllFromAdminAndFollow(request, AdminUserUtil.getUserId()); } else if (request.getType() == 4) { - return baseMapper.searchAllFromAdmin(request); + return baseMapper.searchAllFromAdmin(request, AdminUserUtil.getUserId()); } return Collections.emptyList(); } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index 006dbe47..ba0372d0 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -32,12 +32,6 @@ t.state!=4 - - AND (t.title LIKE CONCAT('%', #{request.title}, '%') OR t.no LIKE CONCAT('%', #{request.title}, '%')) - - - AND t.device_no LIKE CONCAT('%', #{request.deviceNo}, '%') - AND t.state=#{request.state} @@ -48,7 +42,7 @@ AND t.component=#{request.component} - AND u.handle LIKE CONCAT('%', #{request.handleUserName}, '%') + AND t.handle_name LIKE CONCAT('%', #{request.handleUserName}, '%') AND u.company_id=#{request.companyId} @@ -59,8 +53,8 @@ AND t.question=#{request.question} - - AND u.name LIKE CONCAT('%', #{request.createUserName}, '%') + + AND d.warranty_state=#{request.warrantyStatus} AND t.create_time>=#{request.startTime} @@ -68,6 +62,15 @@ AND t.create_time <= #{request.endTime} + + AND (t.title LIKE CONCAT('%', #{request.title}, '%') OR t.no LIKE CONCAT('%', #{request.title}, '%')) + + + AND t.device_no LIKE CONCAT('%', #{request.deviceNo}, '%') + + + AND d.customer_name LIKE CONCAT('%', #{request.createUserName}, '%') + @@ -81,7 +84,7 @@ 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} AND t.state!=4 - ORDER BY t.create_time DESC + ORDER BY t.id DESC @@ -141,23 +149,32 @@