测试任务流程-修复bug
This commit is contained in:
parent
dd0948e875
commit
cb3d91202a
@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* 序列化时 逗号拼接转数组 "0","1","2" -> ["0","1","2"]
|
||||
|
||||
@ -8,7 +8,7 @@ import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@SpringBootTest
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
class CpopMallWebApplicationTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@ -35,7 +35,7 @@ import java.util.Map;
|
||||
* @createTime 2023/11/01 18:15
|
||||
* @description 微信支付
|
||||
*/
|
||||
@SpringBootTest
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
public class CpopWxPayTests {
|
||||
|
||||
@Autowired
|
||||
@ -63,13 +63,13 @@ public class CpopWxPayTests {
|
||||
.setTotal(refund)
|
||||
.setCurrency("CNY");
|
||||
request.setSubMchid(wxPayService.getConfig().getSubMchId())
|
||||
.setTransactionId("4200002010202311202693854147")
|
||||
.setOutTradeNo("84052505520087040")
|
||||
.setTransactionId("4200002028202312069539269015")
|
||||
.setOutTradeNo("89825115260416000")
|
||||
//.setTransactionId(order.getOutOrderNo())
|
||||
//.setOutTradeNo(order.getId())
|
||||
.setNotifyUrl(wxPayProperties.getNotifyRefund())
|
||||
.setOutRefundNo(IdUtils.fastSimpleUUID())
|
||||
.setSubMchid("1659765332")
|
||||
.setSubMchid("1661807764")
|
||||
.setReason("接口测试退款")
|
||||
.setAmount(amount);
|
||||
WxPayRefundV3Result result = wxPayService.refundV3(request);
|
||||
@ -129,8 +129,8 @@ public class CpopWxPayTests {
|
||||
@Test
|
||||
public void getOrderInfo() throws WxPayException {
|
||||
WxPayConfig config = wxPayService.getConfig();
|
||||
config.setSubMchId("1659795861");
|
||||
WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder("4200002050202311175292231256", null);
|
||||
config.setSubMchId("1661807764");
|
||||
WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder("4200002028202312069539269015", null);
|
||||
System.out.println(wxPayOrderQueryResult);
|
||||
}
|
||||
|
||||
@ -143,8 +143,8 @@ public class CpopWxPayTests {
|
||||
@Test
|
||||
public void getSharingInfo() throws WxPayException {
|
||||
ProfitSharingQueryRequest profitSharingQueryRequest = new ProfitSharingQueryRequest();
|
||||
profitSharingQueryRequest.setOutOrderNo("84064193241784320").setTransactionId("4200002009202311209353972307");
|
||||
profitSharingQueryRequest.setSubMchId("1659765332");
|
||||
profitSharingQueryRequest.setOutOrderNo("89825238983995392").setTransactionId("4200002028202312069539269015");
|
||||
profitSharingQueryRequest.setSubMchId("1661807764");
|
||||
ProfitSharingQueryResult result = wxPayService.getProfitSharingService().profitSharingQuery(profitSharingQueryRequest);
|
||||
System.out.println(result.getResultCode());
|
||||
}
|
||||
@ -168,10 +168,10 @@ public class CpopWxPayTests {
|
||||
@Test
|
||||
public void profitSharingFinish() throws WxPayException {
|
||||
ProfitSharingFinishRequest profitSharingFinishRequest = new ProfitSharingFinishRequest();
|
||||
profitSharingFinishRequest.setTransactionId("4200002010202311202693854147");
|
||||
profitSharingFinishRequest.setOutOrderNo("84052505520087040");
|
||||
profitSharingFinishRequest.setTransactionId("4200002028202312069539269015");
|
||||
profitSharingFinishRequest.setOutOrderNo("89825115260416000");
|
||||
profitSharingFinishRequest.setDescription("结束分账");
|
||||
profitSharingFinishRequest.setSubMchId("1659765332");
|
||||
profitSharingFinishRequest.setSubMchId("1661807764");
|
||||
wxPayService.getProfitSharingService().profitSharingFinish(profitSharingFinishRequest);
|
||||
}
|
||||
|
||||
|
||||
@ -38,12 +38,19 @@ public class TaskAuditCommentsBo {
|
||||
/**
|
||||
* 任务评级(0:A;1:B;2:C;3:D;4:E)
|
||||
*/
|
||||
@ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)")
|
||||
private Integer taskRating;
|
||||
@ApiModelProperty("任务评级")
|
||||
private String taskRating;
|
||||
|
||||
/**
|
||||
* 任务权重
|
||||
*/
|
||||
@ApiModelProperty("任务权重(任务绩点)")
|
||||
private Integer taskWeight;
|
||||
|
||||
/**
|
||||
* 备注(不通过时可以写入备注)
|
||||
*/
|
||||
@ApiModelProperty("备注(不通过时可以写入备注)")
|
||||
private String remark;
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cpop.oam.business.bo;
|
||||
|
||||
import com.cpop.core.annontation.StringArrayConvert;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@ -37,6 +38,7 @@ public class TaskItemBo {
|
||||
/**
|
||||
* 测试转部署文件路径
|
||||
*/
|
||||
@StringArrayConvert
|
||||
@ApiModelProperty(value = "测试转部署文件路径")
|
||||
private String testToFinishUrl;
|
||||
}
|
||||
|
||||
@ -93,8 +93,6 @@ public class TaskTechnologyController {
|
||||
/**
|
||||
* 技术模块-任务归档-获取任务归档分页
|
||||
*
|
||||
* @param subject 主体
|
||||
* @param taskContent 任务内容
|
||||
* @author DB
|
||||
* @since 2023-11-30 21:11:47
|
||||
*/
|
||||
|
||||
@ -72,7 +72,12 @@ public class Task extends BaseEntity implements Serializable {
|
||||
/**
|
||||
* 任务评级(0:A;1:B;2:C;3:D;4:E)
|
||||
*/
|
||||
private Integer taskRating;
|
||||
private String taskRating;
|
||||
|
||||
/**
|
||||
* 记录员工id
|
||||
*/
|
||||
private String recordStaffId;
|
||||
|
||||
/**
|
||||
* 附件地址
|
||||
|
||||
@ -48,11 +48,6 @@ public class TaskDemand extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private String storeId;
|
||||
|
||||
/**
|
||||
* 记录员工id
|
||||
*/
|
||||
private String recordStaffId;
|
||||
|
||||
/**
|
||||
* 签约图片
|
||||
*/
|
||||
|
||||
@ -58,11 +58,6 @@ public class TaskWorkOrder extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private String phoneNumber;
|
||||
|
||||
/**
|
||||
* 记录员工id
|
||||
*/
|
||||
private String recordStaffId;
|
||||
|
||||
/**
|
||||
* 办结时间
|
||||
*/
|
||||
|
||||
@ -69,14 +69,15 @@ public class TaskDemandServiceImpl extends ServiceImpl<TaskDemandMapper, TaskDem
|
||||
break;
|
||||
// 待领取
|
||||
case 1:
|
||||
queryWrapper.and(TASK.TASK_STATUS.eq(1));
|
||||
// 处理中
|
||||
queryWrapper.and(TASK.TASK_STATUS.in(1));
|
||||
break;
|
||||
// 处理中
|
||||
case 2:
|
||||
queryWrapper.and(TASK.TASK_STATUS.in(2, 4));
|
||||
break;
|
||||
// 已完成
|
||||
default:
|
||||
queryWrapper.and(TASK.TASK_STATUS.in(3, 6));
|
||||
queryWrapper.and(TASK.TASK_STATUS.in(8, 9));
|
||||
}
|
||||
} else {
|
||||
queryWrapper.and(TASK.TASK_STATUS.eq(0));
|
||||
@ -88,7 +89,6 @@ public class TaskDemandServiceImpl extends ServiceImpl<TaskDemandMapper, TaskDem
|
||||
.select(TASK_DEMAND.ID,
|
||||
TASK_DEMAND.BRAND_ID,
|
||||
TASK_DEMAND.STORE_ID,
|
||||
TASK_DEMAND.RECORD_STAFF_ID,
|
||||
TASK_DEMAND.CREATE_TIME,
|
||||
TASK_DEMAND.UPDATE_USER_ID,
|
||||
TASK_DEMAND.UPDATE_TIME)
|
||||
@ -98,6 +98,7 @@ public class TaskDemandServiceImpl extends ServiceImpl<TaskDemandMapper, TaskDem
|
||||
.select(STORE.STORE_NAME)
|
||||
// 任务
|
||||
.select(TASK.TASK_CONTENT,
|
||||
TASK.RECORD_STAFF_ID,
|
||||
TASK.IS_URGENT,
|
||||
TASK.ATTACHMENT_URL,
|
||||
TASK.EXPECTED_COMPLETION_DATE,
|
||||
@ -138,11 +139,11 @@ public class TaskDemandServiceImpl extends ServiceImpl<TaskDemandMapper, TaskDem
|
||||
.limit(1)),
|
||||
// 任务接收员工
|
||||
item -> item.field(TaskDemandPageVo::getResponsibleStaffName).queryWrapper(responsibleStaffName -> {
|
||||
if (StringUtils.isNoneBlank(responsibleStaffName.getResponsibleStaffName())) {
|
||||
if (StringUtils.isNotBlank(responsibleStaffName.getResponsibleStaffId())) {
|
||||
return queryWrapper.create()
|
||||
.select(STAFF.NAME.as(TaskDemandPageVo::getResponsibleStaffName))
|
||||
.select(STAFF.NAME.as(TaskDemandPageVo::getResponsibleStaffId))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(responsibleStaffName.getResponsibleStaffName()));
|
||||
.where(STAFF.ID.eq(responsibleStaffName.getResponsibleStaffId()));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
@ -160,17 +161,16 @@ public class TaskDemandServiceImpl extends ServiceImpl<TaskDemandMapper, TaskDem
|
||||
public void insertTaskDemand(TaskDemandBo bo) {
|
||||
// 添加任务
|
||||
Task task = BeanUtils.mapToClass(bo, Task.class);
|
||||
// 当前操作员工
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
// 默认待审核
|
||||
task.setTaskStatus(0).setTaskItem(0).setTaskType(1);
|
||||
task.setTaskStatus(0).setTaskItem(0).setTaskType(1).setRecordStaffId(loginUserInfo.getString("id")).setSubject("果酱盒子");
|
||||
TaskService taskService = SpringUtils.getBean(TaskService.class);
|
||||
taskService.save(task);
|
||||
// 添加需求
|
||||
TaskDemand entity = new TaskDemand();
|
||||
BeanUtils.copyBeanProp(entity, bo);
|
||||
entity.setTaskId(task.getId());
|
||||
// 当前操作员工
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
entity.setRecordStaffId(loginUserInfo.getString("id"));
|
||||
this.save(entity);
|
||||
// 获取审核管理员手机号
|
||||
RedisService redisService = SpringUtils.getBean(RedisService.class);
|
||||
@ -188,7 +188,7 @@ public class TaskDemandServiceImpl extends ServiceImpl<TaskDemandMapper, TaskDem
|
||||
phoneList.add(loginUserInfo.getString("phoneNumber"));
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
.webHookSendText(WebHookKeyConstant.PRODUCT_BOT,
|
||||
phoneList,
|
||||
"==========您有一条新的需求任务需要审核==========" + "\n" + task.getTaskContent(),
|
||||
false);
|
||||
|
||||
@ -66,24 +66,23 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
@Override
|
||||
public Page<TaskArchivingPagVo> getTaskArchivingPage(TaskArchivingPagBo bo) {
|
||||
// 获取当前员工
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()),
|
||||
QueryWrapper.create()
|
||||
.select(TASK.ID,
|
||||
TASK.RESPONSIBLE_STAFF_ID,
|
||||
TASK.TASK_CONTENT,
|
||||
TASK.TASK_TYPE,
|
||||
TASK.TASK_RATING,
|
||||
TASK.TASK_WEIGHT,
|
||||
TASK.TASK_RECEIPT_TIME,
|
||||
TASK.TEST_TO_FINISH_URL,
|
||||
TASK.TO_TEST_TIME,
|
||||
TASK.TO_DEPLOY_TIME,
|
||||
TASK.COMPLETION_DATE,
|
||||
TASK.SUBJECT)
|
||||
.select(TASK_STAFF_GROUP.GRADE_POINT)
|
||||
.from(TASK)
|
||||
.leftJoin(TASK_STAFF_GROUP)
|
||||
.on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID))
|
||||
.where(TASK_STAFF_GROUP.STAFF_ID.eq(loginUserInfo.getString("id")))
|
||||
.and(TASK.TASK_STATUS.eq(bo.getIsFinish() ? 8 : 9).and(TASK.TASK_CONTENT.like(bo.getTaskContent())))
|
||||
.and(TASK.TASK_STATUS.eq(bo.getIsFinish() ? 9 : 8).and(TASK.TASK_CONTENT.like(bo.getTaskContent())))
|
||||
.and(TASK.SUBJECT.like(bo.getSubject())),
|
||||
TaskArchivingPagVo.class,
|
||||
// 负责人
|
||||
@ -98,8 +97,10 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
.select(groupConcat(STAFF.NAME).as(TaskArchivingPagVo::getTaskGroupStaffs))
|
||||
.from(STAFF)
|
||||
.leftJoin(TASK_STAFF_GROUP)
|
||||
.on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID))
|
||||
.where(TASK_STAFF_GROUP.STAFF_ID.eq(taskGroupStaffs.getId()))
|
||||
.on(TASK_STAFF_GROUP.STAFF_ID.eq(STAFF.ID))
|
||||
.leftJoin(TASK)
|
||||
.on(TASK.ID.eq(TASK_STAFF_GROUP.TASK_ID))
|
||||
.where(TASK.ID.eq(taskGroupStaffs.getId()))
|
||||
.groupBy(TASK.ID)));
|
||||
}
|
||||
|
||||
@ -141,7 +142,9 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
TASK.TASK_CONTENT,
|
||||
TASK.ATTACHMENT_URL,
|
||||
TASK.TASK_RATING,
|
||||
TASK.CREATE_TIME)
|
||||
TASK.CREATE_TIME,
|
||||
TASK.RECORD_STAFF_ID,
|
||||
TASK.TASK_WEIGHT)
|
||||
.select(TASK_STAFF_GROUP.GRADE_POINT)
|
||||
.from(TASK)
|
||||
.leftJoin(TASK_STAFF_GROUP)
|
||||
@ -152,18 +155,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
.orderBy(TASK.IS_URGENT.desc(), TASK.CREATE_TIME.desc()),
|
||||
TaskToBeClaimedPageVo.class,
|
||||
// 对接人
|
||||
item -> item.field(TaskToBeClaimedPageVo::getDockingStaff).queryWrapper(dockingStaff -> {
|
||||
if (dockingStaff.getTaskType() == 1) {
|
||||
return queryChain().select(STAFF.NAME.as(TaskToBeClaimedPageVo::getDockingStaff))
|
||||
.select(STAFF.NAME)
|
||||
item -> item.field(TaskToBeClaimedPageVo::getDockingStaff).queryWrapper(dockingStaff ->
|
||||
queryChain().select(STAFF.NAME.as(TaskToBeClaimedPageVo::getDockingStaff))
|
||||
.from(STAFF)
|
||||
.leftJoin(TASK_DEMAND)
|
||||
.on(TASK_DEMAND.RECORD_STAFF_ID.eq(STAFF.ID))
|
||||
.where(TASK_DEMAND.TASK_ID.eq(dockingStaff.getId()));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}));
|
||||
.where(STAFF.ID.eq(dockingStaff.getRecordStaffId()))
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -175,9 +171,10 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
*/
|
||||
@Override
|
||||
public void insertIterationTask(TaskIterationBo bo) {
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
Task entity = BeanUtils.mapToClass(bo, Task.class);
|
||||
// 默认待审核 默认开发中
|
||||
entity.setTaskStatus(0).setTaskItem(0).setTaskType(0);
|
||||
entity.setTaskStatus(0).setTaskItem(0).setTaskType(0).setRecordStaffId(loginUserInfo.getString("id"));
|
||||
this.save(entity);
|
||||
// 获取审核管理员手机号
|
||||
RedisService redisService = SpringUtils.getBean(RedisService.class);
|
||||
@ -221,26 +218,26 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
// 如果任务没有设置预期完成时间,则按照任务评级进行设置默认
|
||||
if (task.getExpectedCompletionDate() == null) {
|
||||
// 获取任务评级
|
||||
Integer taskRating = task.getTaskRating();
|
||||
String taskRating = task.getTaskRating();
|
||||
LocalDate now = LocalDate.now();
|
||||
switch (taskRating) {
|
||||
case 0:
|
||||
case "A":
|
||||
// 30天
|
||||
task.setExpectedCompletionDate(now.plusDays(30));
|
||||
break;
|
||||
case 1:
|
||||
case "B":
|
||||
// 21天
|
||||
task.setExpectedCompletionDate(now.plusDays(21));
|
||||
break;
|
||||
case 2:
|
||||
case "C":
|
||||
// 15天
|
||||
task.setExpectedCompletionDate(now.plusDays(15));
|
||||
break;
|
||||
case 3:
|
||||
case "D":
|
||||
// 7天
|
||||
task.setExpectedCompletionDate(now.plusDays(7));
|
||||
break;
|
||||
case 4:
|
||||
case "E":
|
||||
// 3天
|
||||
task.setExpectedCompletionDate(now.plusDays(3));
|
||||
break;
|
||||
@ -261,28 +258,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
this.updateById(task);
|
||||
// 添加主要负责人组
|
||||
TaskStaffGroup taskStaffGroup = new TaskStaffGroup();
|
||||
int taskRatingPoint;
|
||||
// 评级换绩点
|
||||
switch (task.getTaskRating()) {
|
||||
case 0:
|
||||
taskRatingPoint = 200;
|
||||
break;
|
||||
case 1:
|
||||
taskRatingPoint = 100;
|
||||
break;
|
||||
case 2:
|
||||
taskRatingPoint = 80;
|
||||
break;
|
||||
case 3:
|
||||
taskRatingPoint = 40;
|
||||
break;
|
||||
case 4:
|
||||
taskRatingPoint = 20;
|
||||
break;
|
||||
default:
|
||||
taskRatingPoint = 10;
|
||||
}
|
||||
taskStaffGroup.setStaffId(task.getResponsibleStaffId()).setTaskId(id).setGradePoint(taskRatingPoint);
|
||||
taskStaffGroup.setStaffId(task.getResponsibleStaffId()).setTaskId(id).setGradePoint(task.getTaskWeight());
|
||||
SpringUtils.getBean(TaskStaffGroupService.class).save(taskStaffGroup);
|
||||
// 通知所有人
|
||||
try {
|
||||
@ -314,7 +290,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.PRODUCT_BOT,
|
||||
new ArrayList<>(),
|
||||
"==========任务审核通过==========" + "\n" + entity.getTaskContent(),
|
||||
"==========任务审核通过==========" + "\n" + this.getById(bo.getId()).getTaskContent(),
|
||||
true);
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException("发送任务审核通过通知失败!");
|
||||
@ -343,16 +319,16 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
//个人绩点
|
||||
.select(TASK_STAFF_GROUP.GRADE_POINT)
|
||||
.from(TASK)
|
||||
// 员工表
|
||||
.leftJoin(STAFF)
|
||||
.on(STAFF.ID.eq(TASK.RESPONSIBLE_STAFF_ID))
|
||||
// 任务员工组
|
||||
.leftJoin(TASK_STAFF_GROUP)
|
||||
.on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID))
|
||||
// 员工表
|
||||
.leftJoin(STAFF)
|
||||
.on(STAFF.ID.eq(TASK_STAFF_GROUP.STAFF_ID))
|
||||
.where(TASK.TASK_TYPE.in(0, 1))
|
||||
//进行中与已完成的任务
|
||||
.and(TASK.TASK_STATUS.in(2, 3, 4, 6))
|
||||
.and(STAFF.ID.eq(SecurityUtils.getInstance().getLoginUserInfo().getString("id")))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(SecurityUtils.getInstance().getLoginUserInfo().getString("id")))
|
||||
.orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()),
|
||||
PersonTaskPageVo.class);
|
||||
}
|
||||
@ -385,14 +361,13 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
} else {
|
||||
task.setTaskStatus(3);
|
||||
}
|
||||
task.setToTestTime(LocalDateTime.now());
|
||||
task.setToTestTime(LocalDateTime.now()).setTaskItem(1);
|
||||
}
|
||||
if (bo.getTaskItem() == 1) {
|
||||
if (StringUtils.isBlank(bo.getTestToFinishUrl())) {
|
||||
throw new ServiceException("当前任务未提交测试部署相关文件,不允许转交");
|
||||
}
|
||||
task.setToDeployTime(LocalDateTime.now())
|
||||
.setTaskStatus(8);
|
||||
task.setToDeployTime(LocalDateTime.now()).setTestToFinishUrl(bo.getTestToFinishUrl()).setTaskStatus(8).setTaskItem(2);
|
||||
}
|
||||
this.updateById(task);
|
||||
}
|
||||
@ -621,7 +596,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
@Override
|
||||
public String getTaskDailyPaper(TaskDailyPaperBo bo) {
|
||||
//获取当前日期的任务
|
||||
List<Task> taskList = this.list(QueryWrapper.create().select(distinct(TASK.TASK_STATUS, TASK.ID, TASK.TASK_RECEIPT_TIME, TASK.TASK_CONTENT, TASK.EXPECTED_COMPLETION_DATE))
|
||||
List<Task> taskList = this.list(QueryWrapper.create().select(distinct(TASK.TASK_STATUS,TASK.RESPONSIBLE_STAFF_ID,TASK.TASK_PROGRESS, TASK.ID, TASK.TASK_RECEIPT_TIME, TASK.TASK_CONTENT, TASK.EXPECTED_COMPLETION_DATE))
|
||||
.leftJoin(TASK_STAFF_GROUP).on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID))
|
||||
.and(dateFormat(TASK.TASK_RECEIPT_TIME, "%Y-%m-%d").le(bo.getDate()))
|
||||
.and(TASK.EXPECTED_COMPLETION_DATE.ge(bo.getDate()))
|
||||
@ -690,15 +665,15 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
LocalDate firstDay = now.with(TemporalAdjusters.firstDayOfMonth());
|
||||
// 获取目标月的最后一天
|
||||
LocalDate lastDay = now.with(TemporalAdjusters.lastDayOfMonth());
|
||||
List<TaskIndividualGpaVo.IndividualGpa> individualGpas = this.listAs(QueryWrapper.create()
|
||||
.select(TASK.ID, TASK.TASK_CONTENT,TASK.TASK_STATUS)
|
||||
List<TaskIndividualGpaDetailVo> individualGpas = this.listAs(QueryWrapper.create()
|
||||
.select(TASK.ID, TASK.TASK_CONTENT, TASK.TASK_STATUS)
|
||||
.select(TASK_STAFF_GROUP.GRADE_POINT, TASK_STAFF_GROUP.REMARK)
|
||||
.leftJoin(TASK_STAFF_GROUP).on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID))
|
||||
.where(TASK.TASK_STATUS.in(2, 3, 4, 5, 6, 7, 8, 9))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(loginUserInfo.getString("id")))
|
||||
//获取当月绩点
|
||||
.and(TASK.COMPLETION_DATE.between(firstDay, lastDay))
|
||||
, TaskIndividualGpaVo.IndividualGpa.class);
|
||||
//.and(dateFormat(TASK.TASK_RECEIPT_TIME, "%Y-%m-%d").between(firstDay, lastDay))
|
||||
, TaskIndividualGpaDetailVo.class);
|
||||
TaskIndividualGpaVo vo = new TaskIndividualGpaVo();
|
||||
if (individualGpas.isEmpty()) {
|
||||
return vo;
|
||||
@ -710,10 +685,10 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
||||
vo.setDutyVo(workOrderDuty);
|
||||
//已完成
|
||||
vo.setHaveFinished(individualGpas.stream().filter(item -> item.getTaskStatus() == 8 || item.getTaskStatus() == 9)
|
||||
.mapToInt(TaskIndividualGpaVo.IndividualGpa::getGradePoint).sum());
|
||||
.mapToInt(TaskIndividualGpaDetailVo::getGradePoint).sum());
|
||||
//待完成
|
||||
vo.setToBeCompleted(individualGpas.stream().filter(item -> item.getTaskStatus() != 8 && item.getTaskStatus() != 9)
|
||||
.mapToInt(TaskIndividualGpaVo.IndividualGpa::getGradePoint).sum());
|
||||
.mapToInt(TaskIndividualGpaDetailVo::getGradePoint).sum());
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,31 +41,33 @@ import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STA
|
||||
*/
|
||||
@Service("taskStaffGroupService")
|
||||
public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper, TaskStaffGroup>
|
||||
implements TaskStaffGroupService {
|
||||
implements TaskStaffGroupService {
|
||||
|
||||
/**
|
||||
* 技术模块-今日事务-任务成员组列
|
||||
* @author DB
|
||||
* @since 2023/12/04
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @return List<TaskStaffGroupVo>
|
||||
* @author DB
|
||||
* @since 2023/12/04
|
||||
*/
|
||||
@Override
|
||||
public List<TaskStaffGroupVo> getTaskStaffGroupList(String taskId) {
|
||||
return this.listAs(QueryWrapper.create()
|
||||
.select(TASK_STAFF_GROUP.ALL_COLUMNS)
|
||||
.select(STAFF.NAME.as(TaskStaffGroupVo::getStaffName))
|
||||
.from(TASK_STAFF_GROUP)
|
||||
.leftJoin(STAFF)
|
||||
.on(STAFF.ID.eq(TASK_STAFF_GROUP.STAFF_ID))
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(taskId)), TaskStaffGroupVo.class);
|
||||
.select(TASK_STAFF_GROUP.ALL_COLUMNS)
|
||||
.select(STAFF.NAME.as(TaskStaffGroupVo::getStaffName))
|
||||
.from(TASK_STAFF_GROUP)
|
||||
.leftJoin(STAFF)
|
||||
.on(STAFF.ID.eq(TASK_STAFF_GROUP.STAFF_ID))
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(taskId)), TaskStaffGroupVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 技术模块-今日事务-新增任务小组成员
|
||||
*
|
||||
* @param bo 请求参数
|
||||
* @author DB
|
||||
* @since 2023/12/04
|
||||
* @param bo 请求参数
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ -80,15 +82,15 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
}
|
||||
// 查询当前添加的员工是否存在在此任务中
|
||||
long count = this.count(QueryWrapper.create()
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getStaffId())));
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getStaffId())));
|
||||
if (count > 0) {
|
||||
throw new ServiceException("当前员工已存在任务中,请添加其他员工或调整此员工绩点");
|
||||
}
|
||||
// 获取此任务下关联的主要负责人信息
|
||||
TaskStaffGroup responsibleStaff = this.getOne(QueryWrapper.create()
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId())));
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId())));
|
||||
int balance = responsibleStaff.getGradePoint() - bo.getGradePoint();
|
||||
if (balance < 0) {
|
||||
throw new ServiceException("主要负责人绩点不足,请重新调整!");
|
||||
@ -107,7 +109,8 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
phoneList.add(staffInfo.getPhoneNumber());
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList,
|
||||
loginUserInfo.getString("name") + "您的绩点调整为" + responsibleStaff.getGradePoint() + "\n" + staffInfo.getName()
|
||||
"任务:" + task.getTaskContent() + "\n" +
|
||||
loginUserInfo.getString("name") + "您的绩点调整为" + responsibleStaff.getGradePoint() + "\n" + staffInfo.getName()
|
||||
+ "您新加入任务:" + task.getTaskContent() + "绩点为:" + bo.getGradePoint(),
|
||||
false);
|
||||
} catch (IOException e) {
|
||||
@ -117,9 +120,10 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
|
||||
/**
|
||||
* 技术模块-今日事务-修改员工任务绩点
|
||||
*
|
||||
* @param bo 请求参数
|
||||
* @author DB
|
||||
* @since 2023/12/04
|
||||
* @param bo 请求参数
|
||||
*/
|
||||
@Override
|
||||
public void updateStaffGradePoint(TaskStaffGroupBo bo) {
|
||||
@ -138,8 +142,8 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
}
|
||||
// 获取此任务下关联的主要负责人信息
|
||||
TaskStaffGroup responsibleStaffTaskInfo = this.getOne(QueryWrapper.create()
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId())));
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId())));
|
||||
// 自身原绩点
|
||||
TaskStaffGroup oldStaffTaskInfo = this.getById(bo.getId());
|
||||
// 增加
|
||||
@ -162,10 +166,10 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
}
|
||||
// 更新绩点
|
||||
this.updateChain()
|
||||
.set(TASK_STAFF_GROUP.GRADE_POINT, bo.getGradePoint())
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getStaffId()))
|
||||
.update();
|
||||
.set(TASK_STAFF_GROUP.GRADE_POINT, bo.getGradePoint())
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getStaffId()))
|
||||
.update();
|
||||
// 企微通知绩点调整人员
|
||||
List<String> phoneList = new ArrayList<String>();
|
||||
phoneList.add(loginUserInfo.getString("phoneNumber"));
|
||||
@ -174,7 +178,8 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
phoneList.add(staffInfo.getPhoneNumber());
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList,
|
||||
loginUserInfo.getString("name") + "您的绩点调整为" + responsibleStaffTaskInfo.getGradePoint() + "\n"
|
||||
"任务:" + task.getTaskContent() + "\n" +
|
||||
loginUserInfo.getString("name") + "您的绩点调整为" + responsibleStaffTaskInfo.getGradePoint() + "\n"
|
||||
+ staffInfo.getName() + "您的绩点调整为:" + bo.getGradePoint(),
|
||||
false);
|
||||
} catch (IOException e) {
|
||||
@ -184,9 +189,10 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
|
||||
/**
|
||||
* 技术模块-今日事务-删除成员组
|
||||
*
|
||||
* @param id 任务组id
|
||||
* @author DB
|
||||
* @since 2023/12/04
|
||||
* @param id 任务组id
|
||||
*/
|
||||
@Override
|
||||
public void removeTaskStaffGroupById(String id) {
|
||||
@ -204,8 +210,8 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
|
||||
}
|
||||
// 添加绩点给主要负责人
|
||||
TaskStaffGroup responsibleStaffInfo = this.getOne(QueryWrapper.create()
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(taskStaffGroup.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId())));
|
||||
.where(TASK_STAFF_GROUP.TASK_ID.eq(taskStaffGroup.getTaskId()))
|
||||
.and(TASK_STAFF_GROUP.STAFF_ID.eq(task.getResponsibleStaffId())));
|
||||
responsibleStaffInfo.setGradePoint(responsibleStaffInfo.getGradePoint() + taskStaffGroup.getGradePoint());
|
||||
this.updateById(responsibleStaffInfo);
|
||||
this.removeById(id);
|
||||
|
||||
@ -56,6 +56,7 @@ import static com.cpop.oam.business.entity.table.TaskWorkOrderRecordTableDef.TAS
|
||||
import static com.cpop.oam.business.entity.table.TaskWorkOrderTableDef.TASK_WORK_ORDER;
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.system.business.entity.table.StoreTableDef.STORE;
|
||||
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.core.service.RedisService;
|
||||
|
||||
@ -68,68 +69,68 @@ import com.cpop.core.service.RedisService;
|
||||
@Slf4j
|
||||
@Service("taskWorkOrderService")
|
||||
public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, TaskWorkOrder>
|
||||
implements TaskWorkOrderService {
|
||||
implements TaskWorkOrderService {
|
||||
|
||||
@Autowired
|
||||
private Scheduler scheduler;
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-接收/处理/暂停中
|
||||
*
|
||||
* @return com.cpop.core.base.R<com.mybatisflex.core.paginate.Page < com.cpop.oam.business.vo.TaskWorkOrderPageVo>>
|
||||
* @author DB
|
||||
* @since 2023/09/18 17:18
|
||||
* @return com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.oam.business.vo.TaskWorkOrderPageVo>>
|
||||
*/
|
||||
@Override
|
||||
public TaskWorkOrderReceiveDealPauseVo receiveDealPause() {
|
||||
// 获取工单
|
||||
List<TaskWorkOrderReceiveDealPauseDto> dtoList = this.mapper.selectListByQueryAs(QueryWrapper.create()
|
||||
// 工单
|
||||
.select(TASK_WORK_ORDER.ID,
|
||||
TASK_WORK_ORDER.PHONE_NUMBER,
|
||||
TASK_WORK_ORDER.RECORD_STAFF_ID,
|
||||
TASK_WORK_ORDER.CREATE_TIME.as("createTime"),
|
||||
TASK_WORK_ORDER.RECEIVING_TIME,
|
||||
TASK_WORK_ORDER.PAUSE_STAFF_ID,
|
||||
TASK_WORK_ORDER.PAUSE_RECORD_TIME,
|
||||
TASK_WORK_ORDER.PAUSE_EXPIRE_TIME)
|
||||
// 任务
|
||||
.select(TASK.TASK_CONTENT, TASK.TASK_STATUS, TASK.RESPONSIBLE_STAFF_ID, TASK.TASK_RECEIPT_TIME)
|
||||
// 品牌
|
||||
.select(BRAND.BRAND_NAME)
|
||||
// 校区
|
||||
.select(STORE.STORE_NAME)
|
||||
.from(TASK_WORK_ORDER)
|
||||
.leftJoin(TASK)
|
||||
.on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID))
|
||||
.leftJoin(BRAND)
|
||||
.on(BRAND.ID.eq(TASK_WORK_ORDER.BRAND_ID))
|
||||
.leftJoin(STORE)
|
||||
.on(STORE.ID.eq(TASK_WORK_ORDER.STORE_ID))
|
||||
// 工单
|
||||
.where(TASK.TASK_TYPE.eq(2))
|
||||
.and(TASK.TASK_STATUS.in(1, 2, 4, 5, 7)),
|
||||
TaskWorkOrderReceiveDealPauseDto.class,
|
||||
// 提交人
|
||||
item -> item.field(TaskWorkOrderReceiveDealPauseDto::getRecordStaffName)
|
||||
.queryWrapper(recordStaff -> queryChain().select(STAFF.NAME.as("recordStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(recordStaff.getRecordStaffId()))),
|
||||
// 负责人
|
||||
item -> item.field(TaskWorkOrderReceiveDealPauseDto::getResponsibleStaffName)
|
||||
.queryWrapper(responsibleStaff -> queryChain().select(STAFF.NAME.as("responsibleStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(StringUtils.isNotBlank(responsibleStaff.getResponsibleStaffId())
|
||||
? responsibleStaff.getResponsibleStaffId()
|
||||
: "-1"))),
|
||||
// 暂停人
|
||||
item -> item.field(TaskWorkOrderReceiveDealPauseDto::getPauseStaffName)
|
||||
.queryWrapper(pauseStaff -> queryChain().select(STAFF.NAME.as("pauseStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(
|
||||
StringUtils.isNotBlank(pauseStaff.getPauseStaffId()) ? pauseStaff.getPauseStaffId() : "-1"))));
|
||||
// 工单
|
||||
.select(TASK_WORK_ORDER.ID,
|
||||
TASK_WORK_ORDER.PHONE_NUMBER,
|
||||
TASK_WORK_ORDER.CREATE_TIME.as("createTime"),
|
||||
TASK_WORK_ORDER.RECEIVING_TIME,
|
||||
TASK_WORK_ORDER.PAUSE_STAFF_ID,
|
||||
TASK_WORK_ORDER.PAUSE_RECORD_TIME,
|
||||
TASK_WORK_ORDER.PAUSE_EXPIRE_TIME)
|
||||
// 任务
|
||||
.select(TASK.TASK_CONTENT, TASK.TASK_STATUS, TASK.RESPONSIBLE_STAFF_ID, TASK.TASK_RECEIPT_TIME, TASK.RECORD_STAFF_ID)
|
||||
// 品牌
|
||||
.select(BRAND.BRAND_NAME)
|
||||
// 校区
|
||||
.select(STORE.STORE_NAME)
|
||||
.from(TASK_WORK_ORDER)
|
||||
.leftJoin(TASK)
|
||||
.on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID))
|
||||
.leftJoin(BRAND)
|
||||
.on(BRAND.ID.eq(TASK_WORK_ORDER.BRAND_ID))
|
||||
.leftJoin(STORE)
|
||||
.on(STORE.ID.eq(TASK_WORK_ORDER.STORE_ID))
|
||||
// 工单
|
||||
.where(TASK.TASK_TYPE.eq(2))
|
||||
.and(TASK.TASK_STATUS.in(1, 2, 4, 5, 7)),
|
||||
TaskWorkOrderReceiveDealPauseDto.class,
|
||||
// 提交人
|
||||
item -> item.field(TaskWorkOrderReceiveDealPauseDto::getRecordStaffName)
|
||||
.queryWrapper(recordStaff -> queryChain().select(STAFF.NAME.as("recordStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(recordStaff.getRecordStaffId()))),
|
||||
// 负责人
|
||||
item -> item.field(TaskWorkOrderReceiveDealPauseDto::getResponsibleStaffName)
|
||||
.queryWrapper(responsibleStaff -> queryChain().select(STAFF.NAME.as("responsibleStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(StringUtils.isNotBlank(responsibleStaff.getResponsibleStaffId())
|
||||
? responsibleStaff.getResponsibleStaffId()
|
||||
: "-1"))),
|
||||
// 暂停人
|
||||
item -> item.field(TaskWorkOrderReceiveDealPauseDto::getPauseStaffName)
|
||||
.queryWrapper(pauseStaff -> queryChain().select(STAFF.NAME.as("pauseStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(
|
||||
StringUtils.isNotBlank(pauseStaff.getPauseStaffId()) ? pauseStaff.getPauseStaffId() : "-1"))));
|
||||
// 分组过滤
|
||||
Map<Integer, List<TaskWorkOrderReceiveDealPauseDto>> taskStatusMap =
|
||||
dtoList.stream().collect(Collectors.groupingBy(TaskWorkOrderReceiveDealPauseDto::getTaskStatus));
|
||||
dtoList.stream().collect(Collectors.groupingBy(TaskWorkOrderReceiveDealPauseDto::getTaskStatus));
|
||||
TaskWorkOrderReceiveDealPauseVo taskWorkOrderReceiveDealPauseVo = new TaskWorkOrderReceiveDealPauseVo();
|
||||
taskStatusMap.forEach((key, value) -> {
|
||||
switch (key) {
|
||||
@ -138,7 +139,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
// 接收逾期
|
||||
case 7:
|
||||
List<TaskWorkOrderReceiveDealPauseVo.Receive> receiveList =
|
||||
BeanUtils.mapToList(taskStatusMap.get(key), TaskWorkOrderReceiveDealPauseVo.Receive.class);
|
||||
BeanUtils.mapToList(taskStatusMap.get(key), TaskWorkOrderReceiveDealPauseVo.Receive.class);
|
||||
if (taskWorkOrderReceiveDealPauseVo.getReceiveList() == null) {
|
||||
taskWorkOrderReceiveDealPauseVo.setReceiveList(receiveList);
|
||||
} else {
|
||||
@ -150,7 +151,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
// 逾期
|
||||
case 4:
|
||||
List<TaskWorkOrderReceiveDealPauseVo.Deal> dealList =
|
||||
BeanUtils.mapToList(taskStatusMap.get(key), TaskWorkOrderReceiveDealPauseVo.Deal.class);
|
||||
BeanUtils.mapToList(taskStatusMap.get(key), TaskWorkOrderReceiveDealPauseVo.Deal.class);
|
||||
if (taskWorkOrderReceiveDealPauseVo.getDealList() == null) {
|
||||
taskWorkOrderReceiveDealPauseVo.setDealList(dealList);
|
||||
} else {
|
||||
@ -160,7 +161,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
default:
|
||||
// 暂停中
|
||||
List<TaskWorkOrderReceiveDealPauseVo.Pause> pauseList =
|
||||
BeanUtils.mapToList(taskStatusMap.get(key), TaskWorkOrderReceiveDealPauseVo.Pause.class);
|
||||
BeanUtils.mapToList(taskStatusMap.get(key), TaskWorkOrderReceiveDealPauseVo.Pause.class);
|
||||
taskWorkOrderReceiveDealPauseVo.setPauseList(pauseList);
|
||||
}
|
||||
});
|
||||
@ -169,23 +170,25 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-获取当天值班人员
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-11-29 14:01:03
|
||||
*/
|
||||
@Override
|
||||
public WorkOrderDutyVo getWorkOrderDutyStaff() {
|
||||
return SpringUtils.getBean(DutyService.class)
|
||||
.getMapper()
|
||||
.selectOneWithRelationsByQueryAs(
|
||||
QueryWrapper.create()
|
||||
.select(DUTY.SERVICE_STAFF_ID, DUTY.TECHNOLOGY_STAFF_ID, DUTY.DUTY_DATE)
|
||||
.from(DUTY)
|
||||
.where(DUTY.DUTY_DATE.eq(DateUtils.getDate())),
|
||||
WorkOrderDutyVo.class);
|
||||
.getMapper()
|
||||
.selectOneWithRelationsByQueryAs(
|
||||
QueryWrapper.create()
|
||||
.select(DUTY.SERVICE_STAFF_ID, DUTY.TECHNOLOGY_STAFF_ID, DUTY.DUTY_DATE)
|
||||
.from(DUTY)
|
||||
.where(DUTY.DUTY_DATE.eq(DateUtils.getDate())),
|
||||
WorkOrderDutyVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-已办结分页列表
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-11-29 14:35:08
|
||||
*/
|
||||
@ -193,25 +196,26 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
public Page<TaskWorkOrderPageVo> finishWorkOrderPage() {
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()),
|
||||
QueryWrapper.create()
|
||||
.select(TASK_WORK_ORDER.FINISH_STAFF_ID, TASK_WORK_ORDER.FINISH_TIME)
|
||||
.select(TASK.TASK_CONTENT)
|
||||
.from(TASK_WORK_ORDER)
|
||||
.leftJoin(TASK)
|
||||
.on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID))
|
||||
// 工单
|
||||
.where(TASK.TASK_TYPE.eq(2))
|
||||
.and(TASK.TASK_STATUS.in(3, 6)),
|
||||
TaskWorkOrderPageVo.class,
|
||||
item -> item.field(TaskWorkOrderPageVo::getFinishStaffName)
|
||||
.queryWrapper(finishStaff -> queryChain().select(STAFF.NAME.as("finishStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(finishStaff.getFinishStaffId()))));
|
||||
QueryWrapper.create()
|
||||
.select(TASK_WORK_ORDER.FINISH_STAFF_ID, TASK_WORK_ORDER.FINISH_TIME)
|
||||
.select(TASK.TASK_CONTENT)
|
||||
.from(TASK_WORK_ORDER)
|
||||
.leftJoin(TASK)
|
||||
.on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID))
|
||||
// 工单
|
||||
.where(TASK.TASK_TYPE.eq(2))
|
||||
.and(TASK.TASK_STATUS.in(3, 6)),
|
||||
TaskWorkOrderPageVo.class,
|
||||
item -> item.field(TaskWorkOrderPageVo::getFinishStaffName)
|
||||
.queryWrapper(finishStaff -> queryChain().select(STAFF.NAME.as("finishStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(finishStaff.getFinishStaffId()))));
|
||||
}
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-新增工单
|
||||
* @param bo 请求参数
|
||||
*
|
||||
* @param bo 请求参数
|
||||
* @author DB
|
||||
* @since 2023/5/30 16:53
|
||||
**/
|
||||
@ -227,13 +231,16 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
// 添加任务
|
||||
Task task = new Task();
|
||||
BeanUtils.copyBeanProp(task, bo);
|
||||
// 读取员工信息
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
// 默认待接受
|
||||
task.setTaskStatus(1)
|
||||
// 默认开发中
|
||||
.setTaskItem(0)
|
||||
.setTaskWeight(10)
|
||||
// 工单不参与评级
|
||||
.setTaskRating(-1)
|
||||
.setTaskRating("N")
|
||||
.setRecordStaffId(loginUserInfo.getString("id"))
|
||||
.setResponsibleStaffId(duty.getTechnologyStaffId());
|
||||
TaskService taskService = SpringUtils.getBean(TaskService.class);
|
||||
taskService.save(task);
|
||||
@ -241,9 +248,6 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
TaskWorkOrder entity = new TaskWorkOrder();
|
||||
BeanUtils.copyBeanProp(entity, bo);
|
||||
entity.setTaskId(task.getId());
|
||||
// 读取员工信息
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
entity.setRecordStaffId(loginUserInfo.getString("id"));
|
||||
this.save(entity);
|
||||
// 添加一个0绩点
|
||||
TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class);
|
||||
@ -253,9 +257,9 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
// 添加工单记录
|
||||
TaskWorkOrderRecord workOrderRecord = new TaskWorkOrderRecord();
|
||||
workOrderRecord.setTaskWorkOrderId(entity.getId())
|
||||
.setRecordText(bo.getTaskContent())
|
||||
.setRecordStaffId(loginUserInfo.getString("id"))
|
||||
.setAttachmentUrl(bo.getAttachmentUrl());
|
||||
.setRecordText(bo.getTaskContent())
|
||||
.setRecordStaffId(loginUserInfo.getString("id"))
|
||||
.setAttachmentUrl(bo.getAttachmentUrl());
|
||||
SpringUtils.getBean(TaskWorkOrderRecordService.class).save(workOrderRecord);
|
||||
// 通知值班员工
|
||||
StaffService staffService = SpringUtils.getBean(StaffService.class);
|
||||
@ -266,10 +270,10 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
phoneList.add(technologyStaffInfo.getPhoneNumber());
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
"==========您有一条新的工单需要处理==========\n" + task.getTaskContent(),
|
||||
false);
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
"==========您有一条新的工单需要处理==========\n" + task.getTaskContent(),
|
||||
false);
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException("发送消息通知失败!");
|
||||
}
|
||||
@ -280,10 +284,11 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
|
||||
/**
|
||||
* 开始或删除工单接收任务
|
||||
* @author DB
|
||||
*
|
||||
* @param workOrderId 工单id
|
||||
* @param isStart 是否是开始标识
|
||||
* @param dateTime 时间
|
||||
* @param isStart 是否是开始标识
|
||||
* @param dateTime 时间
|
||||
* @author DB
|
||||
* @since 2023-11-29 10:21:02
|
||||
*/
|
||||
private void startOrRemoveWorkOrderAcceptTask(String workOrderId, Boolean isStart, LocalDateTime dateTime) {
|
||||
@ -299,15 +304,15 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
String cron = quartzUtils.convertToCron(Date.from(localDateTime.atZone(zoneId).toInstant()));
|
||||
// 通过JobBuilder构建JobDetail实例,JobDetail规定其job只能是实现Job接口的实例
|
||||
JobDetail jobDetail = JobBuilder.newJob(WorkOrderAcceptOverTimeTask.class)
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.usingJobData("WorkOrderId", workOrderId)
|
||||
.build();
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.usingJobData("WorkOrderId", workOrderId)
|
||||
.build();
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
|
||||
// CronTrigger表达式触发器 继承于Trigger。TriggerBuilder 用于构建触发器实例
|
||||
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
.withIdentity(acceptEnums.getName() + workOrderId, acceptEnums.getGroup())
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
scheduler.scheduleJob(jobDetail, cronTrigger);
|
||||
} else {
|
||||
// 删除
|
||||
@ -320,10 +325,11 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
|
||||
/**
|
||||
* 生成工单超时任务
|
||||
* @author DB
|
||||
*
|
||||
* @param workOrderId 工单id
|
||||
* @param isUpdate 是否更新
|
||||
* @param dateTime 开始时间
|
||||
* @param isUpdate 是否更新
|
||||
* @param dateTime 开始时间
|
||||
* @author DB
|
||||
* @since 2023-11-29 16:09:02
|
||||
*/
|
||||
private void startOrUpdateWorkOrderOvertimeTask(String workOrderId, Boolean isUpdate, LocalDateTime dateTime) {
|
||||
@ -335,22 +341,22 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
String cron = quartzUtils.convertToCron(Date.from(localDateTime.atZone(zoneId).toInstant()));
|
||||
if (isUpdate) {
|
||||
quartzUtils.modifyJob(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup(),
|
||||
cron);
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup(),
|
||||
cron);
|
||||
} else {
|
||||
// 通过JobBuilder构建JobDetail实例,JobDetail规定其job只能是实现Job接口的实例
|
||||
JobDetail jobDetail = JobBuilder.newJob(WorkOrderOvertimeTask.class)
|
||||
.withIdentity(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup())
|
||||
.usingJobData("WorkOrderId", workOrderId)
|
||||
.build();
|
||||
.withIdentity(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup())
|
||||
.usingJobData("WorkOrderId", workOrderId)
|
||||
.build();
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
|
||||
// CronTrigger表达式触发器 继承于Trigger。TriggerBuilder 用于构建触发器实例
|
||||
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
|
||||
.withIdentity(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup())
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
.withIdentity(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup())
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
scheduler.scheduleJob(jobDetail, cronTrigger);
|
||||
}
|
||||
} catch (SchedulerException | ParseException e) {
|
||||
@ -361,36 +367,38 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-工单记录列表
|
||||
* @author DB
|
||||
*
|
||||
* @param workOrderId 工单id
|
||||
* @author DB
|
||||
* @since 2023-11-29 11:25:28
|
||||
*/
|
||||
@Override
|
||||
public List<TaskWorkOrderRecordListVo> getWorkOrderRecordList(String workOrderId) {
|
||||
// 根据任务id获取列表
|
||||
return SpringUtils.getBean(TaskWorkOrderRecordService.class)
|
||||
.listAs(
|
||||
QueryWrapper.create()
|
||||
.select(TASK_WORK_ORDER_RECORD.ALL_COLUMNS)
|
||||
.select(STAFF.NAME.as(TaskWorkOrderRecordListVo::getRecordStaffName),
|
||||
STAFF.STAFF_TYPE.as(TaskWorkOrderRecordListVo::getRecordStaffType))
|
||||
.select(SYS_USER.AVATAR.as(TaskWorkOrderRecordListVo::getAvatar))
|
||||
.from(TASK_WORK_ORDER_RECORD)
|
||||
// 员工表
|
||||
.leftJoin(STAFF)
|
||||
.on(STAFF.ID.eq(TASK_WORK_ORDER_RECORD.RECORD_STAFF_ID))
|
||||
// 系统用户表
|
||||
.leftJoin(SYS_USER)
|
||||
.on(SYS_USER.ID.eq(STAFF.USER_ID))
|
||||
.where(TASK_WORK_ORDER_RECORD.TASK_WORK_ORDER_ID.eq(workOrderId))
|
||||
.orderBy(TASK_WORK_ORDER_RECORD.CREATE_TIME.asc()),
|
||||
TaskWorkOrderRecordListVo.class);
|
||||
.listAs(
|
||||
QueryWrapper.create()
|
||||
.select(TASK_WORK_ORDER_RECORD.ALL_COLUMNS)
|
||||
.select(STAFF.NAME.as(TaskWorkOrderRecordListVo::getRecordStaffName),
|
||||
STAFF.STAFF_TYPE.as(TaskWorkOrderRecordListVo::getRecordStaffType))
|
||||
.select(SYS_USER.AVATAR.as(TaskWorkOrderRecordListVo::getAvatar))
|
||||
.from(TASK_WORK_ORDER_RECORD)
|
||||
// 员工表
|
||||
.leftJoin(STAFF)
|
||||
.on(STAFF.ID.eq(TASK_WORK_ORDER_RECORD.RECORD_STAFF_ID))
|
||||
// 系统用户表
|
||||
.leftJoin(SYS_USER)
|
||||
.on(SYS_USER.ID.eq(STAFF.USER_ID))
|
||||
.where(TASK_WORK_ORDER_RECORD.TASK_WORK_ORDER_ID.eq(workOrderId))
|
||||
.orderBy(TASK_WORK_ORDER_RECORD.CREATE_TIME.asc()),
|
||||
TaskWorkOrderRecordListVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-新增工单记录
|
||||
* @author DB
|
||||
*
|
||||
* @param bo 请求参数
|
||||
* @author DB
|
||||
* @since 2023-11-29 11:33:35
|
||||
*/
|
||||
@Override
|
||||
@ -410,18 +418,23 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
//没有负责人
|
||||
if (StringUtils.isNotBlank(task.getResponsibleStaffId())) {
|
||||
// 负责人手机号
|
||||
StaffInfoVo responsibleStaff =
|
||||
SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId());
|
||||
StaffInfoVo responsibleStaff = SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId());
|
||||
List<String> phoneList = new ArrayList<>();
|
||||
phoneList.add(responsibleStaff.getPhoneNumber());
|
||||
phoneList.add(loginUserInfo.getString("phoneNumber"));
|
||||
if (StringUtils.equals(loginUserInfo.getString("phoneNumber"), responsibleStaff.getPhoneNumber())) {
|
||||
//读取记录人信息
|
||||
StaffInfoVo recordStaff = SpringUtils.getBean(StaffService.class).getStaffInfo(task.getRecordStaffId());
|
||||
phoneList.add(recordStaff.getPhoneNumber());
|
||||
} else {
|
||||
phoneList.add(loginUserInfo.getString("phoneNumber"));
|
||||
}
|
||||
// 通知记录
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n工单有新回复:\n" + bo.getRecordText(),
|
||||
false);
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n工单有新回复:\n" + bo.getRecordText(),
|
||||
false);
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException("发送消息通知失败!");
|
||||
}
|
||||
@ -430,42 +443,43 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-工单提醒
|
||||
* @author DB
|
||||
*
|
||||
* @param workOrderId 工单id
|
||||
* @author DB
|
||||
* @since 2023-11-29 11:41:46
|
||||
*/
|
||||
@Override
|
||||
public void workOrderRemind(String workOrderId) {
|
||||
Task task = SpringUtils.getBean(TaskService.class)
|
||||
.queryChain()
|
||||
.select(TASK.ALL_COLUMNS)
|
||||
.leftJoin(TASK_WORK_ORDER)
|
||||
.on(TASK_WORK_ORDER.TASK_ID.eq(TASK.ID))
|
||||
.where(TASK_WORK_ORDER.ID.eq(workOrderId))
|
||||
.one();
|
||||
.queryChain()
|
||||
.select(TASK.ALL_COLUMNS)
|
||||
.leftJoin(TASK_WORK_ORDER)
|
||||
.on(TASK_WORK_ORDER.TASK_ID.eq(TASK.ID))
|
||||
.where(TASK_WORK_ORDER.ID.eq(workOrderId))
|
||||
.one();
|
||||
// 获取任务状态
|
||||
List<String> phoneList = new ArrayList<>();
|
||||
try {
|
||||
// 负责人手机号
|
||||
StaffInfoVo responsibleStaff =
|
||||
SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId());
|
||||
SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId());
|
||||
phoneList.add(responsibleStaff.getPhoneNumber());
|
||||
switch (task.getTaskStatus()) {
|
||||
// 待接收与接收超时
|
||||
case 1:
|
||||
case 7:
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n您有一条工单需要接收\n",
|
||||
false);
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n您有一条工单需要接收\n",
|
||||
false);
|
||||
break;
|
||||
default:
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n您有一条工单需要尽快处理\n",
|
||||
false);
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n您有一条工单需要尽快处理\n",
|
||||
false);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
@ -474,35 +488,37 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-工单转需求
|
||||
* @author DB
|
||||
*
|
||||
* @param workOrderId 工单id
|
||||
* @author DB
|
||||
* @since 2023-11-29 12:30:21
|
||||
*/
|
||||
@Override
|
||||
public void workOrderToDemand(String workOrderId) {
|
||||
// 对比当前用户信息
|
||||
TaskWorkOrder workOrder = this.getById(workOrderId);
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
if (!StringUtils.equals(workOrder.getRecordStaffId(), loginUserInfo.getString("id"))) {
|
||||
throw new ServiceException("当前操作员工不是当前工单提交人,请联系提交人操作");
|
||||
}
|
||||
// 获取任务
|
||||
Task task = SpringUtils.getBean(TaskService.class).getById(workOrder.getTaskId());
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
if (!StringUtils.equals(task.getRecordStaffId(), loginUserInfo.getString("id"))) {
|
||||
throw new ServiceException("当前操作员工不是当前工单提交人,请联系提交人操作");
|
||||
}
|
||||
TaskDemandBo taskDemandBo = new TaskDemandBo();
|
||||
RedisService redisService = SpringUtils.getBean(RedisService.class);
|
||||
String brandId = redisService.getCacheObject(OamConfigEnum.DEMAND_TO_TASK_BRAND.getKey());
|
||||
String storeId = redisService.getCacheObject(OamConfigEnum.DEMAND_TO_TASK_STORE.getKey());
|
||||
taskDemandBo.setAttachmentUrl(task.getAttachmentUrl())
|
||||
.setBrandId(brandId)
|
||||
.setStoreId(storeId)
|
||||
.setTaskContent(task.getTaskContent());
|
||||
.setBrandId(brandId)
|
||||
.setStoreId(storeId)
|
||||
.setTaskContent(task.getTaskContent());
|
||||
SpringUtils.getBean(TaskDemandService.class).insertTaskDemand(taskDemandBo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-工单暂停
|
||||
* @author DB
|
||||
*
|
||||
* @param bo 请求参数
|
||||
* @author DB
|
||||
* @since 2023-11-29 16:00:18
|
||||
*/
|
||||
@Override
|
||||
@ -520,18 +536,18 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
// 负责人手机号
|
||||
StaffInfoVo responsibleStaff =
|
||||
SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId());
|
||||
SpringUtils.getBean(StaffService.class).getStaffInfo(task.getResponsibleStaffId());
|
||||
List<String> phoneList = new ArrayList<>();
|
||||
phoneList.add(responsibleStaff.getPhoneNumber());
|
||||
phoneList.add(loginUserInfo.getString("phoneNumber"));
|
||||
// 通知记录
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n工单已暂停到:"
|
||||
+ bo.getPauseExpireTime().format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS)),
|
||||
false);
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT,
|
||||
phoneList,
|
||||
task.getTaskContent() + "\n工单已暂停到:"
|
||||
+ bo.getPauseExpireTime().format(DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS)),
|
||||
false);
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException("发送消息通知失败!");
|
||||
}
|
||||
@ -541,17 +557,18 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
}
|
||||
// 更新工单信息
|
||||
this.updateChain()
|
||||
.set(TASK_WORK_ORDER.PAUSE_STAFF_ID, loginUserInfo.getString("id"))
|
||||
.set(TASK_WORK_ORDER.PAUSE_EXPIRE_TIME, bo.getPauseExpireTime())
|
||||
.set(TASK_WORK_ORDER.PAUSE_RECORD_TIME, LocalDateTime.now())
|
||||
.where(TASK_WORK_ORDER.ID.eq(bo.getWorkOrderId()))
|
||||
.update();
|
||||
.set(TASK_WORK_ORDER.PAUSE_STAFF_ID, loginUserInfo.getString("id"))
|
||||
.set(TASK_WORK_ORDER.PAUSE_EXPIRE_TIME, bo.getPauseExpireTime())
|
||||
.set(TASK_WORK_ORDER.PAUSE_RECORD_TIME, LocalDateTime.now())
|
||||
.where(TASK_WORK_ORDER.ID.eq(bo.getWorkOrderId()))
|
||||
.update();
|
||||
}
|
||||
|
||||
/**
|
||||
* 工单模块-工单提交-工单办结
|
||||
* @author DB
|
||||
*
|
||||
* @param workOrderId 工单id
|
||||
* @author DB
|
||||
* @since 2023-11-29 15:44:08
|
||||
*/
|
||||
@Override
|
||||
@ -576,36 +593,36 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
StaffService staffService = SpringUtils.getBean(StaffService.class);
|
||||
Set<String> staffIds = new HashSet<>();
|
||||
staffIds.add(task.getResponsibleStaffId());
|
||||
staffIds.add(taskWorkOrder.getRecordStaffId());
|
||||
staffIds.add(task.getRecordStaffId());
|
||||
Map<String, StaffInfoVo> staffMap =
|
||||
staffService
|
||||
.listAs(
|
||||
QueryWrapper.create()
|
||||
.select(STAFF.ID, STAFF.NAME)
|
||||
.select(SYS_USER.PHONE_NUMBER.as(StaffInfoVo::getPhoneNumber))
|
||||
.from(STAFF)
|
||||
.leftJoin(SYS_USER)
|
||||
.on(SYS_USER.ID.eq(STAFF.ID))
|
||||
.where(STAFF.ID.in(staffIds)),
|
||||
StaffInfoVo.class)
|
||||
.stream()
|
||||
.collect(Collectors.toMap(StaffInfoVo::getId, item -> item));
|
||||
staffService
|
||||
.listAs(
|
||||
QueryWrapper.create()
|
||||
.select(STAFF.ID, STAFF.NAME)
|
||||
.select(SYS_USER.PHONE_NUMBER.as(StaffInfoVo::getPhoneNumber))
|
||||
.from(STAFF)
|
||||
.leftJoin(SYS_USER)
|
||||
.on(SYS_USER.ID.eq(STAFF.ID))
|
||||
.where(STAFF.ID.in(staffIds)),
|
||||
StaffInfoVo.class)
|
||||
.stream()
|
||||
.collect(Collectors.toMap(StaffInfoVo::getId, item -> item));
|
||||
List<String> phoneList = new ArrayList<>();
|
||||
phoneList.add(staffMap.get(task.getResponsibleStaffId()).getPhoneNumber());
|
||||
// 记录人手机号
|
||||
phoneList.add(staffMap.get(taskWorkOrder.getRecordStaffId()).getPhoneNumber());
|
||||
phoneList.add(staffMap.get(task.getRecordStaffId()).getPhoneNumber());
|
||||
// 通知记录
|
||||
try {
|
||||
SpringUtils.getBean(WebHookSendHandler.class)
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList, task.getTaskContent() + "\n工单办结", false);
|
||||
.webHookSendText(WebHookKeyConstant.ORDER_INFO_BOT, phoneList, task.getTaskContent() + "\n工单办结", false);
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException("发送消息通知失败!");
|
||||
}
|
||||
// 删除工单完结超时任务
|
||||
try {
|
||||
SpringUtils.getBean(QuartzUtils.class)
|
||||
.deleteJob(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup());
|
||||
.deleteJob(QuartzEnums.WORK_ORDER_OVERTIME_TASK.getName() + workOrderId,
|
||||
QuartzEnums.WORK_ORDER_OVERTIME_TASK.getGroup());
|
||||
} catch (SchedulerException e) {
|
||||
throw new ServiceException("删除工单完结超时任务失败");
|
||||
}
|
||||
@ -613,6 +630,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
|
||||
/**
|
||||
* 技术模块-技术-获取个人工单列表
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-11-30 19:41:32
|
||||
*/
|
||||
@ -633,59 +651,62 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
// 获取未接受的工单
|
||||
queryWrapper.or(TASK.TASK_STATUS.in(1, 7));
|
||||
}
|
||||
return this.mapper.selectListByQueryAs(
|
||||
queryWrapper
|
||||
.select(TASK_WORK_ORDER.ID,
|
||||
TASK_WORK_ORDER.PHONE_NUMBER,
|
||||
TASK_WORK_ORDER.RECORD_STAFF_ID,
|
||||
TASK_WORK_ORDER.CREATE_TIME.as("createTime"),
|
||||
TASK_WORK_ORDER.RECEIVING_TIME)
|
||||
// 任务
|
||||
.select(TASK.TASK_CONTENT, TASK.TASK_STATUS, TASK.TASK_RECEIPT_TIME)
|
||||
// 品牌
|
||||
.select(BRAND.BRAND_NAME)
|
||||
// 校区
|
||||
.select(STORE.STORE_NAME)
|
||||
.where(TASK.RESPONSIBLE_STAFF_ID.eq(loginUserInfo.getString("id")))
|
||||
.leftJoin(TASK)
|
||||
.on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID))
|
||||
.leftJoin(BRAND)
|
||||
.on(BRAND.ID.eq(TASK_WORK_ORDER.BRAND_ID))
|
||||
.leftJoin(STORE)
|
||||
.on(STORE.ID.eq(TASK_WORK_ORDER.STORE_ID)),
|
||||
TaskWorkOrderPersonVo.class,
|
||||
// 提交人
|
||||
item -> item.field(TaskWorkOrderPersonVo::getRecordStaffName)
|
||||
.queryWrapper(recordStaff -> queryChain().select(STAFF.NAME.as("recordStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(recordStaff.getRecordStaffId()))));
|
||||
return this.mapper.selectListByQueryAs(queryWrapper
|
||||
.select(TASK_WORK_ORDER.ID,
|
||||
TASK_WORK_ORDER.PHONE_NUMBER,
|
||||
TASK_WORK_ORDER.CREATE_TIME.as("createTime"),
|
||||
TASK_WORK_ORDER.RECEIVING_TIME)
|
||||
// 任务
|
||||
.select(TASK.TASK_CONTENT, TASK.TASK_STATUS, TASK.TASK_RECEIPT_TIME, TASK.RECORD_STAFF_ID)
|
||||
// 品牌
|
||||
.select(BRAND.BRAND_NAME)
|
||||
// 校区
|
||||
.select(STORE.STORE_NAME)
|
||||
.where(TASK.RESPONSIBLE_STAFF_ID.eq(loginUserInfo.getString("id")))
|
||||
.leftJoin(TASK)
|
||||
.on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID))
|
||||
.leftJoin(BRAND)
|
||||
.on(BRAND.ID.eq(TASK_WORK_ORDER.BRAND_ID))
|
||||
.leftJoin(STORE)
|
||||
.on(STORE.ID.eq(TASK_WORK_ORDER.STORE_ID)),
|
||||
TaskWorkOrderPersonVo.class,
|
||||
// 提交人
|
||||
item -> item.field(TaskWorkOrderPersonVo::getRecordStaffName)
|
||||
.queryWrapper(recordStaff -> queryChain().select(STAFF.NAME.as("recordStaffName"))
|
||||
.from(STAFF)
|
||||
.where(STAFF.ID.eq(recordStaff.getRecordStaffId()))));
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否是第一个接收的技术员工
|
||||
*
|
||||
* @param taskWorkOrderId 工单记录id
|
||||
* @author DB
|
||||
* @since 2023/12/04
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void whetherReceive(String taskWorkOrderId) {
|
||||
Task task = SpringUtils.getBean(TaskService.class).queryChain()
|
||||
.leftJoin(TASK_WORK_ORDER).on(TASK_WORK_ORDER.TASK_ID.eq(TASK.ID))
|
||||
.where(TASK_WORK_ORDER.ID.eq(taskWorkOrderId)).one();
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
//判断当前登陆用户是否是当前工单的负责员工
|
||||
if (StringUtils.equals(loginUserInfo.getString("id"),task.getResponsibleStaffId())){
|
||||
if (StringUtils.equals(loginUserInfo.getString("id"), task.getResponsibleStaffId())) {
|
||||
//查询负责员工的记录数
|
||||
long count = SpringUtils.getBean(TaskWorkOrderRecordService.class).queryChain()
|
||||
.where(TASK_WORK_ORDER_RECORD.TASK_WORK_ORDER_ID.eq(taskWorkOrderId))
|
||||
.and(TASK_WORK_ORDER_RECORD.RECORD_STAFF_ID.eq(task.getResponsibleStaffId()))
|
||||
.count();
|
||||
//首次记录修改状态
|
||||
if (count == 0){
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
task.setTaskStatus(2).setTaskReceiptTime(now);
|
||||
if (count == 0) {
|
||||
//获取工单
|
||||
TaskWorkOrder workOrder = this.getById(taskWorkOrderId);
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
SpringUtils.getBean(TaskService.class).updateChain()
|
||||
.set(TASK.TASK_STATUS, 2)
|
||||
.set(TASK.TASK_RECEIPT_TIME, now).where(TASK.ID.eq(task.getId()))
|
||||
.update();
|
||||
int receivingTime = now.compareTo(workOrder.getCreateTime());
|
||||
workOrder.setReceivingTime(receivingTime);
|
||||
this.updateById(workOrder);
|
||||
|
||||
@ -72,7 +72,7 @@ public class PersonTaskPageVo implements Serializable {
|
||||
* 任务评级(0:A;1:B;2:C;3:D;4:E)
|
||||
*/
|
||||
@ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)")
|
||||
private Integer taskRating;
|
||||
private String taskRating;
|
||||
|
||||
/**
|
||||
* 个人任务绩点
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package com.cpop.oam.business.vo;
|
||||
|
||||
import com.cpop.core.annontation.StringArrayConvert;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
@ -54,13 +56,13 @@ public class TaskArchivingPagVo {
|
||||
* 任务评级(0:A;1:B;2:C;3:D;4:E)
|
||||
*/
|
||||
@ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)")
|
||||
private Integer taskRating;
|
||||
private String taskRating;
|
||||
|
||||
/**
|
||||
* 任务绩点
|
||||
*/
|
||||
@ApiModelProperty("任务绩点")
|
||||
private Integer gradePoint;
|
||||
private Integer taskWeight;
|
||||
|
||||
/**
|
||||
* 开始时间
|
||||
@ -81,7 +83,14 @@ public class TaskArchivingPagVo {
|
||||
*/
|
||||
@ApiModelProperty("转部署时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private LocalDateTime toFinishTime;
|
||||
private LocalDateTime toDeployTime;
|
||||
|
||||
/**
|
||||
* 完成日期
|
||||
*/
|
||||
@ApiModelProperty("完成日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate completionDate;
|
||||
|
||||
/**
|
||||
* 主体
|
||||
@ -98,6 +107,7 @@ public class TaskArchivingPagVo {
|
||||
/**
|
||||
* 操作流程
|
||||
*/
|
||||
@StringArrayConvert
|
||||
@ApiModelProperty("操作流程")
|
||||
private String testToFinishUrl;
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ public class TaskDemandPageVo {
|
||||
|
||||
/**任务评级(0:A;1:B;2:C;3:D;4:E) */
|
||||
@ApiModelProperty("任务评级(0:A;1:B;2:C;3:D;4:E)")
|
||||
private Integer taskRating;
|
||||
private String taskRating;
|
||||
|
||||
/**任务接收员工Id */
|
||||
@ApiModelProperty("领取人Id")
|
||||
|
||||
@ -0,0 +1,46 @@
|
||||
package com.cpop.oam.business.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @version 1.0.0
|
||||
* @since 2023-12-06 15:31
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class TaskIndividualGpaDetailVo {
|
||||
|
||||
/**
|
||||
* 任务状态
|
||||
*/
|
||||
@ApiModelProperty(value = "任务状态")
|
||||
private Integer taskStatus;
|
||||
|
||||
/**
|
||||
* 任务id
|
||||
*/
|
||||
@ApiModelProperty(value = "任务")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 任务内容
|
||||
*/
|
||||
@ApiModelProperty(value = "任务内容")
|
||||
private String taskContent;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 绩点
|
||||
*/
|
||||
@ApiModelProperty(value = "绩点")
|
||||
private Integer gradePoint;
|
||||
|
||||
}
|
||||
@ -40,49 +40,6 @@ public class TaskIndividualGpaVo {
|
||||
* 个人绩点
|
||||
*/
|
||||
@ApiModelProperty(value = "个人绩点")
|
||||
private List<IndividualGpa> gpa;
|
||||
|
||||
/**
|
||||
* 个人绩点
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023/12/05
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class IndividualGpa {
|
||||
|
||||
/**
|
||||
* 任务状态
|
||||
*/
|
||||
@ApiModelProperty(value = "任务状态")
|
||||
private Integer taskStatus;
|
||||
|
||||
/**
|
||||
* 任务id
|
||||
*/
|
||||
@ApiModelProperty(value = "任务")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 任务内容
|
||||
*/
|
||||
@ApiModelProperty(value = "任务内容")
|
||||
private String taskContent;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 绩点
|
||||
*/
|
||||
@ApiModelProperty(value = "绩点")
|
||||
private Integer gradePoint;
|
||||
|
||||
}
|
||||
|
||||
private List<TaskIndividualGpaDetailVo> gpa;
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cpop.oam.business.vo;
|
||||
|
||||
import com.cpop.core.annontation.StringArrayConvert;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -32,16 +33,29 @@ public class TaskToBeClaimedPageVo {
|
||||
|
||||
/**附件地址 */
|
||||
@ApiModelProperty(value = "附件地址")
|
||||
@StringArrayConvert
|
||||
private String attachmentUrl;
|
||||
|
||||
/**任务评级(0:A;1:B;2:C;3:D;4:E) */
|
||||
@ApiModelProperty(value = "任务评级(0:A;1:B;2:C;3:D;4:E)")
|
||||
private Integer taskRating;
|
||||
private String taskRating;
|
||||
|
||||
/**
|
||||
* 任务权重
|
||||
*/
|
||||
@ApiModelProperty(value = "任务权重(任务绩点)")
|
||||
private Integer taskWeight;
|
||||
|
||||
/**任务类型(0:迭代;1:需求;2:投诉/工单) */
|
||||
@ApiModelProperty(value = "任务类型(0:迭代;1:需求;2:投诉/工单)")
|
||||
private Integer taskType;
|
||||
|
||||
/**
|
||||
* 记录员工id
|
||||
*/
|
||||
@ApiModelProperty(value = "记录员工id")
|
||||
private String recordStaffId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -119,6 +120,7 @@ public class DictDataServiceImpl extends ServiceImpl<DictDataMapper, DictData> i
|
||||
if (!dictDatas.stream().map(DictData::getId).collect(Collectors.toSet()).contains(dictData.getId())) {
|
||||
dictDatas.add(dictData);
|
||||
}
|
||||
//排序
|
||||
DictUtils.setDictCache(dictData.getDictType(), dictDatas);
|
||||
}
|
||||
}
|
||||
@ -138,6 +140,7 @@ public class DictDataServiceImpl extends ServiceImpl<DictDataMapper, DictData> i
|
||||
//判断新增的数据是否在缓存中
|
||||
List<DictData> filterList = dictDatas.stream().filter(item -> !StringUtils.equals(item.getId(), dictData.getId())).collect(Collectors.toList());
|
||||
filterList.add(getById(dictData.getId()));
|
||||
//排序
|
||||
DictUtils.setDictCache(dictData.getDictType(), filterList);
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,7 +13,9 @@ import com.cpop.system.business.entity.DictData;
|
||||
import org.springframework.data.redis.cache.RedisCache;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 字典工具类
|
||||
@ -31,7 +33,7 @@ public class DictUtils {
|
||||
* @param dictDatas 字典数据列表
|
||||
*/
|
||||
public static void setDictCache(String key, List<DictData> dictDatas) {
|
||||
SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(key), dictDatas);
|
||||
SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(key), dictDatas.stream().sorted(Comparator.comparing(DictData::getDictSort)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user