Browse Source

Merge branch 'work_order_ff'

zoujiajian 3 năm trước cách đây
mục cha
commit
e90ce26371

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/sys/WorkOrderMapper.java

@@ -1,7 +1,11 @@
 package com.cyksj.mapper.manage.sys;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.WorkOrder;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /*
  *项目名: netflix
@@ -10,4 +14,6 @@ import com.cyksj.model.entity.WorkOrder;
  *创建时间:2023/4/19 15:44
  */
 public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
+	@Select("select id from work_order where account in (select account from work_order group by account having count(*) == 1))")
+	List<Long> selectOnlyOneWorkOrderBeforeThreeDays(DateTime threeDaysBefore);
 }

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/WorkOrder.java

@@ -44,11 +44,15 @@ public class WorkOrder extends BaseEntity{
 
 	private Type type;
 
+	private String content;
+
+	private String remark;
 
 	@Getter
 	public enum Type {
 		freeze("账号被封"),
 		noMember("无会员"),
+		other("其他问题"),
 		;
 
 		String desc;

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserWorkOrderView.java

@@ -46,6 +46,12 @@ public class UserWorkOrderView {
 	@DbField("wo.created_time")
 	private Date createdTime;
 
+	@DbField("wo.content")
+	private String content;
+
+	@DbField("wo.remark")
+	private String remark;
+
 	@DbField("wo.customer_service_auth_id")
 	private String customerServiceAuthId;
 }

+ 8 - 1
netflix-dao/src/main/java/com/cyksj/model/views/WorkOrderView.java

@@ -17,7 +17,8 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "work_order wo left join user u on u.id = wo.user_id")
+@SearchBean(tables = "work_order wo left join user u on u.id = wo.user_id",
+		where = ":feedback:")
 public class WorkOrderView {
 	@DbField("wo.id")
 	private Long id;
@@ -85,6 +86,12 @@ public class WorkOrderView {
 	@DbField("wo.created_time")
 	private Date createdTime;
 
+	@DbField("wo.content")
+	private String content;
+
+	@DbField("wo.remark")
+	private String remark;
+
 	@DbIgnore
 	private Date finalReplyTime;
 }

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/corp/impl/WxCorpOpsImpl.java

@@ -58,7 +58,8 @@ public class WxCorpOpsImpl implements WxCorpOps {
 
 	@Override
 	public String getAccessToken(String corpId) throws Exception {
-		String accessToken = StrUtil.EMPTY;
+		corpId = Optional.ofNullable(corpId).orElse(yhlXWxCorpConfig.getCorpId());
+		String accessToken = redisService.getStr(RedisKey.CORP_ACCESS_TOKEN_KEY + corpId);
 		if (StringUtils.isNotBlank(accessToken)) {
 			return accessToken;
 		}

+ 3 - 15
netflix-service/src/main/java/com/cyksj/service/user/impl/WorkOrderFrontServiceImpl.java

@@ -99,22 +99,10 @@ public class WorkOrderFrontServiceImpl implements WorkOrderFrontService {
 			workOrder.setAssignCustomerServiceId(customer.getId());
 			workOrder.setCustomerServiceAuthId(customer.getAuthId());
 		}
-		workOrderMapper.insert(workOrder);
-
-		WorkOrderChatHistory workOrderChatHistory = new WorkOrderChatHistory();
-		workOrderChatHistory.setFromUser(WorkOrderChatHistory.Messenger.user);
-		workOrderChatHistory.setToUser(WorkOrderChatHistory.Messenger.root);
-		workOrderChatHistory.setUserId(userId);
-		workOrderChatHistory.setWorkOrderId(workOrder.getId());
-		workOrderChatHistory.setContent(content);
-		if (StrUtil.isNotBlank(imgs)) {
-			if (!imgs.contains("[") && !imgs.contains("]")) {
-				imgs = String.format("[\"%s\"]", imgs);
-			}
-			if (imgs.length() > 2000) throw BusinessRuntimeException.getInstance("选择图片过多");
-			workOrderChatHistory.setImgs(imgs);
+		if (workOrder.getType() == WorkOrder.Type.other) {
+			workOrder.setContent(workOrder.getContent());
 		}
-		historyMapper.insert(workOrderChatHistory);
+		workOrderMapper.insert(workOrder);
 	}
 
 	@Override

+ 6 - 11
netflix-service/src/main/java/com/cyksj/task/Scheduler.java

@@ -372,20 +372,15 @@ public class Scheduler {
     }
 
     /**
-     * 2天前的工单未关闭 直接关闭
+     * 如果账号只有一个人反馈 3天后自动给他处理成无异常
      */
     @Scheduled(cron = "0 10 0 * * ?")
-    public void closeWorkOrderBeforeTowDays() {
-        DateTime twoBefore = DateUtil.offsetDay(DateTime.now(), -2);
-        List<WorkOrder> workOrders = beanSearcher.searchAll(WorkOrder.class, MapUtils.builder()
-                .field(WorkOrder::getStatus, WorkOrder.Status.waiting.name())
-                .field(WorkOrder::getCreatedTime, twoBefore).op(Operator.LessEqual)
-                .onlySelect(WorkOrder::getId)
-                .build());
+    public void closeOnlyOneWorkOrderBeforeThreeDays() {
+        DateTime threeDaysBefore = DateUtil.offsetDay(DateTime.now(), -3);
+	    List<Long> workOrders = workOrderMapper.selectOnlyOneWorkOrderBeforeThreeDays(threeDaysBefore);
         if (CollUtil.isNotEmpty(workOrders)) {
-            List<Long> collect = workOrders.stream().map(WorkOrder::getId).collect(Collectors.toList());
-            List<List<Long>> lists = Lists.partition(collect, 1000);
-            log.info("关闭2天前未关闭的工单");
+            List<List<Long>> lists = Lists.partition(workOrders, 1000);
+            log.info("关闭3天前未关闭的工单");
             lists.forEach(ids -> {
                 workOrderMapper.update(null, Wrappers.lambdaUpdate(WorkOrder.class)
                         .set(WorkOrder::getStatus, WorkOrder.Status.close)

+ 12 - 4
netflix-web/src/main/java/com/cyksj/web/controller/manage/sys/WorkOrderController.java

@@ -38,7 +38,7 @@ import java.util.Optional;
 
 /*
  *项目名: netflix
- *文件名: WorkOrderController
+ *文件名: r
  *创建者: JavaZou
  *创建时间:2023/4/19 15:08
  */
@@ -62,9 +62,13 @@ public class WorkOrderController {
 
 	@GetMapping("/get")
 	@SaCheckPermission("workOrder:view")
-	public Result<SearchResult<WorkOrderView>> getWorkOrderList(String nickname) {
+	public Result<SearchResult<WorkOrderView>> getWorkOrderList(String nickname, Integer feedbackNum) {
 		long adminId = StpUtil.getLoginIdAsLong();
 		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+		if (feedbackNum != null) {
+			builder.put("feedback", String.format("wo.account in (select account from work_order group by account having count(*) >= %s)", feedbackNum));
+			builder.orderBy(WorkOrder::getAccount).asc();
+		}
 		//是不是客服
 		CmsUserVO isCustomer = beanSearcher.searchFirst(CmsUserVO.class, MapUtils.builder()
 				.field(CmsUserVO::getRoleNames, "客服").op(Operator.Contain)
@@ -98,10 +102,13 @@ public class WorkOrderController {
 	/**
 	 * 修改工单状态
 	 */
-	@PutMapping("/put/{id}")
+	@PutMapping("/put")
 	@SaCheckPermission("workOrder:updateStatus")
-	public Result<String> putWorkOrderStatus(@PathVariable Long id, WorkOrder.Status status) {
+	public Result<String> putWorkOrderStatus(@RequestBody WorkOrder dto) {
 		long adminId = StpUtil.getLoginIdAsLong();
+		Long id = dto.getId();
+		WorkOrder.Status status = dto.getStatus();
+		String remark = dto.getRemark();
 		WorkOrder workOrder = workOrderMapper.selectById(id);
 
 		if (workOrder == null) {
@@ -114,6 +121,7 @@ public class WorkOrderController {
 			workOrder.setCloseCustomerServiceId(adminId);
 		}
 		workOrder.setStatus(status);
+		workOrder.setRemark(remark);
 		workOrderMapper.updateById(workOrder);
 		return GatewayResponse.SUCCESS.newBuilder().toResult("处理成功");
 	}