测试任务流程-修复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()
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

@ -45,10 +45,11 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
/**
* 技术模块-今日事务-任务成员组列
* @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) {
@ -63,9 +64,10 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
/**
* 技术模块-今日事务-新增任务小组成员
*
* @param bo 请求参数
* @author DB
* @since 2023/12/04
* @param bo 请求参数
*/
@Override
@Transactional(rollbackFor = Exception.class)
@ -107,6 +109,7 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
phoneList.add(staffInfo.getPhoneNumber());
try {
SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList,
"任务:" + task.getTaskContent() + "\n" +
loginUserInfo.getString("name") + "您的绩点调整为" + responsibleStaff.getGradePoint() + "\n" + staffInfo.getName()
+ "您新加入任务:" + task.getTaskContent() + "绩点为:" + bo.getGradePoint(),
false);
@ -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) {
@ -174,6 +178,7 @@ public class TaskStaffGroupServiceImpl extends ServiceImpl<TaskStaffGroupMapper,
phoneList.add(staffInfo.getPhoneNumber());
try {
SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList,
"任务:" + task.getTaskContent() + "\n" +
loginUserInfo.getString("name") + "您的绩点调整为" + responsibleStaffTaskInfo.getGradePoint() + "\n"
+ staffInfo.getName() + "您的绩点调整为:" + bo.getGradePoint(),
false);
@ -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) {

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;
@ -75,9 +76,10 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-接收/处理/暂停中
*
* @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() {
@ -86,14 +88,13 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
// 工单
.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(TASK.TASK_CONTENT, TASK.TASK_STATUS, TASK.RESPONSIBLE_STAFF_ID, TASK.TASK_RECEIPT_TIME, TASK.RECORD_STAFF_ID)
// 品牌
.select(BRAND.BRAND_NAME)
// 校区
@ -169,6 +170,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-获取当天值班人员
*
* @author DB
* @since 2023-11-29 14:01:03
*/
@ -186,6 +188,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-已办结分页列表
*
* @author DB
* @since 2023-11-29 14:35:08
*/
@ -211,6 +214,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-新增工单
*
* @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);
@ -280,10 +284,11 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 开始或删除工单接收任务
* @author DB
*
* @param workOrderId 工单id
* @param isStart 是否是开始标识
* @param dateTime 时间
* @author DB
* @since 2023-11-29 10:21:02
*/
private void startOrRemoveWorkOrderAcceptTask(String workOrderId, Boolean isStart, LocalDateTime dateTime) {
@ -320,10 +325,11 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 生成工单超时任务
* @author DB
*
* @param workOrderId 工单id
* @param isUpdate 是否更新
* @param dateTime 开始时间
* @author DB
* @since 2023-11-29 16:09:02
*/
private void startOrUpdateWorkOrderOvertimeTask(String workOrderId, Boolean isUpdate, LocalDateTime dateTime) {
@ -361,8 +367,9 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-工单记录列表
* @author DB
*
* @param workOrderId 工单id
* @author DB
* @since 2023-11-29 11:25:28
*/
@Override
@ -389,8 +396,9 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-新增工单记录
* @author DB
*
* @param bo 请求参数
* @author DB
* @since 2023-11-29 11:33:35
*/
@Override
@ -410,11 +418,16 @@ 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());
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)
@ -430,8 +443,9 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-工单提醒
* @author DB
*
* @param workOrderId 工单id
* @author DB
* @since 2023-11-29 11:41:46
*/
@Override
@ -474,20 +488,21 @@ 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());
@ -501,8 +516,9 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-工单暂停
* @author DB
*
* @param bo 请求参数
* @author DB
* @since 2023-11-29 16:00:18
*/
@Override
@ -550,8 +566,9 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 工单模块-工单提交-工单办结
* @author DB
*
* @param workOrderId 工单id
* @author DB
* @since 2023-11-29 15:44:08
*/
@Override
@ -576,7 +593,7 @@ 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(
@ -593,7 +610,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
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)
@ -613,6 +630,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 技术模块-技术-获取个人工单列表
*
* @author DB
* @since 2023-11-30 19:41:32
*/
@ -633,15 +651,13 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
// 获取未接受的工单
queryWrapper.or(TASK.TASK_STATUS.in(1, 7));
}
return this.mapper.selectListByQueryAs(
queryWrapper
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(TASK.TASK_CONTENT, TASK.TASK_STATUS, TASK.TASK_RECEIPT_TIME, TASK.RECORD_STAFF_ID)
// 品牌
.select(BRAND.BRAND_NAME)
// 校区
@ -663,11 +679,13 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
/**
* 是否是第一个接收的技术员工
*
* @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))
@ -682,10 +700,13 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
.count();
//首次记录修改状态
if (count == 0) {
LocalDateTime now = LocalDateTime.now();
task.setTaskStatus(2).setTaskReceiptTime(now);
//获取工单
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()));
}
/**