测试任务流程-修复bug

This commit is contained in:
DB 2023-12-06 18:24:13 +08:00
parent dd0948e875
commit cb3d91202a
21 changed files with 431 additions and 394 deletions

View File

@ -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"]

View File

@ -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

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -93,8 +93,6 @@ public class TaskTechnologyController {
/**
* 技术模块-任务归档-获取任务归档分页
*
* @param subject 主体
* @param taskContent 任务内容
* @author DB
* @since 2023-11-30 21:11:47
*/

View File

@ -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;
/**
* 附件地址

View File

@ -48,11 +48,6 @@ public class TaskDemand extends BaseEntity implements Serializable {
*/
private String storeId;
/**
* 记录员工id
*/
private String recordStaffId;
/**
* 签约图片
*/

View File

@ -58,11 +58,6 @@ public class TaskWorkOrder extends BaseEntity implements Serializable {
*/
private String phoneNumber;
/**
* 记录员工id
*/
private String recordStaffId;
/**
* 办结时间
*/

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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表达式触发器 继承于TriggerTriggerBuilder 用于构建触发器实例
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表达式触发器 继承于TriggerTriggerBuilder 用于构建触发器实例
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);

View File

@ -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;
/**
* 个人任务绩点

View File

@ -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;
}

View File

@ -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")

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
/**
* 创建时间
*/

View File

@ -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);
}
}

View File

@ -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()));
}
/**