添加webSocket;添加ecpp配置

This commit is contained in:
DB 2023-11-24 22:31:42 +08:00
parent 9ad0bc0ed5
commit 32dbd17038
12 changed files with 229 additions and 140 deletions

2
.gitignore vendored
View File

@ -20,6 +20,8 @@ target/
*.iml *.iml
*.ipr *.ipr
*.log *.log
.jlsp
.arts
### NetBeans ### ### NetBeans ###
/nbproject/private/ /nbproject/private/
/nbbuild/ /nbbuild/

View File

@ -0,0 +1,20 @@
package com.cpop.api.tencent.wxWork.core.config;
import com.cpop.api.tencent.wxWork.core.config.ecpp.EcppProperties;
import lombok.Getter;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* Description 数字人民币API配置类
* @authors DB
* @date 2023-11-24 17:27:07
* @version 1.0.0
*/
@Getter
@Configuration
@EnableConfigurationProperties(EcppProperties.class)
public class EcppApiConfig {
}

View File

@ -0,0 +1,33 @@
package com.cpop.api.tencent.wxWork.core.config.ecpp;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* Description 数字人民币配置
* @authors DB
* @date 2023-11-24 17:34:59
* @version 1.0.0
*/
@Data
@ConfigurationProperties(prefix = "ecpp.pay")
public class EcppProperties {
/**基础路径 */
private String baseUrl;
/**应用/平台标识 */
private String appId;
/**公钥 */
private String appType;
/**签名身份类型1、平台2、商户; 3、用户 */
private String signatureIdType;
/**签名身份标识 */
private String signatureId;
/**公钥 */
private String publicKey;
}

View File

@ -11,7 +11,7 @@ import org.springframework.context.annotation.Configuration;
*/ */
@Data @Data
@Configuration @Configuration
@ConfigurationProperties(prefix = "pupu.api.tencent.wx-work") @ConfigurationProperties(prefix = "cpop.api.tencent.wx-work")
public class WxWorkApiConfig { public class WxWorkApiConfig {
/** /**

View File

@ -1 +1,13 @@
#数币
ecpp:
pay:
appId: 1000
signatureIdType: 1
signatureId: 90035603022098432
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA32A6vFBgXZgVgzaboSHjMMfJxrxXITDkdgzMR/WpTdxJvqZyyZtPOtdL4wg6St4lki4W/SMH6zTWJX07HYeWl8KiSOAXr2kcqHWPhO+rmtq8rMaR831f9ot7GK/6hkKUFRQZ8Uev8pGnOO4w5n+AaLOkohd+K0WXoaNokD+vxvZO7+yTYY/WAT30ItaMY0Ld5o3rRRo63lHuNlBjQ6mP8U6pPXek0J+oONraxJwZPsCEGTw3tfsXi0uMViRRXfp33H2xBZ11wrRrY/l5Pp8YPpJCxrCyzGcwlNqsT4VuEW4NglMyyU0g0J9mR+eIZS2kmuhpwjshyGC2Soc7DYdNUwIDAQAB
paycallback: /callback/ecnypaypass/pay
#腾讯
tencent:
#企业微信
wx-work:

View File

@ -1,16 +1,16 @@
# 项目相关配置 # 项目相关配置
cpop: cpop:
# 文件路径 示例( Windows配置W:/WorkSpace/java/uploadPathLinux配置 /home/baseFramework/uploadPath # 文件路径 示例( Windows配置W:/WorkSpace/java/uploadPathLinux配置 /home/baseFramework/uploadPath
profile: E:/Cpop/uploadPath profile: D:/Cpop/uploadPath
jwt: jwt:
#白名单 #白名单
whiteList: /login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxCp/*,/wxCp/portal/*/registerCode whiteList: /websocket/*,/login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxCp/*,/wxCp/portal/*/registerCode
gateway: gateway:
rsa-keypair: rsa-keypair:
# 公钥文件 # 公钥文件
publicKeyFile: E:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\publicKey publicKeyFile: D:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\publicKey
# 公钥文件 # 公钥文件
privateKeyFile: E:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\privateKey privateKeyFile: D:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\privateKey
# DataSource Config # DataSource Config
spring: spring:
@ -88,8 +88,8 @@ knife4j:
wx: wx:
pay: pay:
# p12证书的位置可以指定绝对路径也可以指定类路径以classpath:开头) # p12证书的位置可以指定绝对路径也可以指定类路径以classpath:开头)
keyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.p12 keyPath: D:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.p12
# 私钥证书 # 私钥证书
privateKeyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_key.pem privateKeyPath: D:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_key.pem
# 私钥文件 # 私钥文件
privateCertPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.pem privateCertPath: D:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.pem

View File

@ -4,7 +4,7 @@ cpop:
profile: /root/cpop-union/cpop-oam/upload profile: /root/cpop-union/cpop-oam/upload
jwt: jwt:
#白名单 #白名单
whiteList: /login,/getCaptcha,/profile/**,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/*,/wxCp/portal/*/registerCode whiteList: /websocket/*,/login,/getCaptcha,/profile/**,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/*,/wxCp/portal/*/registerCode
#拦截 #拦截
gateway: gateway:
rsa-keypair: rsa-keypair:

View File

@ -4,7 +4,7 @@ cpop:
profile: /root/cpop-union/cpop-mall/upload profile: /root/cpop-union/cpop-mall/upload
jwt: jwt:
#白名单 #白名单
whiteList: /login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/portal/*/registerCode,/wxCp/* whiteList: /websocket/*,/login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/portal/*/registerCode,/wxCp/*
#拦截 #拦截
gateway: gateway:
rsa-keypair: rsa-keypair:

View File

@ -92,7 +92,6 @@ public class CommonServiceImpl implements CommonService {
*/ */
@Override @Override
public ConfigInfoVo getSysConfigInfo() { public ConfigInfoVo getSysConfigInfo() {
ConfigInfoVo sysConfigInfoVo = new ConfigInfoVo();
RedisService redisService = SpringUtils.getBean(RedisService.class); RedisService redisService = SpringUtils.getBean(RedisService.class);
CoreService coreService = SpringUtils.getBean(CoreService.class); CoreService coreService = SpringUtils.getBean(CoreService.class);
//获取企业微信信息 //获取企业微信信息
@ -105,14 +104,15 @@ public class CommonServiceImpl implements CommonService {
configMap.put(sysConfigEnum.getField(), cacheInfo); configMap.put(sysConfigEnum.getField(), cacheInfo);
} else { } else {
//查询系统 //查询系统
String value = coreService.selectConfigByKey(item).getConfigValue(); SysConfig sysConfig = coreService.selectConfigByKey(item);
if (StringUtils.isNotBlank(value)) { if (null !=sysConfig) {
//获取枚举 //获取枚举
OamConfigEnum sysConfigEnum = OamConfigEnum.matchKey(item); OamConfigEnum sysConfigEnum = OamConfigEnum.matchKey(item);
configMap.put(sysConfigEnum.getField(), value); configMap.put(sysConfigEnum.getField(), sysConfig.getConfigValue());
} }
} }
}); });
ConfigInfoVo sysConfigInfoVo = new ConfigInfoVo();
BeanUtils.mapToObj(configMap, sysConfigInfoVo); BeanUtils.mapToObj(configMap, sysConfigInfoVo);
return sysConfigInfoVo; return sysConfigInfoVo;
} }

View File

@ -1,6 +1,7 @@
package com.cpop.oam.business.service.impl; package com.cpop.oam.business.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.cpop.system.framework.ws.server.WebSocketServer;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl; import com.mybatisflex.spring.service.impl.ServiceImpl;
@ -72,8 +73,10 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
@Override @Override
public Page<TaskPageVo> getTaskPage(TaskPageBo bo) { public Page<TaskPageVo> getTaskPage(TaskPageBo bo) {
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), return this.mapper.paginateAs(pageDomain.getPageNum(),
QueryWrapper.create().where(TASK.TASK_STATUS.eq(1)) pageDomain.getPageSize(),
QueryWrapper.create()
.where(TASK.TASK_STATUS.eq(1))
.and(TASK.TASK_TYPE.eq(bo.getTaskType())) .and(TASK.TASK_TYPE.eq(bo.getTaskType()))
.and(TASK.TASK_RATING.eq(bo.getTaskRating())) .and(TASK.TASK_RATING.eq(bo.getTaskRating()))
.orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()),
@ -90,27 +93,31 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
@Override @Override
public void insertTask(TaskBo bo) { public void insertTask(TaskBo bo) {
Task entity = BeanUtils.mapToClass(bo, Task.class); Task entity = BeanUtils.mapToClass(bo, Task.class);
//默认待审核 // 默认待审核
entity.setTaskStatus(0); entity.setTaskStatus(0);
//默认开发中 // 默认开发中
entity.setTaskItem(0); entity.setTaskItem(0);
this.save(entity); this.save(entity);
//获取审核管理员手机号 // 获取审核管理员手机号
CoreService coreService = SpringUtils.getBean(CoreService.class); CoreService coreService = SpringUtils.getBean(CoreService.class);
RedisService redisService = SpringUtils.getBean(RedisService.class); RedisService redisService = SpringUtils.getBean(RedisService.class);
String auditStaffPhone = redisService.getCacheObject(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); String auditStaffPhone = redisService.getCacheObject(OamConfigEnum.AUDIT_STAFF_PHONE.getKey());
if (StringUtils.isBlank(auditStaffPhone)) { if (StringUtils.isBlank(auditStaffPhone)) {
SysConfig sysConfig = coreService.selectConfigByKey(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); SysConfig sysConfig = coreService.selectConfigByKey(OamConfigEnum.AUDIT_STAFF_PHONE.getKey());
auditStaffPhone = sysConfig.getConfigValue(); auditStaffPhone = sysConfig.getConfigValue();
if (StringUtils.isBlank(auditStaffPhone)){ if (StringUtils.isBlank(auditStaffPhone)) {
throw new ServiceException("尚未配置审核管理员信息!"); throw new ServiceException("尚未配置审核管理员信息!");
} }
} }
//企微通知审核管理员 // 企微通知审核管理员
List<String> phoneList = new ArrayList<String>(); List<String> phoneList = new ArrayList<String>();
phoneList.add(auditStaffPhone); phoneList.add(auditStaffPhone);
try { try {
SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList, "==========您有一条新的迭代任务需要审核==========", false); SpringUtils.getBean(WebHookSendHandler.class)
.webHookSendText(WebHookKeyConstant.PRODUCT_BOT,
phoneList,
"==========您有一条新的迭代任务需要审核==========",
false);
} catch (IOException e) { } catch (IOException e) {
throw new ServiceException("发送通知失败!"); throw new ServiceException("发送通知失败!");
} }
@ -125,10 +132,9 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
@Override @Override
public Page<TaskAuditPageVo> getTaskAuditPage() { public Page<TaskAuditPageVo> getTaskAuditPage() {
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), return this.mapper.paginateAs(pageDomain.getPageNum(),
QueryWrapper.create() pageDomain.getPageSize(),
.where(TASK.TASK_STATUS.eq(0)) QueryWrapper.create().where(TASK.TASK_STATUS.eq(0)).orderBy(TASK.CREATE_TIME.desc()),
.orderBy(TASK.CREATE_TIME.desc()),
TaskAuditPageVo.class); TaskAuditPageVo.class);
} }
@ -143,6 +149,12 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
public void setTaskAuditComments(TaskAuditCommentsBo bo) { public void setTaskAuditComments(TaskAuditCommentsBo bo) {
Task entity = BeanUtils.mapToClass(bo, Task.class); Task entity = BeanUtils.mapToClass(bo, Task.class);
this.updateById(entity); this.updateById(entity);
// 如果通过,可以通过websocket进行通信
if (bo.getTaskStatus() == 1) {
// 获取任务信息
Task task = this.getById(bo.getId());
SpringUtils.getBean(WebSocketServer.class).sendInfo("您的任务" + task.getTaskName() + "已通过,请注意接收:", task.getResponsibleStaffId());
}
} }
/** /**
@ -153,12 +165,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
**/ **/
@Override @Override
public Page<TaskAuditPageVo> getTaskRejectPage() { public Page<TaskAuditPageVo> getTaskRejectPage() {
//获取当前用户信息 // 获取当前用户信息
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), return this.mapper.paginateAs(pageDomain.getPageNum(),
QueryWrapper.create() pageDomain.getPageSize(),
.where(TASK.TASK_STATUS.eq(-1)) QueryWrapper.create().where(TASK.TASK_STATUS.eq(-1)).orderBy(TASK.CREATE_TIME.desc()),
.orderBy(TASK.CREATE_TIME.desc()),
TaskAuditPageVo.class); TaskAuditPageVo.class);
} }
@ -171,64 +182,64 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
**/ **/
@Override @Override
public void claimTask(String id) { public void claimTask(String id) {
//查询任务 // 查询任务
Task task = this.getById(id); Task task = this.getById(id);
//进行中 // 进行中
task.setTaskStatus(2); task.setTaskStatus(2);
//接受时间 // 接受时间
task.setTaskReceiptTime(LocalDateTime.now()); task.setTaskReceiptTime(LocalDateTime.now());
//如果任务没有设置预期完成时间则按照任务评级进行设置默认 // 如果任务没有设置预期完成时间则按照任务评级进行设置默认
if (null == task.getExpectedCompletionDate()) { if (null == task.getExpectedCompletionDate()) {
//获取任务评级 // 获取任务评级
Integer taskRating = task.getTaskRating(); Integer taskRating = task.getTaskRating();
Date expectedCompletionDate; Date expectedCompletionDate;
switch (taskRating) { switch (taskRating) {
case 0: case 0:
//30天 // 30天
expectedCompletionDate = DateUtils.addDateDays(new Date(), 30); expectedCompletionDate = DateUtils.addDateDays(new Date(), 30);
task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime()));
break; break;
case 1: case 1:
//21天 // 21天
expectedCompletionDate = DateUtils.addDateDays(new Date(), 21); expectedCompletionDate = DateUtils.addDateDays(new Date(), 21);
task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime()));
break; break;
case 2: case 2:
//15天 // 15天
expectedCompletionDate = DateUtils.addDateDays(new Date(), 15); expectedCompletionDate = DateUtils.addDateDays(new Date(), 15);
task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime()));
break; break;
case 3: case 3:
//7天 // 7天
expectedCompletionDate = DateUtils.addDateDays(new Date(), 7); expectedCompletionDate = DateUtils.addDateDays(new Date(), 7);
task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime()));
break; break;
case 4: case 4:
//3天 // 3天
expectedCompletionDate = DateUtils.addDateDays(new Date(), 3); expectedCompletionDate = DateUtils.addDateDays(new Date(), 3);
task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime()));
break; break;
default: default:
//1天 // 1天
expectedCompletionDate = DateUtils.addDateDays(new Date(), 1); expectedCompletionDate = DateUtils.addDateDays(new Date(), 1);
task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime()));
break; break;
} }
} }
//获取当前用户 // 获取当前用户
LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); LoginUser loginUser = SecurityUtils.getInstance().getLoginUser();
if (!Constants.SUPER_ADMIN.equals(loginUser.getUsername())) { if (!Constants.SUPER_ADMIN.equals(loginUser.getUsername())) {
//获取当前员工 // 获取当前员工
Staff staff = SpringUtils.getBean(StaffService.class) Staff staff = SpringUtils.getBean(StaffService.class)
.getOne(QueryWrapper.create().where(STAFF.USER_ID.eq(loginUser.getUserId()))); .getOne(QueryWrapper.create().where(STAFF.USER_ID.eq(loginUser.getUserId())));
task.setResponsibleStaffId(staff.getId()); task.setResponsibleStaffId(staff.getId());
} }
this.updateById(task); this.updateById(task);
//添加主要负责人组 // 添加主要负责人组
TaskStaffGroup taskStaffGroup = new TaskStaffGroup(); TaskStaffGroup taskStaffGroup = new TaskStaffGroup();
int taskRatingPoint; int taskRatingPoint;
//评级换绩点 // 评级换绩点
switch (task.getTaskRating()){ switch (task.getTaskRating()) {
case 0: case 0:
taskRatingPoint = 200; taskRatingPoint = 200;
break; break;
@ -247,9 +258,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
default: default:
taskRatingPoint = 10; taskRatingPoint = 10;
} }
taskStaffGroup.setStaffId(task.getResponsibleStaffId()) taskStaffGroup.setStaffId(task.getResponsibleStaffId()).setTaskId(id).setGradePoint(taskRatingPoint);
.setTaskId(id)
.setGradePoint(taskRatingPoint);
SpringUtils.getBean(TaskStaffGroupService.class).save(taskStaffGroup); SpringUtils.getBean(TaskStaffGroupService.class).save(taskStaffGroup);
} }
@ -261,34 +270,37 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
**/ **/
@Override @Override
public Page<PersonTaskPageVo> getPersonTaskPage(PersonTaskPageBo bo) { public Page<PersonTaskPageVo> getPersonTaskPage(PersonTaskPageBo bo) {
//获取当前登录用户 // 获取当前登录用户
LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); LoginUser loginUser = SecurityUtils.getInstance().getLoginUser();
String staffId = null; String staffId = null;
if (Constants.SUPER_ADMIN.equals(loginUser.getUsername())) { if (Constants.SUPER_ADMIN.equals(loginUser.getUsername())) {
//TODO超级管理员暂时获取所有任务 // TODO超级管理员暂时获取所有任务
} else { } else {
Staff staff = SpringUtils.getBean(StaffService.class).getOne(QueryWrapper.create() Staff staff = SpringUtils.getBean(StaffService.class)
.where(STAFF.USER_ID.eq(loginUser.getUserId()))); .getOne(QueryWrapper.create().where(STAFF.USER_ID.eq(loginUser.getUserId())));
staffId = staff.getId(); staffId = staff.getId();
} }
//任务状态 // 任务状态
QueryWrapper queryWrapper = QueryWrapper.create(); QueryWrapper queryWrapper = QueryWrapper.create();
if (null != bo.getTaskStatus()) { if (null != bo.getTaskStatus()) {
queryWrapper.and(TASK.TASK_STATUS.in(3, 6)); queryWrapper.and(TASK.TASK_STATUS.in(3, 6));
} else { } else {
//只查询接受与已逾期的任务 // 只查询接受与已逾期的任务
queryWrapper.and(TASK.TASK_STATUS.in(2, 4)); queryWrapper.and(TASK.TASK_STATUS.in(2, 4));
} }
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), return this.mapper.paginateAs(pageDomain.getPageNum(),
pageDomain.getPageSize(),
queryWrapper.select(TASK.ALL_COLUMNS) queryWrapper.select(TASK.ALL_COLUMNS)
.select(STAFF.NAME.as(PersonTaskPageVo::getResponsibleStaffName)) .select(STAFF.NAME.as(PersonTaskPageVo::getResponsibleStaffName))
.from(TASK) .from(TASK)
//员工表 // 员工表
.leftJoin(STAFF).on(STAFF.ID.eq(TASK.RESPONSIBLE_STAFF_ID)) .leftJoin(STAFF)
//任务员工组 .on(STAFF.ID.eq(TASK.RESPONSIBLE_STAFF_ID))
.leftJoin(TASK_STAFF_GROUP).on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID)) // 任务员工组
.where(TASK.TASK_TYPE.in(0,1)) .leftJoin(TASK_STAFF_GROUP)
.on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID))
.where(TASK.TASK_TYPE.in(0, 1))
.and(TASK_STAFF_GROUP.STAFF_ID.eq(staffId)) .and(TASK_STAFF_GROUP.STAFF_ID.eq(staffId))
.orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()),
PersonTaskPageVo.class); PersonTaskPageVo.class);
@ -304,9 +316,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
@Override @Override
public void updateTaskItem(TaskItemBo bo) { public void updateTaskItem(TaskItemBo bo) {
isTaskResponsibleStaff(bo.getId()); isTaskResponsibleStaff(bo.getId());
this.updateChain().set(TASK.TASK_ITEM, bo.getTaskItem()) this.updateChain().set(TASK.TASK_ITEM, bo.getTaskItem()).where(TASK.ID.eq(bo.getId())).update();
.where(TASK.ID.eq(bo.getId()))
.update();
} }
/** /**
@ -319,24 +329,24 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
@Override @Override
public void updateTaskResponsibleStaff(TransferTaskBo bo) { public void updateTaskResponsibleStaff(TransferTaskBo bo) {
isTaskResponsibleStaff(bo.getId()); isTaskResponsibleStaff(bo.getId());
//新负责人在不在任务组内 // 新负责人在不在任务组内
TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class);
long count = taskStaffGroupService.count(QueryWrapper.create() long count = taskStaffGroupService.count(QueryWrapper.create()
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId()))
.and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId())));
//获取旧员工绩点 // 获取旧员工绩点
TaskStaffGroup oldStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create() TaskStaffGroup oldStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create()
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId()))
.and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getResponsibleStaffId()))); .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getResponsibleStaffId())));
if (count == 0) { if (count == 0) {
//不在 // 不在
TaskStaffGroup taskStaffGroup = new TaskStaffGroup(); TaskStaffGroup taskStaffGroup = new TaskStaffGroup();
taskStaffGroup.setStaffId(bo.getNewResponsibleStaffId()) taskStaffGroup.setStaffId(bo.getNewResponsibleStaffId())
.setTaskId(bo.getId()) .setTaskId(bo.getId())
.setGradePoint(oldStaffGroup.getGradePoint()); .setGradePoint(oldStaffGroup.getGradePoint());
taskStaffGroupService.save(taskStaffGroup); taskStaffGroupService.save(taskStaffGroup);
} else { } else {
//直接添加绩点 // 直接添加绩点
TaskStaffGroup newStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create() TaskStaffGroup newStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create()
.where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId()))
.and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId())));
@ -344,9 +354,9 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
taskStaffGroupService.updateById(newStaffGroup); taskStaffGroupService.updateById(newStaffGroup);
} }
taskStaffGroupService.removeById(oldStaffGroup.getId()); taskStaffGroupService.removeById(oldStaffGroup.getId());
//替换任务负责人 // 替换任务负责人
this.updateChain() this.updateChain()
.set(TASK.RESPONSIBLE_STAFF_ID,bo.getNewResponsibleStaffId()) .set(TASK.RESPONSIBLE_STAFF_ID, bo.getNewResponsibleStaffId())
.where(TASK.ID.eq(bo.getId())) .where(TASK.ID.eq(bo.getId()))
.update(); .update();
} }
@ -359,11 +369,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
* @Date: 2023/5/30 9:48 * @Date: 2023/5/30 9:48
**/ **/
private void isTaskResponsibleStaff(String taskId) { private void isTaskResponsibleStaff(String taskId) {
//获取任务 // 获取任务
Task task = this.getById(taskId); Task task = this.getById(taskId);
//当前操作员工是否是主要负责人不是抛出异常 // 当前操作员工是否是主要负责人不是抛出异常
LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); LoginUser loginUser = SecurityUtils.getInstance().getLoginUser();
//读取员工信息 // 读取员工信息
RedisService redisService = SpringUtils.getBean(RedisService.class); RedisService redisService = SpringUtils.getBean(RedisService.class);
JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername());
OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class);
@ -381,19 +391,19 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
**/ **/
@Override @Override
public void finishTask(String id) { public void finishTask(String id) {
//查询任务相关信息 // 查询任务相关信息
Task task = this.getById(id); Task task = this.getById(id);
if (null == task) { if (null == task) {
throw new ServiceException("获取任务失败,请联系相关人员!"); throw new ServiceException("获取任务失败,请联系相关人员!");
} }
if (task.getTaskItem() != 3){ if (task.getTaskItem() != 3) {
throw new ServiceException("当前任务没有归档,请归档后再进行完成操作!"); throw new ServiceException("当前任务没有归档,请归档后再进行完成操作!");
} }
//判断完成任务日期 // 判断完成任务日期
LocalDate now = LocalDate.now(); LocalDate now = LocalDate.now();
LocalDate expectedCompletionDate = task.getExpectedCompletionDate().toLocalDate(); LocalDate expectedCompletionDate = task.getExpectedCompletionDate().toLocalDate();
long day = now.until(expectedCompletionDate, ChronoUnit.DAYS); long day = now.until(expectedCompletionDate, ChronoUnit.DAYS);
//逾期完成 // 逾期完成
if (day < 0) { if (day < 0) {
task.setTaskStatus(6); task.setTaskStatus(6);
} else { } else {
@ -412,19 +422,21 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
**/ **/
@Override @Override
public TaskMonthStatisticsVo getTaskMonthStatistics(TaskMonthStatisticsBo bo) { public TaskMonthStatisticsVo getTaskMonthStatistics(TaskMonthStatisticsBo bo) {
//员工组绩点信息 // 员工组绩点信息
List<TaskStaffGroup> taskStaffGroups = null; List<TaskStaffGroup> taskStaffGroups = null;
//读取员工信息 // 读取员工信息
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo(); JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
QueryWrapper queryWrapper = QueryWrapper.create(); QueryWrapper queryWrapper = QueryWrapper.create();
if (Constants.SUPER_ADMIN.equals(loginUserInfo.getString("userName"))) { if (Constants.SUPER_ADMIN.equals(loginUserInfo.getString("userName"))) {
//TODO超级管理员暂时获取所有任务 // TODO超级管理员暂时获取所有任务
} else { } else {
//查询个人涉及到的任务 // 查询个人涉及到的任务
TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class);
taskStaffGroups = taskStaffGroupService.list(QueryWrapper.create().where(TASK_STAFF_GROUP.STAFF_ID.eq(loginUserInfo.getString("id")))); taskStaffGroups = taskStaffGroupService
.list(QueryWrapper.create().where(TASK_STAFF_GROUP.STAFF_ID.eq(loginUserInfo.getString("id"))));
if (!taskStaffGroups.isEmpty()) { if (!taskStaffGroups.isEmpty()) {
queryWrapper.and(TASK.ID.in(taskStaffGroups.stream().map(TaskStaffGroup::getTaskId).collect(Collectors.toSet()))); queryWrapper.and(
TASK.ID.in(taskStaffGroups.stream().map(TaskStaffGroup::getTaskId).collect(Collectors.toSet())));
} }
if (taskStaffGroups.isEmpty()) { if (taskStaffGroups.isEmpty()) {
return new TaskMonthStatisticsVo(); return new TaskMonthStatisticsVo();
@ -437,13 +449,12 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
// 获取目标月的第一天 // 获取目标月的第一天
firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); firstDay = date.with(TemporalAdjusters.firstDayOfMonth());
} else { } else {
//查询当月 // 查询当月
DateUtils.getDate(); DateUtils.getDate();
LocalDate now = LocalDate.now(); LocalDate now = LocalDate.now();
firstDay = now.with(TemporalAdjusters.firstDayOfMonth()); firstDay = now.with(TemporalAdjusters.firstDayOfMonth());
} }
List<Task> taskList = this.list(queryWrapper List<Task> taskList = this.list(queryWrapper.select(TASK.ALL_COLUMNS)
.select(TASK.ALL_COLUMNS)
.and(TASK.EXPECTED_COMPLETION_DATE.ge(firstDay)) .and(TASK.EXPECTED_COMPLETION_DATE.ge(firstDay))
.orderBy(TASK.EXPECTED_COMPLETION_DATE.asc())); .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()));
if (taskList.isEmpty()) { if (taskList.isEmpty()) {
@ -459,47 +470,55 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
* @Author: DB * @Author: DB
* @Date: 2023/5/15 17:54 * @Date: 2023/5/15 17:54
**/ **/
private TaskMonthStatisticsVo buildMonthTaskStatistics(List<Task> taskList, TaskMonthStatisticsBo bo ,List<TaskStaffGroup> taskStaffGroups) { private TaskMonthStatisticsVo buildMonthTaskStatistics(List<Task> taskList, TaskMonthStatisticsBo bo,
List<TaskStaffGroup> taskStaffGroups) {
TaskMonthStatisticsVo statisticsVo = new TaskMonthStatisticsVo(); TaskMonthStatisticsVo statisticsVo = new TaskMonthStatisticsVo();
List<TaskMonthStatisticsVo.DataStatisticsVo> vos = new ArrayList<>(); List<TaskMonthStatisticsVo.DataStatisticsVo> vos = new ArrayList<>();
statisticsVo.setVos(vos); statisticsVo.setVos(vos);
//统计数据 // 统计数据
//进行中运营人员 // 进行中运营人员
statisticsVo.setInProgress(taskList.stream().filter(s -> 2 == s.getTaskStatus()).count()); statisticsVo.setInProgress(taskList.stream().filter(s -> 2 == s.getTaskStatus()).count());
//已完成 // 已完成
Set<String> finishTaskSet = taskList.stream().filter(s -> 3 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); Set<String> finishTaskSet =
taskList.stream().filter(s -> 3 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet());
statisticsVo.setHaveCompleted(Long.parseLong(String.valueOf(finishTaskSet.size()))); statisticsVo.setHaveCompleted(Long.parseLong(String.valueOf(finishTaskSet.size())));
//已逾期 // 已逾期
statisticsVo.setOverdue(taskList.stream().filter(s -> 4 == s.getTaskStatus()).count()); statisticsVo.setOverdue(taskList.stream().filter(s -> 4 == s.getTaskStatus()).count());
//暂停 // 暂停
statisticsVo.setPause(taskList.stream().filter(s -> 5 == s.getTaskStatus()).count()); statisticsVo.setPause(taskList.stream().filter(s -> 5 == s.getTaskStatus()).count());
//逾期完成 // 逾期完成
statisticsVo.setOverdueCompletion(taskList.stream().filter(s -> 6 == s.getTaskStatus()).count()); statisticsVo.setOverdueCompletion(taskList.stream().filter(s -> 6 == s.getTaskStatus()).count());
//逾期完成 // 逾期完成
Set<String> overdueCompletionSet = taskList.stream().filter(s -> 6 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); Set<String> overdueCompletionSet =
if (null != taskStaffGroups){ taskList.stream().filter(s -> 6 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet());
//统计绩点(计算已完成的和逾期完成) if (null != taskStaffGroups) {
Long finishGpa = statisticalGPA(taskStaffGroups.stream().filter(s -> finishTaskSet.contains(s.getTaskId())).collect(Collectors.toList())); // 统计绩点(计算已完成的和逾期完成)
Long overdueCompletionGpa = statisticalGPA(taskStaffGroups.stream().filter(s -> overdueCompletionSet.contains(s.getTaskId())).collect(Collectors.toList())); Long finishGpa = statisticalGPA(taskStaffGroups.stream()
.filter(s -> finishTaskSet.contains(s.getTaskId()))
.collect(Collectors.toList()));
Long overdueCompletionGpa = statisticalGPA(taskStaffGroups.stream()
.filter(s -> overdueCompletionSet.contains(s.getTaskId()))
.collect(Collectors.toList()));
statisticsVo.setGpaOfTheMonth(finishGpa + overdueCompletionGpa); statisticsVo.setGpaOfTheMonth(finishGpa + overdueCompletionGpa);
} }
List<Date> allTheDateOfMonth; List<Date> allTheDateOfMonth;
//有传入月份 // 有传入月份
if (StringUtils.isNotBlank(bo.getTaskMoth())) { if (StringUtils.isNotBlank(bo.getTaskMoth())) {
allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(DateUtils.parseDate(bo.getTaskMoth() + "-15")); allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(DateUtils.parseDate(bo.getTaskMoth() + "-15"));
} else { } else {
//获取当月日期数组并遍历 // 获取当月日期数组并遍历
allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(new Date()); allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(new Date());
} }
allTheDateOfMonth.forEach(item -> { allTheDateOfMonth.forEach(item -> {
LocalDate localDate = item.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate localDate = item.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
List<String> taskNames = new ArrayList<>(); List<String> taskNames = new ArrayList<>();
TaskMonthStatisticsVo.DataStatisticsVo dataStatisticsVo = statisticsVo.new DataStatisticsVo(); TaskMonthStatisticsVo.DataStatisticsVo dataStatisticsVo = statisticsVo.new DataStatisticsVo();
//如果日期大于等于接受任务日期,并且小于等于预期完成日期,则插入 // 如果日期大于等于接受任务日期,并且小于等于预期完成日期,则插入
taskList.forEach(task -> { taskList.forEach(task -> {
//接受时间 // 接受时间
LocalDate date = task.getTaskReceiptTime().toLocalDate(); LocalDate date = task.getTaskReceiptTime().toLocalDate();
if (localDate.compareTo(date) >= 0 && localDate.compareTo(task.getExpectedCompletionDate().toLocalDate()) <= 0){ if (localDate.compareTo(date) >= 0
&& localDate.compareTo(task.getExpectedCompletionDate().toLocalDate()) <= 0) {
taskNames.add(task.getTaskName()); taskNames.add(task.getTaskName());
} }
}); });
@ -518,7 +537,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
* @Date: 2023/5/29 18:24 * @Date: 2023/5/29 18:24
**/ **/
private Long statisticalGPA(List<TaskStaffGroup> taskStaffGroups) { private Long statisticalGPA(List<TaskStaffGroup> taskStaffGroups) {
//获取任务 // 获取任务
if (null != taskStaffGroups) { if (null != taskStaffGroups) {
return taskStaffGroups.stream().mapToLong(TaskStaffGroup::getGradePoint).sum(); return taskStaffGroups.stream().mapToLong(TaskStaffGroup::getGradePoint).sum();
} else { } else {

View File

@ -13,6 +13,8 @@ import org.springframework.stereotype.Service;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import com.cpop.core.utils.SpringUtils;
import com.cpop.system.framework.ws.server.WebSocketServer;
/** /**
* @author DB * @author DB

View File

@ -2,13 +2,14 @@ package com.cpop.system.framework.ws.server;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.websocket.*; import javax.websocket.*;
import javax.websocket.server.PathParam; import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint; import javax.websocket.server.ServerEndpoint;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;
import com.cpop.core.base.exception.ServiceException;
/** /**
* @author DB * @author DB
@ -24,7 +25,7 @@ public class WebSocketServer {
/** /**
* 静态变量用来记录当前在线连接数应该把它设计成线程安全的 * 静态变量用来记录当前在线连接数应该把它设计成线程安全的
*/ */
private static int onlineCount = 0; private static AtomicInteger onlineCount = new AtomicInteger(0);
/** /**
* concurrent包的线程安全Set用来存放每个客户端对应的MyWebSocket对象 * concurrent包的线程安全Set用来存放每个客户端对应的MyWebSocket对象
*/ */
@ -112,7 +113,7 @@ public class WebSocketServer {
/** /**
* 群发自定义消息 * 群发自定义消息
*/ */
public static void sendInfo(String message, @PathParam("sid") String sid) throws IOException { public static void sendInfo(String message, @PathParam("sid") String sid) {
log.info("推送消息到窗口" + sid + ",推送内容:" + message); log.info("推送消息到窗口" + sid + ",推送内容:" + message);
for (WebSocketServer item : webSocketSet) { for (WebSocketServer item : webSocketSet) {
try { try {
@ -123,21 +124,21 @@ public class WebSocketServer {
item.sendMessage(message); item.sendMessage(message);
} }
} catch (IOException e) { } catch (IOException e) {
continue; throw new ServiceException("发送webSocket消息失败!");
} }
} }
} }
public static synchronized int getOnlineCount() { public static synchronized AtomicInteger getOnlineCount() {
return onlineCount; return onlineCount;
} }
public static synchronized void addOnlineCount() { public static synchronized void addOnlineCount() {
WebSocketServer.onlineCount++; WebSocketServer.onlineCount.incrementAndGet();
} }
public static synchronized void subOnlineCount() { public static synchronized void subOnlineCount() {
WebSocketServer.onlineCount--; WebSocketServer.onlineCount.decrementAndGet();
} }
public static CopyOnWriteArraySet<WebSocketServer> getWebSocketSet() { public static CopyOnWriteArraySet<WebSocketServer> getWebSocketSet() {